From f0c0b427cbfb314f15f2a0c6e91825c385df0aee Mon Sep 17 00:00:00 2001 From: Frank Voorburg Date: Mon, 24 Feb 2020 11:56:47 +0000 Subject: [PATCH] Refs #963.Updated CAN driver in the STM32F0 port and the HAL drivers in all STM32F0 demo programs for compatibility with the latest ST HAL. git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@749 5dc33758-31d5-4daf-9ae8-b24bf3d40d73 --- .../Boot/bin/openblt_stm32f051.elf | Bin 644088 -> 713960 bytes .../Boot/bin/openblt_stm32f051.map | 674 ++- .../Boot/bin/openblt_stm32f051.srec | 884 ++-- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Src/stm32f0xx_ll_pwr.c | 101 - .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Prog/bin/demoprog_stm32f051.elf | Bin 509308 -> 553572 bytes .../Prog/bin/demoprog_stm32f051.map | 477 +- .../Prog/bin/demoprog_stm32f051.srec | 695 ++- .../Prog/boot.c | 11 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/bin/openblt_stm32f051.out | Bin 305428 -> 293168 bytes .../Boot/bin/openblt_stm32f051.srec | 962 ++-- .../Boot/ide/settings/stm32f0.dbgdt | 853 +++- .../Boot/ide/settings/stm32f0.wsdt | 36 +- .../Boot/ide/stm32f0.dep | 4204 +++++++++-------- .../Boot/ide/stm32f0.ewp | 7 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Src/stm32f0xx_ll_pwr.c | 101 - .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Prog/bin/demoprog_stm32f051.out | Bin 145464 -> 136232 bytes .../Prog/bin/demoprog_stm32f051.srec | 709 ++- .../Prog/boot.c | 11 +- .../Prog/ide/settings/stm32f0.wsdt | 18 +- .../Prog/ide/stm32f0.dep | 3485 +++++++------- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/bin/openblt_stm32f051.axf | Bin 721932 -> 721536 bytes .../Boot/bin/openblt_stm32f051.srec | 495 +- .../Boot/ide/stm32f051.uvoptx | 109 +- .../Boot/ide/stm32f051.uvprojx | 5 - .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Src/stm32f0xx_ll_pwr.c | 101 - .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Prog/bin/demoprog_stm32f051.axf | Bin 600972 -> 601012 bytes .../Prog/bin/demoprog_stm32f051.srec | 651 +-- .../Prog/boot.c | 11 +- .../Prog/ide/stm32f051.uvoptx | 11 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/.settings/language.settings.xml | 26 +- .../Boot/Debug/openblt_stm32f051.elf | Bin 282292 -> 282092 bytes .../Boot/Debug/openblt_stm32f051.srec | 686 +-- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Src/stm32f0xx_ll_pwr.c | 101 - .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/openblt_stm32f051.elf.launch | 80 +- .../Prog/.settings/language.settings.xml | 2 +- .../Prog/Debug/demoprog_stm32f051.elf | Bin 155972 -> 155912 bytes .../Prog/Debug/demoprog_stm32f051.srec | 36 +- .../Prog/boot.c | 11 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/bin/openblt_stm32f091.elf | Bin 941400 -> 1029676 bytes .../Boot/bin/openblt_stm32f091.map | 641 ++- .../Boot/bin/openblt_stm32f091.srec | 1132 +++-- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Prog/bin/demoprog_stm32f091.elf | Bin 803608 -> 864592 bytes .../Prog/bin/demoprog_stm32f091.map | 494 +- .../Prog/bin/demoprog_stm32f091.srec | 1037 ++-- .../Prog/boot.c | 62 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/bin/openblt_stm32f091.out | Bin 319432 -> 310888 bytes .../Boot/bin/openblt_stm32f091.srec | 1165 +++-- .../ide/settings/stm32f091.Debug.cspy.bat | 4 +- .../ide/settings/stm32f091.Debug.general.xcl | 2 +- .../Boot/ide/settings/stm32f091.dbgdt | 6 +- .../Boot/ide/settings/stm32f091.wsdt | 34 +- .../Boot/ide/stm32f091.dep | 3097 ++++++------ .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Prog/bin/demoprog_stm32f091.out | Bin 169092 -> 157652 bytes .../Prog/bin/demoprog_stm32f091.srec | 1077 ++--- .../Prog/boot.c | 62 +- .../Prog/ide/settings/stm32f091.wsdt | 6 +- .../Prog/ide/stm32f091.dep | 2180 +++++---- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/bin/openblt_stm32f091.axf | Bin 1155784 -> 1158896 bytes .../Boot/bin/openblt_stm32f091.srec | 1030 ++-- .../Boot/ide/stm32f091.uvoptx | 11 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Prog/bin/demoprog_stm32f091.axf | Bin 1040172 -> 1041968 bytes .../Prog/bin/demoprog_stm32f091.srec | 793 ++-- .../Prog/boot.c | 62 +- .../Prog/ide/stm32f091.uvoptx | 8 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/.settings/language.settings.xml | 2 +- .../Boot/Debug/openblt_stm32f091.elf | Bin 310212 -> 314240 bytes .../Boot/Debug/openblt_stm32f091.srec | 1064 +++-- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Boot/lib/stm32f0xx_hal_conf.h | 11 +- .../Boot/openblt_stm32f091.launch | 90 +- .../Prog/.settings/language.settings.xml | 2 +- .../Prog/Debug/demoprog_stm32f091.elf | Bin 182248 -> 185988 bytes .../Prog/Debug/demoprog_stm32f091.srec | 961 ++-- .../Prog/boot.c | 62 +- .../Inc/Legacy/stm32_hal_legacy.h | 1052 +++-- .../Inc/stm32f0xx_hal_can.h | 799 ++-- .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 4 +- .../Src/stm32f0xx_hal_can.c | 2948 ++++++------ .../Src/stm32f0xx_hal_flash.c | 16 +- .../Src/stm32f0xx_hal_flash_ex.c | 10 +- .../Prog/lib/stm32f0xx_hal_conf.h | 11 +- Target/Source/ARMCM0_STM32F0/can.c | 129 +- 169 files changed, 42820 insertions(+), 35410 deletions(-) delete mode 100644 Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c delete mode 100644 Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c delete mode 100644 Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c delete mode 100644 Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/bin/openblt_stm32f051.elf b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/bin/openblt_stm32f051.elf index d2738c69a098195fe5e001d7de4463769913215a..1e4e95099b809841ca28e3593abe902610936a20 100644 GIT binary patch literal 713960 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%0DQdCqct_Awx-j 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 R&2mpJ`dE%AA*4#~{{x@p9pL}~ delta 180034 zcmeEv37AyH)ppgrxA$3k_MV=Fo&^}T*;rL(N0wO>5S3MjWpIXdSVaUI6?cswm`0o= zh#J=zM2W_T5;bZx(HW5hG$upD-NXql0|@m0zID5s9yE#H_vcT(=YPJ|+f!$$Q>Us< zRh_CjxB2kb1CHF+cY`lyf4f5nO<0BqpU_2tNEQh~3ej4eAw_Y9uorKv%Ih~GLkK<= z!H*<^*n?bqgzy1xZw0&!L~EdUtRwBw_LAVn_JQ#};k!c$`@4AF!?W?1nTa3ZFL>4G zBc$(5ynT_JI4DgM_H;ZMc(U;H!jpq14^MAAeev|eGXT$^+jq;pBL|{Xd!2ii7@)V? z#@WY;PVua5tllgJhz|E|Yn>SIb^DevM?YXmL!|JLzZicB2kcV%v=d(k`b*g-_W7@U zqMs05zdRzl?hDM2vL=C5+JmYw!$&$)2|Oxgigx3XK)aNq1D#UZ{X&r1Xca#9uHNHZ z%`$gWO;U}k(bep&);s3q;;_9Y0cY!vwaY}P6a!ftHacZ*;ggk>8 zZFSR{V{(%!?E{W>*ii5@N8G#jj21qva!xuL+^tmxgU)sVRc3s{yarG?GRdIBK zZ;wTEopsbvcc8^ln^1WG#n{Km$|*Cav^WD_yJXg|1hkpVVeKb3$Jc6=QyV?aaro=S z-&pl`a&wHrqrH4rp}jow9kqcAG}%9}#wtDjac|1zzIEx9^P4|zPO9nOl2r3xi?_xl zl4|tE>gL?Kq{;_@uW7uh*@yHz(64UHuG@lcgMD;uK4S081Y~r``$gB4NAxYQEuSdx zwfAcl{d%=O*s?A!L)%&%+fga%?0Y=2YvIv^I=!;eZp(F7dTKiTjnWs}X_6X`3PZ$n z0%JgkMnQNiJBoLI-VzK3U&nJCoiajJiczAnD=374uFP=6qcio|z0>zswvItZqA3@k zBMn$VXWrW)sWQW{Ijxr$b-j$rqJpy-ri-Ma&09Wvja+mTY|ov-IzU71uV ztezUJAf{a}Fxq879C+UddOBlirZ)GR!k5_Ttjm~pr!5BQn9gAL^TA;Eb$B)fEvUHO zsgISN>wH2}_DKst=^OIiwrr_(b>!D=owqLM1`Ls{v+kIe3p3w3OZrCoJALR5S4Wm2 zb1adZ86pqr%uv)6MRi~tk(w5wW_PA2YMi2Sl#!YcqQ-Z+71e4=4pC!5RQ6Qs7~%GF z^qdHyBgY1VUk7Q^s8CSE@b70q%$WH5Y_MyW$S?1dd3U3g&SKV z&uv~@Q(j|jJf~Tf%RTw`ss)<2^oIKZ`En>V9o zeodDAi}yi)O^T>(Ij?3wjXo>3^Xz#UPOq3+GqvWt8n1lAdwWfP(ay%O^prw{TZnoOEvnylCYuUMqlU)?TqbLzY+^=3IBzQc!k=X*y)K{0INyBjBCbbwjH`OG~Ea>zAa|P(R9WrlP_29+@&9XSL(pr8-QaiPg589+t!Y0hAHBVl0_Cq&(_FKI+0aJntm889xwANh)rpPCc zTZFxHcBZvm_y=aRi>@8VD>K$td-lfFz1{q_?eLp1_4jmJRt|ktQS}51G>*^hbh!gU*Ucy(GafKXk26`eJO_4n|*!^5k6b$N+ z1NC-opx&YNMr-vJoqnUY$oF+NiahDdomjoqqrG{C=%}=H`f}g!o*_0?I)%LBKxIPB z4LjGR2fHT)T@dwypbK3hLtUbG$RUSzK3x5Wy&_i+wY!dq-n5o*+qdo#1!-^X*%_aw zSK80I({3Gnr%0&X>_^{W#me_p?h(g_^cL4tK3H>u%&EK*MNVmScV2CGH0%NE^eH-K z(LEyAr&L^3xfwhq;K`|(GNF|#+F#Il2hj;5oEW(A`yI988y(|Z^D?vy=N_N1>NT!e zB5zZpZE#YgvoOU9cW2;z8;l^>eaUew*p!61$Bj-3c27QeEawJvR^v(9t;o$0(pOm> z?A{P0r+b&RHlf+g?uEo)_j?%n-Cu`fpf65-uxB&|)jD?kcsK-HTOay59`oTA)z2BL z!~koD%yrdyTZ8^mSKZc`)=rUY2PjK}rM9}QSQa;Z4O_e3AiA6{Smc5f9CotwcOz>I)%9phTJw`PR+>s}6Y%?UX}B zSJKfEaZa}A_hm<5YP|IMq4;2SgxO*&Hm>dmP_O^ds_a>r1u)rV$3%hNQBoZ2K7KN$ z(`L35mU%hi?gee58%J%MBTuzblP(2}YegUJHxk~i2b%?I>{Scn4 zguiyu-RY>?vS53r=sGh}hOV^Y|v+`IHu z!2xt&_MaTl*|#=vmFz#ZWBA~=b`I@7X#XaWSG#xek46W(KRVg3GuUkn_QCfLPUhiz zNYICG|H&+TuRQ6+_w18t_?~z&8Q*6F6a4ryIT(lUz)2Ur*9YxP!>b8)Uw=~T^!b9_ zr6+6hoN&t|RB!|Ce{vKSnvRP^KkGYgA#-c;o|~kjv#wXB%?hlC^KE!9lzem_6&B@G4b26YXUzENe*7tf%j#Jri__{no?!P?K|{!bl#bLo?sb%b*+DDiV|$U0^${)6 zy1Tz7d>^6>2jVYw&Ty4rOO35#0_zfFfmW;q9!!7-R}2b!?6V*pL-+15{3V*1gNi*p z?Woz~vqOJ3h5jB0{q1$kq~CXxUYqFp8hFmJB0m+)H~r*nk&(Vtxa#&!eyG~D-!b+o z&&1|CJwK?nyfND^($jAe&wD(pjZXR&F$3Q}5QHzcXY|dgeJR8ZA!nYPB@)v&3485c zPsZwpur-^la&DPy3FZ6r02l4n-KX*;AYb-r`7EJ)dp(nzS)!jsesTaqMP+pFde!3S z(3|h5wzq40*5%%YmjC%t92In;{W_)c8;b}l@H5r*(}?HV(B-Qzaw zOj1O)sB=!!wv2{zKG^7}!mI~}rl6qxtmZ9eTiUBekAN)yuY$JhOrQ>VN2VJ?uv0s6 zR@S@T*xF6i_5;|7iK!TNF2iya-{ZLuKvakpfbYjp3e+0tgf)-V;KEXjAS@xFmjz;$ zI9e=h$}{Cw0~_K-J~U{y5?f5IroxYnRd!NchIeaq=6=jqCxZpv_TqFoBG`Qw(y8sU z(S$K*4Qt0>(O={UCkFXBL06{<*#M0R8t6c?J7`C6Htp;V7Q(`gaM?yFF{+e!l(PJ! zMVMtQ_MZ$6vbP5d?ClcETCjU&4`D}4VVLzXA)psC+T*eR-_pE(^sG?{;w@~4W{&c< z@O!HI-m1ReYPrcXty*r94;ncJ6ugOBd7rs5P^mpoE)FLwagbTM*ArKph|w4u^&O+q z=C@0w#Q=%krlDf~h)a|G{YE<{%6TURP69ZO%fXg*3otW*p>dL%<0ae*Vl1~+T?uSlDu_t$(Z=EIB{d&+o&e^QzZB=J- zSmjTQYKCKXWZM`Gv%cy6;~=wg>Caln%);};D32T=o3oCBgiiqu0ORUfcZuHFBDVgJ z_a67X)kgb6;`7N{#>k;ZJ`i2mN9=W^+P{U`y1M`~Z}=IAv@WjlY^v7U(_7`>V;`Uu zJJaFPES%Z0sBkvRGe1((4Xe%WAjEWeys*y-J=3Go7a%*^5 z{w}`{N+jcn!{a?op*|saApVx(8G+~A)}}?(^?|RvGRL-J=F;V8gg|zN{ISvXUeF(? z8s_jm+P>_)UBA>GmW>k|d}lA5)ih^L(;VOUrHf}bEnBvD>9T&lp@l;VOMIopCBur( zC^^Gdu(WAG)68W}{e07^CN>l`g|ZA9I%w9?nTuvOV=u6>Wm(JOMZVG@#Y4^*HbZPc zD{G>EpkuX`9QaVvGUb+lMc1a=&$W>-$QsC*sTKQ+7Pl@hx@7k3K{J;w9JFZhqNYJj zGiS978hY`NK`ea9;G!OcqLxLo7p$1mRJ3sB?Byntn~ zRy4Gba8XUedE?G28fTXB&!q=CI-F_cs%P*e2c+p%yXztbpGgmBYnboqOW%*^M#M!MYLW#w#W@6FGg=S)T%fhCmW^&fd z+4JWtUL1nvwk&80XA1GIn%!y;6<9YwD~QF&TDE*n%Oa}d3|wK+a-}nHmqp7CJbSm6 zANXRHmKexR(wu=G#A>#{hB=x|x&jkek+S((Z;w-mi)Suc*23IEENZ$G{h=fsoS+p{ z&S_$0%pztky~Io}ZE8}b>Bt(ceRNtAV!`6s^TDhK#xK?81@4)s4SHhU0?i`>S0tk;`FH)JZV&8un$muWa!k|_8?P5ABl>q6!h7iqZkA?^z* zGaMMQ57BfJYv7VZ-zcSF=v$4#sb%_0YkX77vXJ<>^p%%EwZE+OmE{!W+Zr-dj6sYA(@>HA?-^>HO-q+!X)5fu zyKzZ2eL_P+gYK@?<7z94!-m8KO<%9c{Q8!%+_Jo)y1McbJ#qQPRV(YX7G zy#`ZpYl4;)*x}H!{^L_`-=W&je^W2MGE{2|Tt8lm4cx%a`h1p_B&|=pI84iuq5eV> zMfwZraDQPUj!Z1kX-qPqiNy%qIz^lJMA}qswB&T6I^%U+dWPtij?`lcF|GXA8J<>F z6zWSx>IsGU;Q^_*yLAc1yTfyU!fiAprjc%&#BjW2RpEdk`Qgbxk+-SI;J3oJq6iF+ z`wKPfa!-}NL&}`;yyC(2nL`x;dW|(;LLW+*TolGALH8SS6bky>C}csG*EW>s%WCxm zA8WgJ%sNe0 zP2hBTrBRE5u3AG$AM0iTk$Lr+HHEs9l-HcTOTe~kMeVuynmtO+2~Fyb$-0xpy`@pq z18WN@_hAiL2QSy1la*%4VV$2?8xr}PqY!PX|8nJAh_pdu9fqYQ&iS7-r(&k$T(8<$CanLM*tG zd(5!gbeUX+wvcbWDPbO;{|DVj=LFEdbFnoF; z9jSw>=MIMLJ*}p;S1`|M`W@CneG>w70)3ye+Q?eQorB-Fy`Jrqx2U9i+_LZ+-e~9!Zj#+it4QSoj%p4_p2QbY`4mCi+{4F zMNP~{=pd;*lXAE2Ql7Kpl#%_%oo3}8q+X}x1Ty<;iT@_|xg!&M9ku^il%yp~i`ulC z8~?kqw6wsiVOpx%**kGW(L8ej_S@hYpryg~CQQa2#vYh3L2C#+IT@R&=O<{RLlZY* z6(deJ(qX4NdIuk!{?^?*wAq-VdGY69td@#DkM=@=mcZY}t3NaQYbmCtNTuskY-XI| zEAc6YgLf!M@-zV3T?Ap89_v9^!Zd8QO7imZ%Cy)h8@WZ3qpB~Vn`xbFtyh0*trOMX zk@(i=8!OM&_#sjj`ncAoteYz;a_8u-$?ChdW(u&(-=O{?zrN}!KkT_;8W|k5x2wOd z+G-Qwnyg@Ft?n3E|08{6p&sjNXekG)Qyno_Rmt>yPcQk0*4t3>QdRO&a2L<0shHMa z7Gj@TGVMA77w9jF+6sU3FqCouO8-#(_0{V03sow3?Qag*r({~g)G6V$Pt~o>nJZJnE33lX+|@a|BlR*ZMk79hwF<#Nu${**TgOW54I1PsO0;M57K^Pn)0u zhk9uVfz~RO4TqSSfr}<(&GNZa(kHMV_=-p0~55!q2(nNQyMDDOX@2s zs(NhacUqCfZ7F?8;#+VE9f7L`Ofy$X3ymnjwV{gvU? zet|vEjz+AQk`r;sKP2*}QnE7P@~bMRl~mx6d0K@&*{2uy@+&H)mgMN>dGk2d`a*s3 zNWEfYxnASb%Y8lONSvbNN6D(l!(`fAQO5aqRbd&l)Tb8?)_p#u)oaQ@cKz>+Va^zq zz@bE~pobU3X(Elj%6FO_PIF}bM@$Ug*`>MJ4paQVkhvApa>6$IFmZQVWJ>*%etqkw zloa(?(SkVskFvEIrknYd!>{7v;_~A1%JR~B{h~rWFS1KigX3vkriT_Xzv)c9b_!!6 zeqvg(wANZ1iYrPgN*gNb8yd=sOQz&at*$GsXqaAcZbL;~-Zj$})K9ISH@$9X!?cF- z@L>3mnt!Itq=vGg10n~6ZU?YeV-}otsv?N1(r-0RV^m7str&R_7@oP>!53NQ^C|3z zAqSV6cQMvN>m)sl&QX&t44Cnsgca{dn2%8v^L~Fz8_hU zsb&BBb|GnjJvN+5TE=SU2dV~WwSm?a~R&Fn${NIx6snqQkJx)gSg3 z>c10L6_xNnO6u*G_grWWE6)A8EVh?|eD9j4P7NuHD9jD0$yTMxr)#e2q2@*$!)iLt z>5=b-wLjF18Bs&*E=9arWxRTA&x|`YnNmD&YL9yTRy)llenFEt=4I)XYEWRi7rxZ` zj}HajX9c)5|M!iD)WFE`+OWuhPfVbGKJF(m6bd*{9D$$Sp}7MM1GK&z8ETmeUC*nL zu_Q3O5{u)%a6@j~p>6+rV?Y_|EAq4s-4}&;l1BQNl(}`qIk`D`rD2=<1M#2Y=<%9) zk;57nPM$6wJ-oms%629 zC_$UFG&MENW#kLbmqI}&Ku3a3w7|hiEgA323P#biFx&)F|JO*PV0e#w`i&7hwq3X2JtJ5%>fgRyi7e%_RIxfnF%~f;?a|jcAYAF90TOwq*GZ} zwwm(xM5es-K*LNe?>|28g+r(khWy7OsJ6}uU0oJqk_!hgp|xh2u~A4x!l{Uj3XTdq z-ipQgudQ1D!0WTMqSIoSI$dTA)7?1#MEFu>z&>Bg`EEf=JF5O!&{DL$M5kdEVY^YW z1p&kssGy~Ec`-~RpC&RmYF}SWM1}0#QjdlARx9s!zPgNeJ@={fJD1h23~%1oll714 zf-7L<3jOJ2IDEhY9ivR^x&Jk-)8h>T{adu@<^sEJyJqxnnuEcL&v&z|R^D5B|A!k@ z9gJ!-4Wk{QXfT^y7P^G5uO2zLBy!RHFzH=F=11=So+Rc<-2IvEST9(uCjQ89&l*`6 z_{$Y=EIwVM*>%Jf268S#z*JwqmKqZ^^z=ZTU#p^byoaK;Va?LhMuwNs-w^j4Z`^Yt zOKT@_2w3S|QBo2?9#@QpOan3}2S@dxvzyEqFdqbSMB@Tt4u?4NLVGKgKbeG0798F{ zEJp)yt;D_SKwyrqJUkn(A?`N2)Z={>C3zL9v=I9}B)x$+o&+CGVPXpr&oj8PY(idM zMNwFxLu9$nB8ywf@>@!#g^q;%7|^jGyl4_C>PZO+Z6@Je_$qmM<+(a8Po1@SVQ=MT z(jK#7LqD$wl@8^2oY-feVNBsq%knEOjS!BIa7YnQd__e?!?~B1<>R>BZ&r7D9Oyq# z)x8GvNGo1X{2t(0uLyPF|QBQ%> ztmbI6^@l{gELliJMg28Jxjp{VUA`z-Px9%mk<%)98o-lID;D-ByF0K-8`#sx7GI9N zS;1x6_&VIAKc~NGxtD6}DFdJ&NcbL^eonRhd7j$_y$D%~;A2GJ}6Xo~?p^kq9rDNOHWo zRwG96&?+sbXPsMCYX!xqZ9NMrK%*5SUO5uF+Dz;Vm_j1RbZQWIeYJMBi{*!ci34w~ z(YzK_VqoOuTJN4^pu5HnM;U7(pHG0g*!Qo@8$4S|TMosmVH54iA*O-ts zaWLF(zqwQ!@eQddfxfG>F&Pm3CI#TN0UW>dR!zEDEq*@_EZL@w|Np_8s_*Fo|5L~L z+nsJYb3&{L{ILR;yT83f8=+RgDLox5(}GU(uT1-*qZM(#qUL>EWStg|4o+I#hppPk z@3dYb@+{(nt&90bk>me5C+t*!=O1W3@2C@yUnbFqdVT?e6^?khYTndTn2WP`tQz4t z;0W2jQ0&LOj8eF*YX#Q4RR7cf9EJhbx@z`bA17-py$7v$G<1|mJSrdFE~ znpY>24WpwnbcU#oCG`?OI(N1D@DRQxti=XqzyVZE!_;~8=$iyn*DrV6i&emz7XzHyS17#MmUj(dK&1Q(&vFIOmpx*2uy__OvOpM1iP zi=2E$r?Ei|?Mk9vr3k#R#Js??MN;NfrU~9^!|AMIX=J4ay5U#i*6JgLV2{;_#p);14QY=5^#dx10boJOuHiH82seF%#!3_Nn5 zHoWI*^Y#N;6aC8jDda3fJoqAVsXYDcXxt96y$@X0DZVF(yA=*W6mAc3xL)WJ@m^jg z=GQnLh{$gzW|qr-@c93X!F{iRP@Td++g*q^K7KPc)c@{C=a+BS&JHy9 zLXb0!E(iPWxeI14Yrc5F%*z(9;6V`wvvP|t&M~S32YW%wO|dX@4xz!waB5YH%n;y> znjs(}dWHzR*{Y3?>p6%6ompDeY5T%&e_=|EX%*ZMHKzMSPLf&{Bl+)obINQ7#4FeW z*H)VYKQ!D`1F7MzQfj!Xlp5}4ibGqa)X-KbHME&hLmO?&q1{OvK4FoicsCzD+Dd+% z#jjq2@r|1^^)?o7&f*FqJB|D#WZG&)rlR$VYqfe2fLzYP$UvV?F6^34aYbYy{3o(U z*-W-Wy38G1ol~c;C>+u!?5ICU%5g&uD?_YMadBC3@%5^-WsJX)R-aXGEY$lI4(VO2 zPb$<0`NH|!$;fx5A*)8=%3fbOc^Kli79%z?C%h$?l+2gGerCwk6%`j(OzC@W@w64a z^KcHHTdZHKBCOnzOV&3j>{*MfF2(H)gygES3#}E{zizBA$|){ZEvGG1sx4RVYM>!T z^(_rgcym%90fD>8b*2N2Ru}jU456Rsfm=hiTQzykMJz$xdX5`fRB@@kX!%gMTQ63YOpD<&6wR@a9Y@!>71JZ<>naE&iu79VWFNGaX#`>_Gey?6|+n zx!2SIi0Kc#0s8Ot<1x)^$+Vs4gzOzzJTr;8S;~UE`hIx>CWOcCNTS~mvUI}468i1G zE=hrP_n}2v9?*tx)q6lIiS`tXK-g2b zheZ^~q{w;O{X`57Bib-8stW>v_ek;Cf}i%}Ypcta<8Wd{>&2&>#q&f_^Wud~MJw^v z?yMC{FDV+;w6bZz;?{+DPqxT>FMQI)=Z&vlzIbd^ebFSmpV(wu4yJ{Rivo|P8-4sm z)!4I%G3T7`t2)nDT39-)uvEx(2N0cW;FtLDEvpacBIfsLhM3u6>O_q;^9vtM+SgsJ z^Uuxq;*Vil^qB_8dJQ4X_QZNXnq?P`13>%UL__F?1$Xs;EI)y_Y54y#SQFN&;S^=J zI8kfOZhPi2DU8oRuod&{6*&*5W1+YbY3n9@-H*q1GrrI)`SuiBxg8-r-eE3~UAP3q9%cr4;^J-MgK2)&?=iNFuhAF^s+UMfErQr&&JLjGS zwh?{>#W==|LLp};!0kAfz?lk2c2+D0-&qRqINxl9gpmr!bX1K7TbU}<=ct|tpj=T3 zgk=jfa_!f_Tp^30lzoK#a(Oelk9D@MRcyk!Y?9^|_A3-*IBLd$Wa?vgp8E{icAcWc zIOiOLgew)`b{<>`eXdeKvh!FzfU6bYab~SXp7jdIbe_2b6~9ISK1U5({aOX&J8yUy zlQyCL$uSWL67TrDfT`BYhR=t%H`gUO)EU=QrpU{3TSWG~~$G-q6Hbv3hvyzc# znxO|Gd8QevRQGT02jx}+Z@NKR$%l}3YlyOEIw*cae>Fn!o0Ry~k3z5c3eerpL9}JL zuAlUi?|U&ip_5F%^gKq|a$S{^Wc*U1k&@=4HGeAg{_xil=42TJNKbD5QWwUfs)t0% zALBsyTyFqVs$%+_JZXyOOEoIp$4-F%0Zm^P5%hpxHIymoA5{Q{M0;P!zTEtV~Y*%KnLI@J{i_gK6 zEyr7Q{3*iZTfrdO6KVo1CZ!1DW`u+-VI~aY3kznJC zoY$U)Uc;v%$sadxQ_HqF6m|h&Whx=euBOEMg!xYi=S-6&n}6) z=hsRhH*t__8^@>9w9s+(L^6E;XOQHb3RE+|{4gFbkdnC`?L>3+hS~3UkL<&MT0{0Q zzPGi!n8{|zYrGvN2Wht!)$h%Bi1LHeDZMs_ zC_VT^?t@r*|n^8GHMYxD_a_Ga{YDmqA2x3;E{gFmbdZa^Sxf&iVVE1ck>L?E6Fb8hl(q*=OZGA^60M z>C@=b1)rF)eOHdv1Ru*by>IN*n!tl&n;+?740^>7<@`3?oj|+k?%>Db)aL^YZxQZKo1=#Ie#f^0eh_Q1OH?CBG z+s;+oxJqv4{F7|wGHzV0NFFW8p0cth%XhOU%RjWI)6L0x%ABm-6dcS6u7$t%z*-Tmw-7=;O-JI#|hkB z0_He@yGtPA?h-J^3EW)*<~V`3OTZi_ez?1YBJM7MA;KAQcdtNWx^NhVn(UsXLAh(X zFkQwN=mGe7fBl^y9DBwAA99I9V=2~d%!B(N;^`q7uVY!C z=>0Jql1{+Fj8BM9xRj(_rC z3VBu2lf!$0l)HeDuS<3uKO^wSwpHlB)TO8|C>uEb7J-~rPu32_dOzWP=nT16O>-{+ z_H>41D8KGqc?pE1{{^@c#C!LKsK5&OffN}}P+Ygl4wUc`-}XF9{)nbyQrxJdKee8! zbW0LBW2NPh;i$?w1F*<6Xi6zDL?>wBy3n7MZ3cWtQ}rZ8S%VB-ngc&dnN&?=?L$w? zZAAI-$hJCqoU{bFO|?IJrA7kZY{~>=0M>SmAUC5HFivEyU84!vYI5a?-U+eVlDjppkYSV6*1^RnFT9A7Y&bDE?Ogduj6g*zw2`%{x2gw0J4vdSLxCSv*ci=oWe8TX z8noNV{XO6k(F7uooIybT2Y}C4j^-)k?o+tlWMo6b4meBn8OqiQhRt9O2(s-lx}?gE zf;6K(U^m+eE+$0H2W+;LrVKnlSecnF)%gD{5MEjVKdg*QlHU76uyR3DWKVjk^l*>F zkFrFcTmv1_Ujgn2gr#%0}>}lDvWIn{;7<7KfLP|Li8n-#*q(r zIno6aSPzY8%d584=B?POM`GNF)6@ryn-6ebG-+rp4 zvLRDGEbl=jR7=f5VSd$AE0Fq@rg{mSw2ezuvwT}K^`kfCtmO#l|2eq%3^3g&>oq|3 zqZ{R{)8Pd_U5s+IjjCBB{2f<2+BKR1F_!#t)ZcWqE#L5sEL7h*!g{%!k2RS7wl&({wnqEg z)@Xm*8tq0{qumH=v>RbH-3Y(wM_8l%2y3*zZH@M~tDYQ}%+Yb5q45p3P>ObK?NuNc)9=jSgpMqktHIm0#tKyo#Ql=}{EME0VD6KkrhQcRahSX}18ZW?H0QNk#EuA2i^Pp}h>8 zY`YfAi&trCNUAy+yk0AY8aPRN5paf5-Kuipr;+_4<7cdzO)Wnan5Q#;k0B==lBTF_ zoRdW}n2sXYCekCHr-r`*?&shYStpTN1FEX|K>0DLX{i5iKuvQY(W%&Y`gMJntyCs( z9pv%X=YI0>_{+xCEIS`L_JEJ~7xH>Ji+tw;=LI!w910+Mp&cuXOAj{wEuoFww=*bdt;(Qt6HIUhxy z-m3Ywspga8MW3@U=H-*B^~g9%F_uD_+3ruOc0Y!)d#{4|fs-^j!EE)XRK5lm+KsKs zk9uEPJ}1+_rkZsDsG=_oo*#C$d{w4h2iQ*vl;uQ|zZcVn{9Gxkn!b&dG|T+lEOWdl zI0wq|vG1@KjD$LT>_4@O7f~@ocp)4oMe2I*EZ8is_c~bwKCRd>i+SGVRNHv#?winQrmDAQoVI?&Xw4nK zsue+tS`oCU6+w$$5wwN(fIseGbf@-xU5^Veah0yepZgIKkLWswvHN$p7z4mL)-U3? zZ`H7Gjh|2Ee!7l-6*9!rFSJ^4f2?7DobU=+mZ?cxpGdZ!a_un@B9WVF4V!An)f3xD z$yD2IJ(2r+EwsN+%%hM;O^QG9aq?ZEre-~{3WpS0AOy@Kurmbk`bwK`W=i-yDHoV( z?57%>^g;-cP(bP&llm2@H?jy5A(H%{N1%*>@R*4^%6^2&+E+D~K#dO0$oTg<-qQ{uF7YmJ>gz$AmvS4k@J|$~G1B z9A>jOo@RmTp<4P;s%BCOP@wlK>NZPp&H|jl!N`xY?Rjz@{-%8d+?I%Tq$=%}O72Jf zf?9}NzLLQw&)hubUjt-sZXRuQ_W+&G(iPLs!%Q~Oo2T!#`WHy&F@`vZFGGxjWrfb& zOFs!+B9<@C#&=p7|5Y%Im~&>|eJvKndY z&G@V1j9h9vE&u7|jGonPF%Cz0hh!Xu`reoZUDADII?RGPuL~mg_S?CNX(HEWtnF$8+ zYAd9Ubxb6xUD^t{TFt)+UWn4BN*o@CNmD_>C!vf5W=j0L1}F^E0KjyT(lAqTB`OWg zv`98eQTK#w=KHbKhhhmZ^Zhs~-;d3Ftc@RBW>J4+9X^&i&l}AwA4g^R*vz6TYNkcP z**KQe`{5T(B02hLrCXVw3>tzTkg5bxtt_h-k$4YKS12NLP7LR~;-+xU&5@iJg>(Av z59fT)%t`;hHJtV8Uxl;oiDX?9&bl6(Z?n+fMGF01IOh$)aL!L7Ik$#$-iVdj%&ECq z7pnVkD5qZr&LEXF^^odiO`i;B-J)t)NPSgcjIkLV6GKERqQnV3&5`Yoj-0OJCB~9BiBwO ze#gX*k@$%0UdG^D3wGuEe3IU!WBeZ{3y*lS5!a%^L`oRof|1OrDC2J!GV%x!rn8Z$ zTK5QB7yD7c{j(wV!LbZ2d1w61T=JSR4e&F)FAVqN$dY$@0?Z3!BU=HC=0y2M zF9rF`a8AP~sgHf2F&K^_%H~3C3{@;r&S{jXLd|eaqg+w2Q16CDYMn;#+xbw+Za0?56qpCYIgMqC z4QYmFELVUbT%W@bj1}@Q*%>y{8D?K=vNQS<`~NFUeii+R(*U-&8U1OjQ-B%$Xb_XUC5qI9%lVCggTU|KRf9zB6oVJZNciv~# zFvk%viP$UgEn|Q7SG*3d#STJCVP&-*hSyZVi^q7kZSQsX>;3~Mwtciz;r=VK*!DAR zxP!#M&9vQ}e;C&LN2YO{yMs&zIkChS+uo-e?j8iOwhv7i55U>AePYTOPu9QsO(E|Q z_?r^q9?A3B_NV|+bgGc1w{!-g-VYBqTrAiLWZ zBN1{foS!pmoFu<+=1_iu0t~00xBj+d1=*dv_P3=eAV#=uBBNI(LqdGAz2a{CO`zXl zuTp}PXJjA6w4pp8`xvI}%1g4>G99D5A$tSUZlTYFH)KEeBFIS$Lbg0e|5Mb1DBF?( zsFIA8>?D5HflIaxvZChkUfy=T&x=@9<-KxLeestaEpY0 z5E!}f6oKerAgbJ>3`*O$Kp>!8i1QsNKa~1ziT@h+KNtO9E&rcO{EqeT8nn&~|6Q;b zi3opuu$-XDdHI{1Z(`YR_n`%o-#Z1rO!y!d@dG;PUjX*}f$-ZpO+?!`J<{;^LYCR^ zAL|^++Q!L(OQo2JWh;yEeE!<}ECx7E$NHB}3;0^8!d{bY*?%I&fKam^Wm~V8h$%2w zFh9+BWZOMB`}7jiX9CoDIk_dDMZlwxzZPDQ>W5)AT)uk{#h4G>`N}&&_P(ClK9cp6A=h1?ru9)LrHM;7Qv%#($ z5u3>8*@B~fJTN&!@zvV{75F&gwcdp&hmSp8_W2Zc!l(B<5cxQN5%38IL;T>N?FVFyF?!>A1&T}@ zHC`BfC8Bdt-n=j1^%N*Tv#kyQHr}7d2 z{H7`J{?N6+g%^_P48>Ia70vinD6hE^@U6Q(qwcN?fwu^qZ!1_Y>I425pLO08O;jy(ga+HNBrXDd4? zX)`=G5%&a|L>k&Q%uo3s%C`97Z0H+xRVFZMx7g;Mi!5?W1ncAcE8Bhn5edH~X{#dH zxqiiepNPkF7RHYok8E>~q1>QG6X0hK9@#bqU7MI-Qpn#I0ut0ctJKLk7H|^TGcYgs zz?_Vw&pG~iAZh=^4voTMc`=b;HsKz}3YIEiB#y-++jy3cIMJlA*tL;jhbYb;Mi=}2 zZ!f@aDk9vuRKF!sLZvDp9dl_SjR+Jr<;#$mNJ9e562FL)IA7&V@kCYBhRop_e6vca zofJFHkI+L1!pHPJ7#o&wCP{UYB~(D7*_8E)^J2g#REQ1ev`CvSi7G0ByfzA{%I`oH zD8zU#;eMR;P1pS4;@1Hw+bXasB_3war)#Y6=1B1ws?T2~yoODlsa9DRR+ofEipo~- z0KiJU)zRw3Lu$As6qW62>dF1Pa&ki!@y&*EU(4cdiJ06PrRWC{MQ>4x)=?2wKJoW8g`x~!3)kbDil%yK7^@>4x>+g8fBiRcGh1l2 zWcrJUqHD}{ ze+Wxv6;*Z`jY@FHi`1$w`EzIoWq6jzS7P3vm=9c_{5_kcda&;SL~ZOC=ngtdyH360?7XV5Sq4u2MLZlWU;w5)0{ z;4nYxQYYjwpy4pJ*TUXjP{(A z({wJ{?3+##;vbZA^I!9tApgJYH0?zur(^?Jb}WZ3E_HU|k1-EVPWN=kXFc;i^8G_k z$69d}cucw0vpE{S>FHRX+bf^X#9jw2~)3Gf{1R{PTt@08L zugckdC_=V9L@8)umR4i&V zShiRjyD%xGJx%bn5EJSz+tx+6UW;(KD2g|gxX{M8Y|Fva zo8Tk1NHLAV^(|IIT&AEXOzJ|gu;=km9jvj6h$@T#jI9|4HO=6N#;- z%E^lL6cLfdgz$bqT|QGyf$g2W065v^y_i^CV*~Nuhe$TDpRvyI3JXN&{Q>WQZqEOC z5j2Z~h(#1JUiBTBP2Vwt6O>$~c=>NdOjo=(;1-!W`By3ajcAkvbv|{4f_Jl#278U4)SaMq5}e2~enBwRhhEr*f^LQ43sH<8ouypS^h3b1&FMA)Xhyn zk@9hfJX(QJrs5XvGcI>MW+=K1RvLa;^01)8rH7f!W!Zt`J2?N^&> zd%PwXgKmiKgvi8y?UB%)nGJVO*^MOe+vVci8UdMNeF%i;I zjkl0aGcLln$5?~!bi)n2*SH+~8GfSxs7zx9P}#y_o(5Py1Y}&!1;}D9W)?F-!D6mp z)_I^?Du$o|EN1w-m2a9_szxh}`V9_?8LVJ2e@(+?u45MSH#n>dkl#A6AGrNi1}<2O z&qCVn)3tec#|MWbE-+{da=Whnr|F%(*Bi)1x`bq?ce0E-o6y|aOAt#S0HTNOJzNCN$0Q0xlGag>!ouq!R0t2Lq^RtZalBamk_{9y9M~mQ~y|g zvAXJ~K;pQ7#Zl83rl^c!$TpFRa*8}NOs+8HQMO{o3!Huutf2QLdO1M?=<%>iXp{fn4siqWhR;1&XlW&8(3Jh+y)+L*$CEwZ9 z4y(+=;sXgYm%lWT?I63IU$+d56h z3;rR>I+K!mMfxH z&!Sb{t>LFL!ujqtDQVw_M7f3kILjR9EZg>=eBq&JxrJ4#@&Wt;!sQmqzMSCMib`-7 z!1Rr%MK%OnAk@Nf{YV|j(Gkf260VY7t~K}L>JAp!C82*0Ng8ZSSp zFVm!V2;j?CO6|B?B^lvXyTINbQ@jrCrG$BnHz^?6Vk%P$=vu{0Y(fbbK?sI*j=2=jW6Xq zu*Ha2PUgl}axtJdx8>u%;cxuW<8Tl@RdU=|g)Dzz(ujYX=)W>;j~|0>wS49$5F@P1 zVI-EWp965_TT>2c5yAheLM{d)BKV(x+r?l+1pgCAb}<+c!T$t2t}H*I5fS`PDAUCs zyFlZmAm7DcLq=0+j`IpfpE-mR)Q`LDJB3L6 z5xQ1B28n$0C3Fh@2B4%j0CI5>$-JGCpOS_Dz*0U?vdv$B*(7BfY(aiXi~K_#vK#`L z86RC6;&moyhx&1`L6Ua!f%l4|f1+IRh#6&tQ_xxmUcg!+q2_1gDv)zYj< zmfCZjq4NG8;@$&HilS>9?w-!mo7i2#0=q0Z2uKzY$tX$Og#|GoA}VH7P*h}=93{&D z0*iovWEGH{lOzE_!3Y9M78MW>-(;MuB+zM33V!+id|h@miQx7 zUq|3gfs4)7ZU`9hNGYQz63P^sofM=zK~iTQrEoXK{$eCePH$QGEU7&rR41i{_mJ8< zLUnT`QRkot)s>AUb(Gwe?VmrFT$tpEd4yB?Qt@fBmXoQ0X<9wdK^jGEoaa7xA9N5tia zI87!6xLQ*iHUdASI0dCR>$HG#jC_a_Qk;{U4!^zxe_y~E3-IS2Bj-Ud?-)7xkyGSE zBB#iSL{5+Y z$!Rb@Lpq_cAZ9=t>>&O@V)glrq%2YYDH!jAkNlhZF?sFCtdWdBE+i1bOJYKf<62USV=MloOo=1x;^(kZ>b3=rsyQWDGv zwtExX>TcsKhzG>9=ya7~CFzbfI7y3n?!Q`eD7Q)Hw&VZFcyDXFuOnIn6t+7Yetjzb zK7%vD_;YQyK8i}%ZV2x{P#|KwL?XsZBx1ZoBF0N3@(Kizi0u-I*e;QX?K0Ac?UDoA z4b1@bjF+kOjQ0{sIG`)c0ls?V8L;m7g#kNE*e_?&@jtMd@XZ-KGemtl)A_w%Bs_$_ zNg!cyAjuDH1(uI9^Pf?>`MR?HFSDK#DZ&$-Qj(22l)KFbE{+LLz6|N)B|y_@G8lll zcum^F`1>bVi8+Y#Ve&Nr~6UK_rB!sB1e9ySCH7 zwViu9U`4B-RkAk>+@?1SLGLl|IMwwJ#gT_$>mXA26EbF!CuSj}8pGTQW z6j$`WNv}+LW4$-xlke;ae-q=S?oUc`m7(xAbNYu+0^}|J)%UEH-({ENsx*vXQ|g%} zuSdB$9gf|D%#HFcP?8}bPktC-V+K=hqs$1=2iYp4EEhNeA!lhg1VXV*O+lqUrZgt& zXTc7Y0EUf3hO~DuSfc>HaFtF?lR2Kph+vHZ3`X6>7}b;bJdtM~r@?S^KPiMNL3cta zuxo&kPt3a{JD$mYEl>_*FP}SoO|5bwb008RNaQY2gnNaBG6Hi3f(e~<;Gxce)ERP>w(u$K0i{U;sI;@ND1H{Klu&$)ipA65&N7YI!n!^7 zJnO^3%MyPg2>dCTvR#2EKlM6pI2DS<0gdYoZ5>${@hVi{{jX(=sk*`sj5!r^7vgt{ zq&hx{AxUcyEMY3x%vV0SO`to1+jlWoJ(XV|b8mqWlYhIeV2<3KJ$OrHpF`+yT9%}g7RgP+k zD+3x68dt?-Cf0?ANx*E{i9CS)-}_vyWY42*Oi}q|w2C6m`jI%Nh&b+DqT23} zfNL3Wy*d~Kr`5a?3AkPa?7)B{z#fW#lAXcKJs|U=YR>(ylkt+MTjCE0%YF+1^1t}> z%M@eBH3@ja9LT>91t>k`PdOu>oC%PLzJ3JbpU5w=Ih{?xOSFi&9E-Mt=*%|?^e1s8 zzsBYe3VlXGX!}V}mWcdb*0C-V?QuJ+eH9`tEE2Juy;EE0OS}kSw%dCl>ZU`AOT@>_ z*f!$|!Nc|xmj(|zn7C5#NGR^O3h=O_imL+85_)REGm_(9TwVCsi^esAhsGDz3?7#@Q(O~HaG+KklE1(8lo$wKhd(kMSV zWnk)F06Jw*>UdNJomwLG4gfl>bm|r`>GYDR4*}4rrBWAS{KIX%@Rv*d2!Kv4o!S^& zI;~XdL;yNvu=FXCrb^dvro|nvzlF3|y&zNkb;LqsCC6*`{KJ2BC40zsC%bw98s)0| zW}Y*r$c9#JI?x>ISD6919>1XHuu0YM9-BFrY@PEKI=QUQ$%&Ytl#?c+id5dzqd|1@#cF+YQ_Z1Kk5v zarG6)zsO`Iz5z9l;|B(r7F=&lbCGBA1A|U)z!_(PXw@_6JyQWqK(y+aT)2i}?!Yt$ zU4r=z!t>|=;$-)Nq=@dti~*1D*-MEklaNG{m-jPlGB{4j{E2W@8dGwB3`|p!*c{|5 z#41L_3PX(}cFh$_4((^CRJl9^`8`9&vUn4(*#hWjMr@U)Obu3_rfim^^!)7c=+ra$ z*Mdi&iipyqSPS?-0Z#`xu4{Gw!S zQ9^T=`My9|$od#~SjhSuctR{?Nn`Hhc1u7=2P#kAOa6LKa63G2f+87pDc6F=swqd% zV2v&$wCX4b$3eh`r-u6~(T5B%y@k43%8YjD(niRtQa`s;@W3r*4s@_s2D`;lyc1fv z9x*p12mHXD_aL0R9p-J7x!X|gy2{ymQk=CEO9f*7wG?m6mMb1WUYth8L0=C|Vg@SG zUkN>dZjVOxD>6T=fg0aJdL2{?gXXBUpc8e$PU8HeH5ct&1aqc;aegSQ#PHF{@2B!X)QF3UtBx9Aax z+@eP$a*G}j=N7#XuF)eFxkisjpa9@7=MMUR}wEqdfcZ_&d; zJ8yp@STyiZA#|=Gn^&d<9%lX|n|I>{9;aWm8kFj|*Uf@Og6Kvk; z7I>BZWSiHp1>T^)kQ6BMBanA^A$LrEm_=YpkPM|EVvH4c^-KxUkNLOCvW&S&6YmhW zi9#F}9ia|!LMXm3RlE|X42y7H5u8|YkWESE2YO$*1LI#Bnzj5Bjxc}N&Yjt-*lX-#fU@{A;VDv%z zEEosRaCkxm6J3&2h{LGdp%id7BYAQh#955XvdqUR8PiU^xO86*H1v%=vMki5plvy*WwH zDoIi*-pw~>FtrE@?V8es({e;$_K{M%fq56Q$pr(W?t$#}1dZ7%*xO}FX`C6z6Igrv zHtKvpdGf26|G8?a@+bJDKkyLPbK74;jRL3D#AQiU(m zlhkSz?jR#%?j2+!LAxOT0*<()Ui-t@H5RwjYkvyFxussaC=lnCdhL=t13}zd>b1+_ zRE~Sp+3vzx3f<2Si^f1mo*ctTkX()56)h(SoKVHK26`2!WOK43x9tYp=_BG;>he=< z!Q(eZ6GWKD8DI}Tu6qydR4&Q%}>?|f^2){rI6G1xSQ%I;l zy_!-5_9L|hLzOP2M`~%4TT9*vmjf@MUB>>0iPXRC)rS1TZtg{t7;6K!8EZAp66JgN zwNocUY)tw>pjVk^trXt;!4d#JhrN?*qAK%eaPccY!{)L$5%%xMa2aG)wa94%&Sz+O zmgp0nVKX`a)D*q(GZef8G`I}$agQPQdc~I8VA+DF9x-A|)!>p^9?8h~g;gi6L6Nvd zHbVJJ1uA=yjbvnZ0S&H&G?y#6wIlVjSvQ|k;rfWexlpKY1zK8U@I8ur!EEq*txlY~ zDY6GB>JwVH=$8*cOGw%aqGLKNJ^gE-_drJf5uW=f9D6s)lTIlSs{+s|C1WcC&?%*2 zUqOU)O6k}HQ0VZ1larv(Ddl6|2B1^Q#I69KQ_4yEkTmqD>xxIrDhoT*Z2S#Gbzx|E zMUsyFpO}^3s>EZ`K=oIVm0JxA>+hP_hRidY^FJq58a_b&t&d67DmhL-b` ztaBM0T^y{?#lZ?)9IVitgB3=M_CiUNwTbr`asKh8MAjRCErW*l@9D!9d0d&5G;_L<>KtEW}690%LlSQ&^!SKb`6f#T5fccWfD|FRW1g!ibWh0{@aqszBaR z(w0i93nl!rs-uJ(6^@STBFxo@j+z25jCY;myGC@Run3Ne1wTH!8Zt{DT6yv=Dw)G9 zAD8KGf%IgqO%^?^`#i0Jsf>uPXt?w5rli}WRc z=+yLYk(4`}6^JNSSduIfb`E$_8Hn@E6W+87?E&abr~?{n$H5sL=0;LXKBl>*$a7W* zBH19yllNfyuf<@PW*UqSfUB@ zU6DvYrDryz6Ghh_qtdL`iEQ!%x+6p`k6~I9JC>EYPE>Me1(Fe4+!199_!fAanCWj2 zLH{QH0ZVLS;2H2sR|me3_$GnZCVqelH;Zg{CSHm9wg@~Mc!9fFEL%k}1x9x%(3s-e z0_=lAxDq2C?@gGPTH?(<*E12RbSp6_0W?e^r3F!1diaaDsy7*`#5wxdiAyHcY& zupCEsk>Vc%M;KQ@jv?{|ehRpdD2sv^N$~y)_d?uLu!T6F;A$1N9DWP9tC0H+qd}|~ zo8v`W9E&VDH6Jg|Zyf~gSVp`|%P3d_MIh`mpO9}1JZTKnv0=OpWnR{%=12P{akxXo zJ12PKq-s$qX*r~6_DdaxreI~2&Kz||;5OpnQCrN7rG%}nAXI8fZS}T7QXvkGa!rvf ze!IAV$kyxF;ExT7eAN``?1ywZ`NF-75ZS_f2wS;JJU%mO0vD!ITi~UECtY##)g0Qq zdP_T&JrnGg>VJh(Plb`gak%+Pk07g z%`J_X_38N3l$TswJ0}!loZ^a@= zuQJYwRxE-Rz^@lInu-J0#t9_fxL;leqGa%3t|=`+@@V0-})fanD?C#P3JLaAD?;LOQW9&{^oB zq2$%~40cjiHs9e~C7@|-d2WHGL6eFx?q_!p0pCDt?o|a!!J5}KpI!`bTOri@hCK1tQ1J&T8u7OHth_Q z(wSwYY~)In5=(RacC`OsVyvxr&ROwz)AEVXcWZH#Ja@BdWHQ1c}8 zk2NI%U6z|C$?zD(f!}GPl_$xzUB|vhBh`wOU$@;iP!Uh9;PN4WCec zSB34VDB!9PqL@DjeMInnPE;0Ur8g)PZj{1gr=-eNlSt`cKP-|_Sd*$I1q#CQQsMD9 zusza?A}y&y`pS4|r>ZE!w4r@byM;zK!d$4B$H0afycqhbB7)+T<@zZhCne1LAUP#h z0!onYv2$@sMl%qA`cgJx<;~uuYcPeNl&LJ$PpO;oa-0(!H^$^5U=GK(i%Q2O+2LW9 zn&6nkLDw48QYg}Tw!-n$H4MKQ7`e>=r7Q?fMM;Kjey%Fm`|D^5!OYUW5M3*(%yb z^CYwYVI48$P!6<$SikKHV-HcrG5-Ixu{%v6V#i5-J5J8s6g;CxnKl>Z>6vm!^2{HV z#A5UsfQuILS-NQHxIV_Q^uj(%htU*?woESur{1KZUNcOMR4vl%8149w)1cC#X=fse z`C>(}rQaIRZHUEPlRy!&%1ijv04?dYEw?}O`s8U&Uo&OgbOKy9zJ$t&PFJ)IqbK>_};-WR;^p){$ z>7Z(J^`z`tSwi`|ib{;OEcBw0jHA}_luxp+yislWBTXX->E z;WLtm^}u%g>C4sKmiDC%@q5Np4MX8ArB&8f9B47+a`(IcUBBe-kp4Hl?f;npxh2n$ z68&jjdrFAr9mW&odiLZSj-Ao_Kblg+c7*AK^830MME)O4$zL~l>=T`p-*yW7jD@D; zuMgIK(P*5Zhfzb(4$D`Wu34rJEtN_s<6DQCdJ zDD8}iy3@P-cShl9`}et-Z!*TYnQy9=dv2E7Ok%x$CeAUtkTaacyBgThplTA_QQk#; zhTwE7_~@rs3Fu9LxUpki=9LGAr|4uLPaS&W6VyM+Li7eGw@h>OB&WZx*$&K#%v&81j~M?s`CTyKM%etc-5uwLRiME5nUUgzF;HCsIMv7XrFt4*k}6Z=(F)nZ^H4 zeRHIM*+oZs>|B}mEt`CFR!BZyZK84c+A7;xlD~+Py$TDV+VguHbj|+S&ZE8{#M~tf z4rn{8v0Q_FB=Jm)f2c8nU9M#9sg+2XvrSd{C`+0t{@_WwWi z>ooFPR|W36&s!BlR=l~&$~XAZp7YjYq)u`d9ZSx)PGBAT7RM|qRBXs;R;XF8#t}im zh(>=CrM^PZI%a1OX_AHiwJk;~*4L`t9tkVvR^D*I|N{TjBPOg%p(-+r)8^oo_Wnx|CR8@rt;%q2S3dt&am=vj_CK`P+2 zNwi_FJ+lXAvyHUXlt^-Nm*RifhI92yXu)2I`5Ul1rw~2!9ZpHyt_2Ho@$XQD8{Smz z$-LDbaXv9(<;afiFA=}(Vi(8DDK;&=5)d=J67Tm>i@5Fgzu4gPnZbXYMCWbFvC#s- zs@xj}v78cB7=lscX~16J&KmUf?Jk<=TegUGJ34fyMJGoMB)?yX9f-e3VaMJcA3oDL z^(g*AR}}OAb!m8A*MBOHkZ3cvm_EK=5ZzW~FO7X)C(nt|JVz(Gc?*;UBWxYxTf_ox zTPor4N0kDR(kSQl1frOAwAohZ<=RVnfqu4tXj$CTbO|WM84M z)x<@!74KP0LNpioe7Rr=h|Gn==pMB`uV3)y`j`Z{>k`JmZo-EO3vn8hFQFXweI1og zBRUX&i(`gcdYg(|gGJgVqT;;H?fe*X5vQB=wr*UrPR(VaqSc3c-&D$n#~f7(do_|8 z^6#ta-ul$Yo0LdO%xF1U(Mcc+Jm?i0OU?F`XN<={rFbjrIB%UE!W28&^ZKgU-)50V zK9}%i8Lufiliyr6>MKqrBHF3nI!xwwOGkIM?Qd5+;SKR>=|I_(@Y#4ZB~Rg+xeJ$D zlmTpo?}=9nrQO=K;+a*X`of?6qm;>22az7rKTLY9f%77CFM0RM{lla;yoyHU4X-3f+2np|Z4gX)E#m;^Y*sL@x7x_CEy0*^h{I!yIs2%3tJ> zZXr*n;5FdbT*b=G{v!WV=j0zmyoTZ0y9FLs9-=J-y*ji-9bzVwt2snE8`_+&Rfyq2 z6bGgf?kp=lT8jTRYIqsSy~cM7!&SrmApaQQ7CO1;L30faOkGHHyZ({k){ZRKOw(7X z7$rQ*{cpwx*t6I)irO>gG~xc1S}^j!vI^(&|HU(y$h6KG#Qj~Bf3=4gW4tnp%`cV3 zlb`?L2}`uJFdp~~GFMIdCom{|X9DE(RNS5O^#Ub0JOSx)`S9L+YO3v(m`*sBBo%rYe`U3`}50OQuJiJ@$=bPb2@~LHlC*51o z6Rhyid}>-v@7nTg_o8vCN#~#Y>kb%@Ml|yDiFyjxSe3r@UCN4z^k z#N8kW=w0gJ-Q(e1-{D=_0TJ-ib&3LyPc()gL z7YTUx2YB!JdoS^O@8}DK_;VuO*~!!Az2n{$?riCUnDKIxI4UPw+Q7YbRHD`(N;#DA_g80HbG!tV{VcfNv zDN(W$o=FQom+BW1fo^(Bv#J-5h`@-T;W?J@b{*uBCnp-j9tF^4M z;gkmOr8cxo(&ECW>s!frX)UuXD?H^csEP_-c-X2FUeg9~EPlcZE98Vo^DGEAYiK2f z?|#%O9-h`5A{h;>*l^3%P}Ql8rG|?=Xa&RPUw6W~TB77$1 z;~oe4Tx%3bi>6kvK($DXdL|o?-c-X4AFxuxN19qC@O>>;kokwPlz6!obLBuB(0 zDnb;$$V!V0FW;iLMrK%5oD^p_L>`9S2^!q0zO!Re!{0{)5&l7b=hl|vNM2dO=9}I_YrEna{Me_xv$T&wVG6H)v zpV)ec?1Mx3F@c%dDbG{iOXMG3SJb;0&po6ufz}a1P^l zswCQvGXY=2F~HYl;rS6xmf8~hEW8;63>uKS$2cm&RUh~ldloIp>mJ;0gzfA>U7D)K zT)BC{OQXQ7)z9BxO(6ohDC z6`h(U;7TR8v6Irm5g_0aCbvL)P@aclxe&ey=c`q+JGpExU1NYx7qn279C~KLAq>GR zL9dcS$n}v=717Tf62VsC%_86eDtD?#`Bn&I5F}&80= zi10idqzQ0lT965;2xNkEmrO`~zBKPaC|^3h2kMV4yzWu-jAEQZ#Z(QiyAQ*Hs2J*L z;pif01?L2$udBl#cs|0QZ=k~<7#v~HH`8Gd%!)AR+vqR|Hb)qnbxaMmIvfHnIQ_}S z(i9YO*lBqZzHHY33-4?rkiVNI#mR`D+6L5)j%>Zi3@0R!U>a^JJd!@gww%EBss;>K#&~^W^s(c_Y;v}0)B-$cj-`I zun@>3@C2g${~r**C4Rz~2pw&a&gl=9zsJ80eiNarZF_)69Iw}w{sA``q=59Qvw#A_ zqoH@oE9R>s+$U(3b3#UXZ;ytz^CCebwCFg*U^See30@2y%@=8u6dA$lAyk$VGMSJ$ zlBGyDPPWLaFMiS-v4|F;ufZYHkrCxKW#ftYGCdHXhQlG11f$?I4DOjFW4wG&Vw8cU zj4xRZE!?M@m0z^ZaIt1qq40% zbLtoU^B9f7yBmTbLOkCTVb|Rc;YrkTCIevwDrRinBrqo2u_>m0xk9+}G;|#9NP>A) z#W1F0qQ7@1%!g}X)+{Eyd8Wxn9>g>`I=f!e0Pza-9?dskgpt7}k!;;EnZ4cIQj|+{ z`n#@?6{E;f`|!S6R#DFTlUStD5wKu5y``0wmzHNXEs8nUMA{C&l;xW_7xc})zixrb z5))Z5o%Gb(tVJVaEml|T~!99iV(;k zaAdK8=={W%s>7WOuv~bv2yjQXtBJlK9AYCVio1XF#6c}NB4{Q71EAug;W8O6#-S2$ zgO;g`Ry;L~hts7tW7W1}Rr(p;D-chY;D;dKq$DcfWoS48PJ?5G6Rw6s!uc&oCs`Su zD!)lE)Jizc-+eFI~)XU7;$2pbeZ; zPxN(i7zEi7hCgI8A&^M``H)+94EmzOA@G7mOO=sU69R1rD9=dS)&!33G0(9`aL2$28Y}e{3EtI@)*W#5v>^Y#6ZTal~5}@ z49J4Zy?^IX^X}jABO#q{k@l#0rTIi-_$|^NRY-??dx`v5#56d6+w*9u)Tl*dUN7-U z#u+$dnt%^9a@Q&!ZKT6NfS?RqZUH{y=njXQ;xY)|zD0shKi-3b00AF@3xfKN~y*+_3eQY9ggLC{Hfvk3T@CAVTyUK0Wt1Ve>4(rZV# zndD{*ZhL~h!kbCpglRuC1V10&DAKE;hyh16w2A6}h(RdIv_$)YmqDQrdpW{4;Ls!X z1aRVrtVbAjlHg_#@L>`5VElVxB&~BK2o4Ev76G3qLJJy-Yfz>b;>PE z$}>VBgMg2tJOQ`-NqWzbAmD>4Pr~UaNSW;j5X}7#0-1h+Xm`tpTYowl2rfGs@TG(t zdhv!NvqFG(m)ywdE9fu?@D_~ApfA;75Tr*K^p$iN1Z5%&`pP>Df{Gp^ltb^G4u_zc z$H}3uro$kp9bwRSkHa9S7h%xX&|wfXi7@E9-(e86h%j1&;C;a15M)F+^tE*u1nnaX z`W|)|1dl}+^gZD)2s%d?^mTC<1bm7Zsa&W2qji(%s~gNfqE(aWubRx9Xw_u;t0pri zS~Z#es>#fWR!yd_YC?!4S~r>gy293m1oM_c#`l}{0Ct5X`{;J6g zxH^8(`Oag`h|DDvn{OBn7590$oJzFk?~ zzI*aEbjExg4k`%vyf}A4Oi+Sw5Fkhs-Yjp6O5DKf3on74J3O!GB{gq?cqwn;+t7J! zZpLlse1iQ99MVA$8Z7+n3HVSuccc{VA_OuCJb`G%bOW_J97~Zf8xEsSUjRpOWb|R! zX@Z+UutRv;?+5|zamWM}@OT@G69PU#&z%~om?2~{2^a8@Kx3=T1ENg(m$wD}*0Du!NQUeTIQE)Q|_~1X!_+QSIpe~BEfYC|3$`SKEc0IZ9Gopl}HAIB?EiKEjK zJQNXZPeF&v!yDqqyCV0Hj4B{>5)_%H@_EJ;Gv&7AYyO3#AzZp~1rc5W!G~Ot8?Q5`5}V2{t=af~^jfV7o&l z*x^tK9PdM3!WnHh!ObKXA-q{5n18Bs(nz19EsKChUj8ldZJ78ma9B|gcuLyjM3uDj zD~WaxOiC9KvTYZ}@1!(RZC$~7-eD6s+ztdxkIBNkyY$`BwU`$>Y>n|b@{vX#<%-le z+=vYvVEi``3f4!^8E1HMTQ%c!1Ty^s(fa%r0w>{U--H+8(1TwF=mc%>dR0&qD6fq~ ziFu?7`4N9*&}gHCtpz_T1HciDWF!ERD!3U04mVQ0$siRF+=%X8Kt~Hw2ElgW%_7+0 zPzm<)^b$&LKL8If<<5LmMP^h*d#czaf@KmgD01o75G@^Q7$^kV5IC~!e6k_mQf?L` z77F3E1S{bTskfia z8O}eF@HV`mf>u4plj9-lldj_dYdRjVrsDx?x|4819w)2$&1JKhI{sa&j@}FhA8;_b z!Mj$8GCV7B#61l02cV}PCy*sNoS?zc79krh+{;R6&0`2WX+Xy#26Q|nO~=RnbbO>w z$4AeeB2O`CeCSGtGtL*@u{!JH@Hhacn@9DsD#Uqm(?HuSXq_wbG&3J~(D6}7UY(@z z$pGC+lX^&%!%h2a*A*3ecupq0I7!P63R#_7mdk~|PB^ibRj2@W zHMtK+Ct)v)F5M1i_qO_m(%~-wmp5TNeaw@`blj1n;|XIgLi*>sZW$m?8?T4+`1J2` z-4Q@K?!(b>_l*wQZXuJWi+Qq`j=OGj+->9j8n@8sxKl>QO)xrcK+$o_h>jaWblmiz zR>P?)Y)$j9gf{}R`6$>{~4|9c-!Ki6|~T*%RJB}B(H2pv}^ zUU>SOxvm=^9nbmFg?P}Hjt70|X2E#@=fKYehi4n~b9F$+RRP_0*X;$QWtnUKHA<9bt{Tu@5I6Ba=Bc@}oOUHA(bUd%? zC4_$Vp>*u>=y*Oias-12&*{?57YrvTz9KRXKI2`5_s7agdW^9YM+uecvBo|?RjFYa z=Y*$roDq-5`>IkW-grlN?n%&6FEo}xs+&(sJ^K!Q_a+*L1+!j~mfHLTzJ#GF^^>*K zxA282~yh1zJ4-PtjCEj;A7QF5w>^Fhn%5X(8jh@WmO% znFKPL=fl4iyBu0n0}C!mnIRX`DoB0cyEolH6*3t!<>Fd})wLj#xtn8Z>5>&aQafFohaw)CMKztudsZ?4kd&d}zZ%XAts#2|tR>VMI zDXC?(SnX3}C%&99U?x>3l-B|mafhy=R?zA;YLA>>Vm{*k9Q-RK@6gJ3o&!&% zipE+&Za0fzOI0*Fe+-XS_REtcC15zJ%)7vZ@kSQB~sa z)RK?g2|}SNn%?C;1u9ai8m};nu>t=|j$F|=BG8iaNNmi1<=$$>j``r$gNnx0wLs6# z_+FP@!}u0N)ws-mrAbXKHUndvl2S`6`%XTpE_{~}YKDtk^X5U9-ETFF|U zF^_}EFeZrqL-<$rDRor+pfa-)3R!EM`Uq0_;628og%sN&{xcTSKMnuNshGOPmn(p( z%4Ydqqxfpj`UdJ5kFF84?Q(tNm9?OSHYg2@$JR64DE=$EO6Y72uc;J=a`xX-wED;UG&`;DRS;9J&91F89#ld0Q8*b<5{ zZ#!j6s>XY}=qVL2LT~J*uXND3wuhcF&5TlC(oH{*q#6f&~0PqJ=Mq{#}Nf$8#)ue+jle_5*{~uaLO2d9s+Peki%Pb|O+aIJ{ zsz{lCN|1hc3sN#xQrkmANSU>e{tsTG{2`pL$4%7ZdXiE2Ns^k~MgQ#n{O^cw#A(tC zPg32RA5qb)%JffF`2ROPmVxg+ibUMClaiO$@qgiGr2qOlW%Tj%k6B88U0hDANgID6 zrK`wT3tR$?FCo@>juAgnng73Ur;0skWTZ9Z|NOoT{7o0q-)cjd#ra9!+l`8flq98E zG5&AZ&j0Vblm1W%hB|?!s!0<%GVGgE>Hn@8{dZpFe|_BFj0<-{IYbVYWq{LhB>mo+ z|E0T<^4^p5S9yRk!5ER7rBzUqG0bt&w=mJzDP<^A^w+{!~a?b zDS7k=|9`!Y|4I0A1L_s;SZLB#VF827(%*9w<^K?+(nHwRMtlxTlLk-15jag6xsnl_ z&E$W_$EaxgX8sRq$Y3#-`F~Lq+OZ$0Zu%@zQgO>PN@zSK*IgsMOhqa!jI-Ie5FNdm zCOt0nbg4m^M?NCG`8bApVIciKy@2;y5bO;i*+HRt5k=#FJ^ zF3qNVU%|CX(LbaSxzF6o|EpIR>izPRoVJ<&H+GSJ_#*!khEv-hT*|FUC9=Q`Nxx(f z8MTI@Z5|-|C()b^ZYO2H1qM5}pEC1B{Y@2hTq%a!IwDGA1QXE#SF=O@IwgPVO|I3M z|8HRlf#&)!{gW2*f4%4%TH#9`u>be5y3nM#cvT36jPE!gU5TU=)%bsU0RK;j7QB5k zxkoX&pb3?sf87yAR{A{u3v6ffr5+~Ttiu1r7!5Tkj6ohH6vt3^^`O6~u$z0P(;p6% zBjeB_M)T1Ql6E#=;Oei@zj!A72XPI$CVh?1&7wv{*{nWG)w@L#+MGsz^#jziay|W- z-RYn33;pX?Fx2FIq;wcd$^>Ds%SFF3XaUAwO?vbXGTLKc(WLv&@qg)?4E8QY2w3k4 zQdV7HBAN-yFEE73YI}(EmiRn68fSU>PhMfDXED=3@41Zsn|~&^Zad0%=|{@S_vpWd zWAx|=D&hG8>UAQKEf^(XICsE+ugm9*;2+VZuk0W{{BM`ZY}{x~dc`UHuktbf zlj`F?Bz-iO?7)1IGTSqp^RIC|J$(xu%XwqYKDPR8tBj|&#Eg`Ik z7$njsDd?k0}U;uBe|h-e-db8NGkm%17AHxN9r?Na@#wijI{f z{o8evd>NA#w3;HMJczgI&>Ny77xReJb2T7c@;Ys;bh}M>zMz#Y2J3W~hr5AXYH%-z zl=x zG;&&VTs!8GN~OJz5~i*BiR>rTEu4Br7Qct=RSJ| z+=KG)Qb_GNxkL;&R|4-$12$bLFcarnwB<@iTF^yhYEv(_hwnk4DhXX7RV{&yvBv0h zH|o?+zJqYt%QGNR`Hy|@*O=5Aa`&v627kj!^+9j;%u!Gt%$Wg7*5vy@dHBf^(DGCd zj(cxBIvw2JbMf&|E!0QeF%xir9G?y0LGrQ`NDq^D9fQbw@|*03M#|ZHAu?KSUJJyr za_f5l-j}|^=k72wSa$lFuaojmLgfDLjd&iFRTFP4VL7CEUXurK7d@k*1nQy$1t+AV)K65+m-zZ(tk zl^p8B@CW57-y&__$WL;rdRV@@4w&D`-|q+bL2f<_#GhncgPNoACXNip*R7E*UZG?Kx=v=Tb1+&3crg8TK|mV5teh;HGE7&Yns*ta<6}TH~atY zT~M`Jj|o2_&>KBo#{Zjtedbz1&G)f<(i*<>2B?iL*F@09r+4GO$uD@_R47zCeh8l4 z?MGz5sKLCp$sp)E}6K$+j^&32-GOBXW<3qb0fE9(0Y(LWdjyi>0`qP{ zWKtl^`ODlupb#Wi2Hu_Lw$S*M_y(d@{0gn;&TuREn+^z_h0GHgKE$Q0irzbT>1>PO~AEaJ?Xu6kfsUPw{VmK-z2X!?aJoJ8?Dqb%uWg z|2;KF;w#T}pL@Bxq~EK&j@qgB7yG38e{p8t;1d5EhAzJWb&ZRJAhD_H}oQ=MIirqyoyE~HDPd*a@d$|1aF(hfMe4ZvWRqjCZ zoG$Mu46s0cX(zyPdHrmNY>*3PAbFc)rZ}W;mPMMk$Rg2OWs&M_vPkxJnJLzH%S^tg z?O@yzXv&|K5AmmLY=(%7TxEF{PkJ2w(ns+r7Om_AmTjehlOR)d6}l{~`al-*-P>uL z_jYI6>+3A?CMQB1Y?@z2vk~eGTC9WAfvkd(Ggt%VN1y_`>b%&$|k+N$$lquv0$5;c%CH{s|Cw%OmO`)^Fsp90d=_y()lrST;G+`&FLFZuO)* z=_ZJ$FeFg9J9t9_@m$gj3)ErtP7Jib`8rzc^*f;Z zgTNFTz{i2aWDw^DDvSg+FL1dquoZ!A%-YJpuX_>Gsz9O50AB>kaO~X?C^8(9I|Fx2 zg2>@ONsf-+1|GQ&#GeEGTY`8xki`M@Lg3VQ2={xSTLthg1xhUl0lga7_W;m;0>5nq zHbgn~F2Go&2YccPO8>dgmZNkn4lqr5oE`W)<pk@{8s+(S6~AInV~a)0|O7SHU|ej@yaA<63-oJ-a32OraUQ!oFl-EXD*{q7uvLM={Qy=6-oF=MZ6N;|fOUbV zenToY1a?jbwlPq%D!}Hz+(XR&mcW(rK(__@G)CIC2efIxz6~7v07}0LjH(W7tkMQ$ zp^Z~^bHO@Z**6=KVWn1kD4nQ0^(lChlFPZ#Ppd`nmyH0<-m9lmnq{v01-b1getx`&J>APC#)(2YFDR;jO-g;$A z3c_tv=AmB?X`7Tmm%-ek>}JolRWZ38vt3E=2k?b5t|*8*l}8^!z+KAqlOTSnOy}f& zuQHHb%YLOVF2~TmQkvisO)#|kD+2pknfeH@!^);=2>z{7fg|_#%AgJ){-6|Mw|PW) zeIIzCqsoXfK(8uQK1CGQlovjQ%ylL4Suk%XrCBmJm2RAVWvg%20O+f3rd{+?cXE4W zpt@}zh=bJeuR?ODTJkf58>T)z9J~?gPy>=9)ze(wjaK&tK^&tV=mg1e>TjF|zaLU( zu)ID|dvJ?lg?h9!m|NB9m{n@q)Vf@oEVJfx@cY5&Q}2G)@U8s^>O9Y_fVtX8li5=Y0a|RP|s* zfDhGv1Cf&H>YS30nV~+xGMlL`N`;z_)OB})H%m3^A$haa$7Vugj`}S-`j6Gaj{}>l z=KKOMPc3!<#QEyw2OzmXy_dDQNS!ww#81?sZ2>-2d!X%ww9nM7n}9A+@q`K1q;6~s zuuL6pBi_%|XSw=Yu5Qi}rPG7`)JnBq74TN6gSZv7TAh^+uukpM17N+{m-C4Y>eH2h zZB&P1?^)ZV7TE(Wo7F{Zm|N8*pCX2BYRS973vE}Ia`Wj6wLmw39cp3#qC3^S>`5@u zTMwBp)hZnB_Nv{Q!U#X{y0sNpIWOw(YdWe0_PwMh=5ILg$IT*yF z>Sz|i&+41^Ax+2BUpYD+R~K@Uaw4R@!5yDp)G9QpU)3dJz&xq`$Pwg}`ov9u(`rwe z*ctV36Y$Qe30zs9Qy(k|a9;i7C4k@5Qyk|nsGVuHzpIUB0{cU~$-Mlj?&dgjQSFco z?2@|v2`Ia)8XQpnQbRKy2J?!#xB}3ts&p6uuc*|`Pz`LRL;Kbq| zb%qM!O?4ipmD$>xEdcsx6JG+cul5OZ-%tDH93=Z|D`x;3pp~P&4%8;mSO#Hj0?EPJ znNAQHg7s$#WQJ;c1_K?YmHiypM_Q$CAUa1YHW{h-SgZURcyqNmoKw%!zTJ-S^R}AjXuY|2wo|)CL)@jU*~k5l-P*Go z!Q2DmMZhn$%t{EcSF6M+!9HzbJzxj4VLw9Tpw{hWh#b<+vpF2rwz6%0tG&o&o(eA2&a7VQ`u5f?WaD_D5-!W~4j)2Ft%Iv>S zV5bu@zi1O)ftpiV+g{+E)+!VLc1A0{9lW#JiE)rTr(LK6;(6`F5)gmWp63+rf>yr) zu-~;12i-rl_qp!Bs2$D#c1f$+9pJKd;8zg;(zY#tWaz54?Ii@froEC3=HJ@tBrtDi z*C!*v|7ZiVK)k7yX8~vHRt9)|^i`<Yw70*C9JDe|7awiv*Okp9XkL_bo0zAluG(mON*Hd05V zKIjYR9;ZKF4A}endF}#@*I(sW6xLsT8oUYmgdoCA(yvj=2l|11h-tE3D;2~kx?U9l zrs|RgUXFhABk(@dGrNH}T@S513^+p{#%4TI@5@=jM|!@E0JHR0*)h)6PaOa@NB@yy z_dGrDIEeH0i`H8d2O{_)eNzI!Vto%MSD)ywl>qjs{!1TVpXn#70b8aw z9*1zB>xF6R%k_Ig?5I}gFZ~7TO8qZ3k~R9@+yh*z_vT!2gMM`-z(&2I1vQ)WZ7mRR zv;F`V=3DeLn73#sSNpIl{YrnT7eo)}pWO#=P@fV5@UV4_)2!b^`f^OKw8Q#Om4JP#_ZtcD zon9*eYQEPWdwBU$7@*iMF^^J>=rk{0*27FBanVtM`{rfTiC-gfu z@k{8x=qV=={#V^#k9tx+@dv;uJ^y*goYu96ft}HRT8r>!^>fWZJf{!hM(zc@6MLWE z^-<>m{?G%g`#<%^xIK7TZ_mBIzw|2HNVuYxcptp0`u?{7uIc+81o&HD*^~31>-r~* z{)S$NlZAiuFE1g)P5lT*;cR2X`@s4b&p(9_eGRh)uzto13Ig;u)~*H^V4T?m;y`2Y zDqw?*02{|(qe44?Ax6K;07H!j`a@)xG44xX!;M2V0p2sxnt&J@VGMl`0Y@5jM+1y9 zo+yXRj5f|305-;$`aQ6*Mho_jfrWnC5flW0oaP5#|tY)K}7BY?u2mH`z8waJ+jf`!GX@+q> zvpv(;-wE12GLG&9Hp|FCd1;YqH*UofJ?@<(g2r@4x<46 zGK#c^Ci~HMnVH&XO#=X}8ZWx<5CHTi^`3j=AX{mh7cJG)MOVm~O^#ei52sF5_0x zO!HwrMEl4LvG8Y^6JJG2XPd{nfjGx3a~8yp%^{o_%r%E{Ml#RDPyt&v%MOOf0<+gY zz!sVfMgd!7_NooA*t|Lj;1kmvfB>JG8@O%#nJKYLT4KIY52^n=WL`1ATyAb%PE zb|a>h<`Wx0TxC{{1z2sazJ`En%oTe9)|%gZ2;w@k8S}f|eDXTL26F>D>y75b8vvWk zg)czaW;3`L*cNjVS5{lie668+n^~O2wcTv|0(f7Tp~_zX-C@SHhwh!GQ32X^nO}AV zw%feSH0?1T9|n;x%`V)V*=v5y2DHz7W)iUdrc?)NzB2E99K-{r&AHw|^Ktf5Uz>|L z?f%C6gVVV~W)Ds(51TP}0eov-tOt?r%zr|(=kLwEZGrw^wqm3H1;_9}{MCGqPZmy^ z2N#2Q%AC*X%4u_!7!S;EHv>Cs&Y|g@GqX7rId8s}1nf7nOAx#ZW~F$5-_5@`aQ$IE zUjib3nxhK?yJ*I8esRfs?8^|~WwXO_1pLb!(j78a%z~vsylS>+0dUQ%_8xeDn+KX9 z;C1sn%jt&sE@y@Rm}i#*+%#8>N4RWjE+rhb;Ct4}A z<4IPDb!>khSX((%PPY1U&u5C&lcqP-`n3p%Io9C|0Mo3;w<6vTt$ysgr(37TLvn^y zmx-BaRc3L2WNn%WFv|+lyk=WJ??AXY)>&*MYad%nXw`GAd|v^~vzl<&o^QQX1|YP+ zdbAn>F0{&)hweqz(g#3YZ0+R)|5IzWXfoD@cc5m8)u}bWQY)4#sAbj=w!hD<%3OIZ zw+25CY=w1XC$y}z3N?VpDy!QjfYsLXiy*SbQaMDfwYpA$$U1A+07Sb!WSv@$fE%pe zPXTPSe&>$zCac&Dh;FvFaYJv5mCo(Vt=8{9A>cNv8mCv=tsBhK7gk4(V>_%%H4tE@ zb)zY;T~>No@OE2&a@^fxrFI4JOKUlw+w8R-;v8?E^)6f5ek)Yhgto7&nS&wvoi%Pg z!1vbCwUGJ2x{t&65$myj5IttS{wT2HRyod>Pgp%@P`_9WTSE7*R#PqvPFi1_0q>MG zvoUz5t>OzoJY(JX9N1aw>t~?zob~qoz%E$rv9qWBZuQ3dRcIYnJ#JxV2SYTyKEXhB z$n*`y;`yxBFSwc=djH_KaS$00tk@Y~V6b`s#6iK~Y`24ht4cv~XfWT)2tF)0eigv* z;DE7+@V(%-A0WVp;QH#292rcy8@$oMCUb#}30_*l4t;EJ=~$rSf-myX!u!Fp`w?(_ zu--NBCIzcBfbI{1hiLMXgVQ+!%L(S=xH~O)GO#Fho8I7U!5cD_AlU z*vG-gX-{*5q2nOV3(j~AU}10)iHm~k)^Yu}IQU9mP(KTfr(G@yP96kpOM~BYOkNhe zqat{p2S;$Ow>)^0)1wW+i|oWU24AfK;-=uvUP$kj;K6GMur(Ne0>o{>I1XytgGc@X z_#)Wyb$}hgpST0DGnn`dz^-6?Rj&Vb2OH36_5}AY1@+5dsTTnD2D>rdeZg({0QLvx za&-ABxW6HI2ZB~PM0hax)<6)y4!&O;;G5v|#{j-X6++~@V8&h0`F*elpNanvtp6?o z{21I(3*e{VyPOjI9DI#y@6fT}U+WO?c(6Vngft+ujP!UkNpJ`)7NesM(}?2@YCS+x05;i4zQp45#a{f`da{l?4KS6 z7-_%v9s-QALmfHmA8l8i3^ily`?#(dYoF#riE%dWj)Ohg=Y!ylw-;N$!uCi`H7D2w z_5hn`KldZRB>Q1j#RvA~>(D*fE_pAoDfXED08?!v8!_bAfAQJEG<(u`ho=HvJ2 zcKy&!z!~>{qsf`nlb17;?DWo>&{$3j0k~-b#CRBP3>(y=o_vuC}l6S-~1RWe|94?a%*0 zfOYnRY=7(R#V>=n!ERUp*hc%WSD|{7-8CK}o9)`40^4G*E&yz+jm;yPwujj<(xLvIi0-Ug4t%l&g*p+A( zzuFVGLFA-8hO@I%c3nPdKW)$F&f^)oSTYiG)^4`|ywEv2{xwj~+bh_(ezUu_1Gr#! zEi}{r6 z?EW$3+X4)T>B$jfV9fKJPz{PvIWrg>V{yNJSj_z&0}PKj!WG|pG0$rUgaiOx6y#+x)hKMLApe&KSU5E^2gCeq2e&197d_Ui_p7-AOea>^vc`xP)oj1er z(``^6hW|FeF-CDT;5cI`?LS{eW*=<)7-h7L{Tbz#zycWObFoq&(n9d08gkJ_@;J^LD*bxYJk&&#V^Dmq66D^U$(BA;N%Wh~)A zSH~!%Bcq-%`9;8W#zU$tZ!rG0())*-jGsOSy~S9!5J7J<8hXGQ7+=s2MheHW~mu__e~EsUaZV6BX;bZ*{byhk7HKBI0nEZZ0g>Zscp9Xwo2 z2V;y%r%uKge!DQfi_wj4!7;v@!J>1whw;*9aO`EI(H`w%e4v5w0i&8S#Y09CwaxvE zFCReoh+$0t3^2~m$GVRhX(pHqGT44F8DdQO6S`r>dYXNYFc>SL8)anCg+5_)QPuyH z@mW7io-sac1#^rsJ~;wMC+1@6Pxdg^aUgYOUZf*>FSCO7feZ5~PU`XdnDWoC;C|+o zIe-JquGatunWjou9%5dj;gu`%BpptNnSayF?g;Z7ZNsBX)@hiyF^6VA=+4Yo2TKp8 zxf{&W!OThm^i@ zAC<4c%uG5>Lzte)5QZ{C)ICC`}AQ8+lF5DxTPw1OD!StY%6vcEDe+nAS z{LLNoBy$}X5W`HSSAnriS33AkF+bV~lQ?ECJ;Cuzr*(h?rjlNgo@O!>fJElcN8y*m z>>q|Mnfc~cKngRI>d!OGAN`?AWp1ZLp2mEhDzJ0RyGF!JXYO_^fijc1lCsD}<}*60 zE-`Pp0J4~APa(`^rhNjB9H#aSM7zvfz8G+Yd5q4AT;>5P^75FKM*#WE=cqO>>0}72nY=}CtYJ!NtJE@wd!Vah&N>WXJ#z&UaGe?93Ed6mFIL37$y~Y) z>=v{1B-m}{Q5v*1Ft<^kdxv>0ismnk%*l@s<}P#G4fr=P*HH!6%rsL8)xvy6^N3dF zeFoqjQ}Ybb?lYq(7qu~&bkp0JD|P`onE%rPI+?#5M3gRO$0(qix!?jUdzkEFSg@Bl zlaBj7=01P02h3|Y6dmIqG7r#=?PrdB1^-9P)s$Zcn3E_KK4u0}t2fBp)dSrSGh`Aj zf0#MX9c+ZTV<{|0neQ9{JYjC10^L()GnH)5n1V?VjxqPpu5e=gmI2tqnkI$LnYD## zwY@CKM6BR&VO??s-Nzcp1>Mgong_>2tYkU?Tv-$R;dq!efeGOe)~fShM_Kbe0l2Zs zCPV1XdPrrR2P^3yVtcXzoB&>|;%*4NS-GPC9~P6o!(*(ZhtM5oB~k(B%i7(7D1Hu> zj2xHwfzX+2P zEI&GjqF8yf0is#Y{Q}`hR;d6ihBZtLNi1t&0^k%&@GXRKEUN_$@hr!$G&4+KMaM#V zn)L~_V~MPPCP0|PGE)bX%$kt{#}w8KdZ5m*%BhG*W&QOn{Liu)=vz-?eL!jU9BaeZ zfOOU>D%sAno~HzNft5(lOa{w85Rl3GWE$WiOC1TnORQQ)A~1_}gvyO<)_yN|j|8l|`DH(7#X@Vmv5Q@4McHB60e1M5{P zkM6KOprWObwJZy|yR3o;xHqwyoT&b6WqtVtZ0@n1D?^z3tc^6jZDYx4lF-iLE&z0} zc3*&FCu`~}fG$?dLzr~4KBnrdhxHe8)9YV!)BPZf+jXkSe|LHdCKyMhVU7yoI3h3 z)?rFJPVAJ)fIaNve<8LrdoPvid)Xh(MiduziWmI$u@}?*+0QPev*G}I*aJ}xvNPy) z%^`MWJ^WnRi|MVW<1qWhmB1rxD;=Ci*>%xSy0Kj-X}hzpQGwyX_M?G-C;QW82))=Z zYQVhNwgTvU*z@TLJjV8*5!!L~*GD1rWe+ET`LWf$VE$}T6k-OjYj(gdkiDF`qabz~ z<&t0r`z#$&A?%;1$O~oj_COiN-a?III6Lw*JR;aBFM&m}TiT#I!OngcEQ;;9)Q&7MG+IFapWJ&7w# zVoxVXW}klwWeU4J32=rzDGZRx-kJu}v+T-42$RO1HVWZ6_F5|9)7j|@;dh?hW(2#y zo<)t!MRu?g;1YWZrG_ka^&5a}cJUD0bJ&-E1zcvwP#JlJJg6X*|(y>irDk0)4axZdKD(c?8=8=CF~95V5MwjDPotgA5q#U zXYb2|u!4Q?G=$Y`HhnWS?BAtewQLi9pfbLWojRFTs%L-u8$7PFQ+&a0u%nj&ZnBwF zPTpcqtA*ojw)7ZS1N&wp*d4YD3(&~^>o$aU+0M-f+Qg1{3((B&{cldi{+^22R(2vC z`}f$>sEoYNRs;ar*xNsZu$_G+o6f%u_69$M>0}S|!oQ0hvm4OOPNrhIhaFQ4=w<&+ zy>uUY3%w3_z~1x%gb&#V`vLvztB;|3#J)iV-~jvQtq?wDr~QPL2H7%t@`u>pQs`m! zav>HPVgE{Flu`ELs^_r(p0HaeH9ci7q!aTQ+n1iQG4}hErkyy!0f0Rm=@$TJPHh4l z_i_q^25T=m9+`#G-{0uFFKqo?d3r(_O-9pV)20Jw70diWjYv}QnegtOiY z>?r4_NpNtuaa6U4?arC~Ca4D|?q7I#a-x^P)QfYj5xQfXsnfuYbKczv=F8c55&nLh zdnEMde3cAg0HAKS;pEUBiRC!cXNu?KQ?Zr6sikuL zG>1u#d?H6rTP2B8wHm@?PS^qnQ#cWaD{0c#|_GQ=Q!8O zVUx~Dr%Lxc$9V-zFL0g(LYTp6qYRPBdFTpuk>g8`*CkFc<%BHGu1koP%?aI!C^?)@ z<k&-ph5P{8S&3(G=IkK+pPDrY%;mqnbHmm}IW z4s!s)V$KHYc}h5yH^E9dos{#-IR8>BQO^1Lb3g^>@0nPsk`qTgPZcM;2C=I-rF8W* zoX(%%P|G<@-$fng$`^2`=d7T_cAfKx&Walx?l-jmZgP6p0&a00KZ4C|&R^ewHE_n} zfZgFl(x9r5bN&RDxXbz20BGXWxWJ^DW1*{W;mmymVJk=U3)nr5EA>P7IUDjIY~#%9 z!h-Fbt!g-Qa6;(Y?&fT%g|LUS&X?w&y_|_uTK94OI1Y~ooQw3eJ>=Y_lChstUxR3m zIDstq4{(xiL-&~D69(NNX9W*zh+{ntlVOe@O~OYwJL!2G<#bZEe8M?-4t`HL-akV4 zjI)5At})IuCYTdi9rzy%G*V+%bB65zIaNGh&8u z$5So}=Vs8`OGgCvL?x7w+;{0gKEZWLf;5U7vlNaoT%V0#vD_(2=uUB;?gxwG&ZOa2 zJoi0k2ot#e<$z>v=I;=uaG8`J&v1Py3#4*c)TW>1cDxOfH0~Z6!JXrdr-nYA`;?l7 z^A4_#p34i|r<8UwxF7NXncRE30T;Q4Xj5i$-`EG1!#y?%xXj(04u>n;FV+BZx$g6@ zL>~9pbFj?k7JLXO;BKI9p^#fY3G6D@tr&hq+{;ubU*kSL3cq6R8k*^pa2@qIuqoxn zG67{=Cf)mTuBH#B72KtLV3pij^y%ZPxbc+Ws=1#GAX*J~E1d_m+__;8)^St#aIfe3 z(c^rbi>DG#H}?ts)b}R$8!8TOap!wLcbkhpHpj!w^`n%3hii4vG2F;q{4r=VSLg)C z7H$oV7h1WV$#87r@?rq(+yYPNI=D+W!m^V)k1G2v?um(5qMJMK23QX_nks`{?pM=c z*~i`W5&RxsR=C-V&{%?@$Mqk1ZSDpg@VQv?dZX?{8 z1e}{PU&ce}^=SDr#VP42m_#ff*&=30Ed4JLT z#*6o=04B$HGhT%7IPZiDz?UcbZv?VSr-Jr~tz^fzE)4YrV=n{FA z3h0t}%PET_^Q1K1OXZbopgYSOi~ywZ=KKPObG+G98Km=SX~ppvJ%0?R614UG<}dB)Wc*6^xV!>`uC zi=rp6j@MESX+7_9IN&1Yd?(=%-$Y|p^5`!RZ=dlli zcJSi<26Xa@sG05JMNxw5=2_`W?BVU+0_f!##L)He#?rtZ@V@v6@Q|mS0bxJSP>qXu z#4COiFu<#!msO8>M`_~?^2XCg8sf2oAspt-r!#egSK^=tW0dzo75ty@wo$S5l(&}B z`!n8BY6Hi3eCk%5_?MBb$M4}=gaBv0V=w&n^5;;7ap6BWfF<_vH$4Z~&ma5%x&!=h zD)J8U_ZcBP#P=G3(3L-bGlCuFZ`%Sm!uMK2ec(}k8kHn&{D-uzJO4o!96k6sTM^rv zFQClk!*3gf@EHG}>44*WkqqF=pSl6y$A4=Vmhk6an-0qWei1c7f&53qfFQnPCWOI! zzi_M&!tZv1FqChmbQ8u;38VREIKP-~Yy^J^H8fHDA8Do(&EH2|!%6-|I!|Kw|9lG; z%b!i{$tnIdx`FiGIQ@d4Ore#0)9B=T?Wg)oWVHVwjLzWWwH3jh9c zz!`oL6|<@Q2Gn?t@n`wGZ$Q)dD^CH=@gpehr1P&+W;)M5PN(SwzCS&|8T?%`Kqmjm z3Yc8vAKZi`F7XrA!X%6TQaC*m*ErZErKKlmX3jgax5a#lue*nwl>#u|5 z^Z%g|#!;nrRlcbStcbsHKG-$>Z?sY|zmb}b5`OP>uu^{2TYxhD5xPy~ z{6`-HD)@Kko2lf_p_Ej`ccmG0H9wthS`9z;Ge9kW&mox9@tx`MsOLZ136tv%{@xj& zH~7y}hkTR&S~E;<@n`Y?xB2(IA#C7}P`7c1Up5CGjr;@g2y>TTd;rkIpGv8;nZM~C zOj`Jl>9Sk-i_;;z$A3a8_&&dc`lvR34eiu+e$jcv?BGxS7tqOfNH+t!_%rE`MY{PD z0s%dIs|MH9%a8pN9({Z-nx8)4r_F)xA>ZvJV)yg+H$nJ_zvxr2LH_=q!G`#MrNd;H zzm__f5&mxv0i*nTl;5848)Lzq@;|12^%>vu4%is~RmXZLodkC&!R-;OqF&2cu)`f; z_6nS-0CW*FT!C(%V9jy&woFfn$bXTqA5U1)C`^Ulg2@f?X2q(Lt9b z@c#nQvIX-DU^#;E3t@6u(B*A~!Ao)ouM2vw!{mmbt_r%F0tpqvw;Tdy zE|$M7xSS4~2Eirj4DJX9ZvYwvzI3eI73`(+uSqcXCkUGb@(F+z!6OEsRS-y9{GMQu z6>wkR9R^{WKs603wF^9F0XhUaIz>ALlP`dE30Bdj>K3eq|Ss+Na>*JzB|FIfLM;E~|*A;5s3v<=Q1d9lKxH zLdE3);enHYgTgi{cn=9@(dfZd*iL=eQDN*%=-h-MwA0;%VPi1y5b7TRJcU*C1bPW4 zFN3AGQ0M}okI-{D*fC*=2@c1FZ+=PVpRZ812&R6*Z|I=+7fQ0RM1WB10~RQpTmcp& zjOBoZ3Kfq5VZzU;@e3EG(+M9T49NgQ3V${u_6gzkzhDw2+_4J6XrYT4?4&T38uJ+8 z1y`_G;VJ6o zsd1t3J(~1f6@I}0D-sUf2V4`LD*zM=>(;=bMA$J84yD3WI^xQN5C3a&gqNu-b5sat zQh`z_d@u(dRl@daNUMdpA0uduu#4_mt?;e}j&;JdCt*@A{EQB#>q0j=O>YP*sH?jv z?526fE#YGt^4}I-dKrEV!izMWxFgJ^>Z(zwrZeiUa3T%Tn}naP#|q63;TO~nwg`FD zJ+}%s&=jz+-uDT|cf#R;@XL?D9txEcpz9Zoe--dpsG^%aD0D>9WNSz`owDt)(C7>p5q{PQ z;i%BD2N(QA7*5^bQ{kr~2%iZj(8e1R4lRMDljx=jut&6I04C0&^&@cDE9(0a%te$< zrTjk8IO>}Bi!^~?2SmkG;~f-vz5tW&roh8P z6i-{#Q*@p-mzU_n`7rSoP1M1}NA%50V8=wtSD`yDdi(^;SJXjWnV(3v6DIzmyvxu9 zi1t(O5GeBYfi6gNJPW#D(a#aI|3XAl{GkjLxrad+CK~+#9^s-#P0&S%Y=;1mqIv7# zaY9seAG#<}^p6lmi$12K?xg6s-GEaf4pkj-A}N(Q@uI6#;3tTBw1Cs1%Mw7MD406= zBvA*IddZ@HLTUe{h?=RuI3pUGg)ph26|{5Citd~OOB0QhfSnU%{tc6K(bSt*_q?cw zPOJ-}A82!Bi2NuaXNul>1s~#~X!VcKT@tOd!7odcvmL^0(RY-(b3~C;A?J$hEI^*< zPs|z|X=_a!;f{X+8eFsD*m8Hj#vik9N^3mALE<5tnjrrzn=@FI^7N-`S9Mi+H1O zd@QP^Ofe|xdl$kX(e`h^hDDjxU?U=5I)_F@tEeD)BKnSg82?nXbS{L?MCOfHVoc=m zD|Alcr?k`eh}|!NIg9U5oxWE*{V{|t;z*jQ?i2I!;J07wFdj#k1L93Wz(Mf}C2S6f zy}pE_t9W8FYz~XBra^Z^+#CluDh^Qt+{6c|vUeA6pk~%X+!_l@Pw^ME(0PedKZDR) zJVZU3k66gYg2%)QDdutUXB5m=+)H)3pE$rFKp21VYN|y7#C4R=1I4n(FbxuCJcCWJ zIGJumh?w0E2o--&1PBv5)x#uQd|(nBBE$>nnj*zH)MlIzFE|K@5-+g8JzDHm0d`V+ zmb&#AarUeOZ+G8s%-JUtFT~>_{%o{m&N<9Aleo2cxrEQ#ZI5YBv1Sf)u#F4 zfBOIh;w|(&7m9!Mgzl<1o9e0}@e54ou8B9%S6M9nfS#EWvDpc%RJ>V_m}TP4G@UOO zZ#+-uUxoPgWhg7fU(oYhCC;I}QZ4>#6NEM5tbDLqvHb*Coj8(`?hUaM9kDmX1*r&g zOZ+Pz>)sYWp*Fuk97MybJK{HfgRW70v<&R7xQq*jCh=mL9JY#2QqsF8{^d9v9QVZ^ z(m1nCd~*aI?PBjRunzISJ8&3m7UKi&z)XW~ve6vxD0(_!u;xk44q9?5%DpEyg_4+Hi}MoS>vFA2#3 zJ0MYSfaO8S{pa9*NMhUpovY+t4A^1GnIhV(*UKL#7gbDyQJ#BBS&(2 zEtsc7Vup>Eq=NFYx8!f?vwbAb(?HKx@)HeA{UnFSA)3F$`+MjDBp*=K5GXlrgGrF& ztLe}MORmv7?hr{1J=LL-xASnz1@zIEDZ;X zk$gn`Zmi@(YPn8H+QJ}=ldN9~|9A1kXO{ZwGWZ`0% zq)2w32b__d4uUXMGA;@3XC+Ply?;-W>~@0koMa>#j_Hzox(DYa^Qn@$AbCjJAw!Zx zy;i0qg2vnzC7$oX|B^&O4R)5qK&@W3B!=>Gj^v3P!poBJb768tvh@*It|XCq**uAo zl6=18wFOwOKw|ub-v1R!`lrM3s)XYSD3bV7*1IO@afg4gWPnP>63Mz{5SB_JsIn-N zJohWYluLM5z$zqTb74{`SxQA|mE=_#%~nemt%R;d@*_21wUVhj0dB56 zx}<|czdySn>7feYw&Zy_up1;nixK9IWW)tFjS>Mp-FGDnI#in^QX14YOJZq@wn(N% z0a_)0jzjEwl8P6hyDw2L1GGsF(2i@DT&JVCL-GQZn4OXV8-!gFKYIPxEm3?A=ID{k zya4Q#2)~7CpX6;)K9Fci01qXVsepb-;(ov*iGptBfFy~&(#MiFjetRkou-;2k`5rKB%G~?=_K7m?ZqCcKg}pzq~@#l zz6%cz>2zvuyrrwO(D_KyX^S3{c1;I6E)~bI zXc_{CNk^%94ws%vfiOZELery2Y0>`xC!{|G0ivXinbc`UOC#wwGAE@I{(wh}^h-5Z zoOH(+AYMAdQcS5ixzA^p7@CYjPRT);)?Ann^r(r4tC zC4G~=gluWyO|TrPL;|=hJw^4&73oX|RTjBYKgw5m(gpt@cD{7dH9M`9LSEZ^! zup((#JAz)5mQi9XmVQ73loDx2D58~0e_Rb#AsxI2%S!1VboEuzq-ls*E%gb5utuuf z56fEVo764TNiD?)T`%1|N+0`%bd>VkO(~Od*)6Fy32;aHZ6}0{(kQB_?@I4bN^6ql zd<1BgS}AR`NQKn2w@MG+2i%hedjsxE-=Y$xO`1y;NxSq26$l;DZ7$GtN#FY%&@FvH zRZ@?%)kO2pUa1e=i$1B}c)$bcXbIq{bjc)yc_v-?Az(~;J{sU8E2hn{M|RmC%R9?v z(f8ycTS+C%KG}=6!1l`u-vm1#EA|H*lnvT(6^CS=HSlwl{qr-}VcE|#aXcz(Xr%WK zZnD7$P+CkMC{|TOY|p(zA_$V zHh)<~Hdugcvb1P;)XTbPK6YJJXawAl-H(OkP1#(Uf!&ggB?B5{DJ(>}BYQx}uTgfS z3&Ojy1wX^GNj8=Qzh>DRL(sLzK6C54GasN8t@kI7LO@W@u7Se<9OxBcvE8Qcnq0i(jpFmf*S6&|m4;Q)1 z8o)mJk5sblmxuiflLPY9)i60EZ>JC8DmT#I5geBP_&tIhkxzadmPh4Pe*xU&Q|MQQ z?(!pdq4SWhNv7YQdCE;$PAH{0wX~gl<*dmN2FSNN zLl`J8F9r*e|I`PEVEOMGAq5lp+QAv37Yb_0k>k|Iz%iQ+}2O=#u9b!=YQ=K>Mdh z{s(UJ_+EMT5m@%g+4OKfkbiv&?4kUj<8NTUd{H>yk$n6Pcnr!1E&_(+A;ExQ`Q};h zACbTHI@qY(K*#SBIY$ZhR6at<`kDL*-Sjaz<2MMM6#DBh*`ruXmd=WaO2A%)ky5aW zVn5Bt_9+;zz;D08zlB= zAVrVcfB*iHf<=u~h~mr|NJAAzl`sucY^RbST;X;Ex(LNLM-e7cvGq^D35B>HOGGJ_ zya-*iVh+t#Pbv;`;Si&E={9t+im|m|rxcT3fk~XAD-ObV#k>SqCMe9WLU>x?`VsBF zM8(`pted2G_62N`6|d6|%~KSQ&44qCL@IMq6)b9W&nm{zyf;npUK!w=V$rV%ldj04 zfx>x(aVp?~!cM9CqT+eFzn2t4(J;wUY~nzetypvnkfSh(A-t@3hwiK6ih>si%vHE{ z1M(Cys+;o_>klDXf#M&Us1+(UxWe(O;?=jID^m1RIeAT?`wC%-6_+&)3;br9wJ3Mlg>9b&xr+k%6@|6+P`V=U=YhYQZ9RDt2 zUsZm`1{5m?2H;Sl%-I7dRnGepmSxIFs^iL)b@ZOILMeF;!b;@~s*4;|%HOVnRx7`x zBeq8QX%`%8l_qL}>y$6@VNsVsM68*7CfFPnN@(NN`E1w&yFSa{E=&dH}8}!78kDSoP^^&>c~&YJu>mO4bSHraIyZ zcX!n?I(qfMuv^2R->=Dk*K1a8>+rSVpN1?}9E` z^?*w1lPU*&+cBzF@ctW5zG^w0v~eoeT!e{NeMm1A6I4a{V5e1`FM}nk@PB;6v#tuK z+V+gLMTtbp*gDkK)HK{Xw{p=10V z)iTOuO{#5IAZ=D@X$ah+;v@rFRUVXD?x}{pgYLfS2-RwBD!l=^cGdr?afKbKk#Awr zsrr!)>Mm7IC0Mtriw%<=)wNAvy{Z*jxc8}Eq9gr*>Nb^Z4^=yy!5sanWh>$MNc9nw z<^!t#(Zl*!)w&dHP^G5xWJtAgH(*$mR*aw{DnCl-qpBP9o7N|)+Vx;hRnuwa_e^z# z%DFMsPdxx9wG*}Xd(;a*19MgnQZCx7zWM`Ja8bWy0NdwK*HKBaU;WWJggKzL--YQx z^;SLLkXlQfm#ezk1e2rcBMTsOQ{R(=xvM8q4)svK-N zjQYioz+%<6?a-Z4zfRN8IQ0*Xx1o$z7ta7qP+xf;?6mslSzw9k$Q`)EB=sm&-^uEf zC4dxl?jJBYqYkA!m#Q|8!Q`ykGzr2q^?oVXd37L-$u6irr*U(J`h*UCnd)*S*hRHR z71$-UVXozLcv-#r8iZHWfhh=@tDZx(PoBE^C9r(;rF57S zsE1dA6{;JkM7^q>z867@)SuH^jBDz5X^R%Cx6&zEqL$HIyHxEZ2b8Jb)xo4(9YsmL zLT%hl^Uq54OHq(ksnh6FRI5L40@SFZ%dl>(x=0VGQ)f~;RQtwHD`rV|7IP z6(%^Z5X_GtDV19R4-{RP;oIa3O7(X2~{Zl6X^hvI%s zJe}|dG;h;_2Q^z0p*y5GNN;^yHA1=-hc)F?9vyLLdMVu<)%=hLshcLp3g)gkcL&Tv z^EcHJo|=tk;P0hTO@YTTO$*(Mm^I#IE*%<|4yygpf@1LM)O8}hKOs2$`sQKzuK$0f^0ZfuL zQ>j5t(OjqddPcK>9)VPi%HhBgXEn1+0crR!fO8rtjl$A3tLQj8uaVtC&@QNme36`sQ_Ze88 zCiw*X@-;!5=rRg4@4EpCHD{J1%vH^w^!uhF&3Y3&u4$H1+gq%em;zOQq3s^ zSeXX@qhxF+&8mwKR%oi}El8#2i|@gzG)HNsQ>}S+2f=DINt6?6HHrf;snh&a0I1jK zKA`<~UE@Rd_lCxcuHvRaRn1>mBs>jpUXX_ryUwO{+iQUpDq zb-M-AgIXKaDTlN#)4Hx&l?rfJYdi`#qOF<(-BImG6=J(-C(wp>*Z%Ss*7eXHqv?^S z)=nSPOZ)s3=)AR~EpYJBw)_BgOxyT9bjP(jIRIaWcH@VT`f1luH|ekS3IYUZWoleS zpmv`XEJ*uz3`~QyKd%RbX_MDL7_Qy;Emn%q`p`)ksV$B~loQ%ODq5nnH$)IdYyawk zmAsokSn$l6FQLme0~2aj0-@*;>CmNUvzase{VZ&ixUPr%i2xFkkyE<)Q-ZN7SVh zYERR-dsQ1>16`4JkZ$ZX?LBI+i?#RZu`bcROEp zt<(;j#R^s0f$I*?YOS62XpMFr?Y~;>%-3LAr+p6pjlZEiWP!;|Er%+LTiT5#=x%El z(?@I2e*8J$j&|e|m^5l<6+?GdyZ8)*P1tlO-0Ujf#lEjbGJR&5lOW%smeN+7(i zo$g8R-`ljpT1eZq9%ta+q5WnEtW*1IIsCh{a~8w2TkEfbu1EVV2fAMEvtI#yS{)csPmvVs)uyl2OxCS>8W@>toxZlJC5jHaKTDPb>Gl| z;HLXQ1Lm%Kfm&M+-OF!-dF$TZ5C7x3WwRjk)p_tC^wZs?5s$yF{v3n>x>fXf19flx z24Rq{V;&$_x5Np;5S@f-y-?kkGO!3;x)*{)>Mpb($_a<=9~1mf>ROjT8l!uU57SuP zGkUWVugg9Rn*`k&Iyg`3BBQ~QbxoA~QgkP&p*f?A`5i&ibV1L7ozq370@8IJ6f;9t zIT11Qb%WG*Ue$R9{RVJN_Z+pI#X8501yGjgjwd2ascu>W9Lsb?Uqe~0ySxsp zLN`MXU8PR;GNM)KcGDwNtz*-vR-%au8)qH;tBX((^g++oQM8LG7%6z8ku|`kb!- zF8b}0sQ=ripGCFpe*FOtnBxBpM+1<9djEs)KcsJ@Ld;da)Dv)6KRE$#L_d{s*-^cj z9yT|<`!vLM*Jn_-;h|qe#fPWw+s?uxK)-_y#X$X=^vwq8GdF_;>st;ZXo!B@8CZtu4;=$U=vNpJ zG*aJ38{mZAotBT%*S-&7w0`a$n4Hu*QTH38U;7($vHFhb2zE+;gUVht)_2luG(|r~*K|goz7>$FzfKM3S^WVzjMMaK zv{laOKcc=QT|e_a;Jm(%p79I%6na)O^vB)7GWG9{0WLc9>6Gj*=_OCFQkMSx`H*Jo z(|!iz=mY4Xxvc+|8iOnPE^^G(|4oDZJbe=#Zu$E2AHn^qK931qk$y9oT+@3|c~q)j zI~A5?`pHFbFW2wrhpw4B~c-+vhe+M47^~F@m zH0WQV66lV8Y6^6X`bAU0?&|Mrz?$?$A0te&-jm#0^gSm5t@=VbY47RXr~|sM=g>T` zO}}acG28XAlx#cn6JLg9r~Va(0ybUx!DuME^6tWQeV~8; z7T}?N9aX{o`u(&iAL&CE0|xX3)ZsqXw=6)gLA{m^pdo$MM6h9fNhow9`q3lsd#aDf zL+EFE{${W-eb733kev)8si1od`Tv8dvth9XHhT@pl!ROiF@7-FXPD#$IBICif{B|U z{%x4J8yY9W&%I!#% z!>0AL{{jqwG~*03l!d@F$nYAyrV2J3e+R-4LnLj=P{S;GcESw&WULf!DBA#&2*b;? z#Ul+PD*-1AyQtrdHeCAyCMOM<^f<>DMynAs)^NQI4yO!r=+6)144bJwi8o9~Z|E4G zVCeq?^t8cG1=B>s#wIM7Wau~q|763vl;Bbg?HeIHYlxi*lQhHMuY;X4B+@sVZs6ww z&KoYuV0ppdNj*!3VKH@lnTFL=e_k}4uZQlEp@0X!EW_6~0l9|IA_yIMhF=cBCg1Sr zV>lKV+^Lc(G^}X{lo*WV5SAJ;>4zj`hO7U;qukIJ1cwSk=6f)yHO!y`v(E6ChR5{= zIrXd84Xe+B-7s*dT)1PfYZ0Z<;IjsB*MQCxPp;v)&46ZyA%gDqJwrEj?e`6TJcMJL z;p-P6Y&T@kt?V!?qgNxHhP9>8bs6S719Tf+xefmw!&+Aa?KOO=0rVMq=?Whhz7K=L zW5f6Kkp>N3^ATmpFxU)-VT1n#=tc}W5{?-hdg@}GjI-%j+GD()52>?p4T`VvdyV`2 zAv|dO_GbtW8K*`7T#ZKhN)H0UVmz7;;ThvdFNCSa z2$}+&HRe$ZpJpsjH15~ zw8iLs6s*5t{_87GcHc;EOl&70bc^JqHJZQMnrQ;+d-KcLshr6Rn~D4a$0=L4gg zH|S&I2UKAX8jsFEv>~I~9WZR{=?07#RjCN`)Y$SV*fV3}C>+L&+0?c=nIaY<=pK`j znk;8i>YEVmH7%jr>|zRhAHsd6)lb3poBHUHJz$zj7jw|$n+oPQWV%Slx2Ng#4WM48 zOCj+0HpS40)yH&x4&a!n<`tM6H$D3WSK({&Tn3?^X*(UG{-#BV&;^)Y`yIkSQ}80N zAk)0BpbIty#e#*H_CErIn!4&v| zvnIER2$p72QPMnT`h&XsbkkY~EYF)9wQ;};rst{0%QW@9gV+~MwN%+(GF_;Lf0k+P zQg~#Ww0!7tOpT9WdBr3+1Yxde+-s`KFWfroO=Rdp6t)O)U)Qu9~(40E$e` zHUzt7in9ZXP40AGOH2a}N;IXWyIM%gOmRUlEjJBPil{Jco(fiJYND#L%2Y=cT(!x0 zI&?LrH+RFo*3>M(N_D2~e}mPV>{LiyH_f0i=nc~%n!nsO?V-x8!BkC2)Bg-w6K}Q+NZGXf;(*dvnjU{#}^1nI3im+D#@Zp*l=+n!q|ue=h>- zGHuxo)@_k#fS$D9FkHvbfa3*Boz zMDG|}%x7rEvdc) zZvN+GfQMO014vKvMXJob%xo26dzGe;Tv-nXgfX z@HhYR0$70A-3<*F!n_+HV43=p={UdZ2&5hf@E}19X1Z0_iqx_m}Ua|}<$GnY>*vsa= zr4U{**V5yhYkrPS;XJeQZRqmNj`EiwEinH}KcOl#FZ%>=)qH{G3Pt8%B^JD9{y+^V zHaqq}S7L6M1YN0l?__*yW#-A$o|K!f=Yv(4r_=nT(md{SI8>R3sFA5QZ(ENQYRst< zp{q43Xs6bh-`WPKH>Wu0th#P)$OXM&p7kZzP4fc!N*l~esv*2%9{35d8_hfa+cM_a z5(t~j3%`J{*=(U*)nXn;#a63XW(M3dPprX$_sv_IpldT*R)e*hZLb45%njc`*lEsR zjVN8_HQw};b(`DY1?@4rQZnc@@4o}nKJ&R@m_9K7K&{V1b3EO(ezScyOdgrrse>9Y z|FZ;a$h_ubz_58fm60RnRXY%D)ckKfgip-Z10Z~6-dF|Un0W(rFiw_edJ^_n&Zf}* zbGB3rLb=zHLyzu0%RWls`z^1OL3qG&i@J@2mUFRyLzbQN6E#=Mq)!1yET`e0Vd7=EPeN}?KlP11mh*JP9k)!RI?&g0&`kZGpQVlRy1(VQ zOqd2(e#nGlpylx-2!kzg8v!AfPP&JomNz#;7iN*&0)$&U$S=ZjQx7;{`Nj?IQI?R) zh#hT-{1C!Zmd&(P;w%bEsPUG6-vlIB4j%!WwoIlmwIj)5ng^R?OVwIHie($k70y`r zbmXL3c0Yj4SO~rsa$eEH7EYsqD_O z_*MY2E%mh1b1bjWR=I5HTMvgTmJa&WP_Dx=fm*f#OI;_Vg_ak>A-!th&!AdOisX;EatU3qFGRtSQf6Fad2cfI5>@R>{rKQvr!Ky9kr@(3~Pi@fES~lE+ zL!D(i9ZvO@SBv0x-C|t_xM^|JB|&=2@`O%_+m=na@V{f3b_^bk7CW8ycP*Q_fF?^l zwV2J8udcze)v}ff?R%E0X6Wu)a;f!cv;6xl{Ms$UyCCeaydZ$E%VML-y4#XXbwZEj zrVQ@AmMK)A_gNYpBQSkniEsw=Ti&Pb^vII12Vn**-AloSEpO4mH)7Gvhj7$#nQF`@ zmI8V=_|($69580drXA;GP5uBTd#v|n0i3N53=rq=TfD6+`3`~z}MwUa7_``+th7DS`}2FpRgXJ3NFejqdFnlx_Jv0JZWtYfiA}C zL{rUJ>uwtDp0WzQ3(wN{%C+^<_N z8UZ(~tdJ;TF1V^dc#)7%Sljx)!Gj9Djc19P&i zsYJ9rwtkv0IopzDfW0=k4@_Ka9dz&a*{=Q%Ci`vqG-*9xbBYH$XggR7IAoie3=>z| zjxEp~w!Oa=!Xq{x$9KS^w#)QuCpX*UGg!&pHi;^94_g|YT;4WkGWD_fHG>_qJ%~h@ z6#V{EU}KrhagQ3!~)-KX80U|T8&oVM+z zaxl@>HwM3RHaVrTblY0W(&uem)V*G?Wz&2*!?xlQSfpSdrt;oneA&Hgypt3=~=6=&E5)DY4b#aa*VICMbJ>T#^zXs zb!%;l%CK&oZEhI+>utpvunYZMFmiYqGV`bKGnTq`J4oHcF$NR$J?AnB2GRrUTy5W?PU4+HTuVSJ7d+l?~Qu z`+gymT{bOsGTpY!e*nF<4`;xn&z44`v!Qo4nsw&huHcw$SUIqy@4ZRLM&D(y+sg6y&PQ`hZmf01nV+P7zc zx!7maAk04dHcB)H?fEZ(9kQ=_1K?_BtVGbm_B_hcN9>AyU`Oq?U0B}3-suIQr#*TT zEWPZ$)MI(um$xE{k9|@aOpe(dA;Mz>!==!w691)%oFy{rhrA+ zk5Mj)wjZEV^rYSF@B)popQR~bti76EQ=PJ3qF17E_B&K(#M`@Rx{+Z2h6Vzs?azGy zVWRzPI#`lDF$oUIb~)|M6nhhmLC@GX&~8e#o9TteS^GI1AkF>()lBE?3v%I}ZhwIZ z;dy)efB*jc1^dtkkY?CZV&Ir*=hMjJqJ4c8*d=?>Z8&Dxr{rM4Z2R@s;h1CJM2*m8 zyO`>+EB1G3?3-(!{}6t8_7-|r^6gXT$SJTdrvkmuzJ)5ktM-74h*@O65&_*c`>NOJ z{42Jv*#v2c-OPrx)E-TTMVbB5b;K^Wf3Y083j3_*;9qI?rCd~Hze~5d+Wyb)(AC&q ztAsoGkD$A5|70@Q4f_j1guZFtTmrvab~g3kx9vVSBpl-#>>i&$ zddL3z$B;JK{}=|lYk!G`$W8Wleg$i`yS@R|V()qrL0j#Q`XRh$52qgr+_(QgIk3$x zo&#vNtLZ80u&Xt=-cEbZmoVwFSMG(b+x~JGbUpTk-$K`Gf8YafJhXpENw?pAb`{`} zJ&3-q0sGf8;rQ5YT?UUq``!@1ko}Sa!eRT)b^j;sE8wcwy1w0eX3iYiZWIdvPXcx# zVxl5q2X=SI^$w^g2DXlZjbe9TcZ=PL-QDf?U%-HP)%!fpy?*cY{$|Zud#yeD>{&f? z4p_y9LPg>MJ{HPOR`IFO?B=+{=R(dT_oYyA3Uyx#-JtR_#4vFdI71C(DA65k7)Hi1 z#4!H^ScWQw&*#7sX4ph(JIcL@dv;YZYX{R#1V$fc|aU#=r$eLD8mX@2#hui zTL@x=;STk=#u#Q(aW~d5Yay_4h9G(yWh4M($JY=&VPY3EEsW6GBS8D znr%2v`QseJfHDAc4Q0qGq7AMh#^xF9;y|2ls51m|F@|+dvFrtg#V-IB8qz8Dpe`~@ z+6alohG(vjSYjv;gTbYS%NsDZ%%G=FxZL33g|QWeU{d*&hI+F>TxEE;0N857t=bS+ zV+f#hf34whK@is&JYB)E-ca8b#8|_cX<*r4h@)C|qd}tFa+Be4P6cqYVHWA-7K6|k zV5^}j<$Bu;eZnBW-LOvr%ML?$77%wDZVrR|F2f{Jw%vv|lnL!IES(Cl*KnSE*gnIZ z#=!O)R+a+G0YeRXOmxuDmdfQrhS--7KWxaG9>h39jVILqJYsn92@*#Q_|YR6o*{D= z@EkYj$PP{z+^PXPZHUhYmNN!7$`Q{R7Hk0LIYUqf5YHRJsm#A%u-OmnqTw0k`Iii@ zI)df0VNVVSTrt>C2k@$4#vDu*Z-^+2v1^7Y0=@rv-B7X^&>Mydk1%-CP_8<#TZUeg z=ifFgs|9e!aD{qVcMS`NVzzsR+*5GD`-T$sz#bURG{@LOL;Oa7M~1%HA@JC+YdgRb z!$Jz_PYpVuS0g(G@m|72VAx7~HI75w* zw3UO6U#LAd#5k5R)uF~qtuPj*7#C9)X_&Dg>FjW05am_j#uaG*Mi}kr=8ZHC>I8{V z#?Z0=qm75Cc#kmle27WM829%D7;9X)1jKR1_f!pzH*TSx&IDs!4+u;&t`|U@Wb7z| zINA8DE5HXNtP?P?saoafv95YTBM&JKCZfrOc zmp@^QBpW+v9KRWZr;I%d1DrPgNrk}~;~uIu&KhrX5YHKH2jddwjq5gH(hJ5B-N16u z=wA+Fmy9PV$Xqs7-3{!D(Ptjyt{OLnfEaHaI~sD=jHk$-UpGG4L;2?oh<3|YIHo9*ExMM6uxALy>g@8-kGhST*?7ndywFe#;tB(M9Xmq62KQhjvhQMQ^ z-6+iR#MqVM$WvptCcvHQ+Zag;<;xCL>sC;~Bv~z=i^2+F39D}couH>KJ7+ZG+ z_SQI~K6u_48#55!8)s4_^TFszY05`qzX-5=GA=0tme0l~4jB7l+<`8X^ws!fG+07R znJC>4HQ96oHrNzToI^~-t^pfr(!T{~nCS!A^f1LVkX-R_Q=UHo!cAi~0E{r*r@KAU zG~_aPMwzld#wA9Z@@xQzFy(Cq;uzDEdcek-HunHF&g4)2b-Zaj_1-3!mXfYcG#wcX zY?A5HAGrKv)5mPUrkW~0!WE{O+^D>dG${>FfEs1W+ym6Mi!k>J(>sb>D^2ZcKw_0CfFi(Z z(`5<^YfNLQ0lC)XNd~{pwDtk8^`>IvM*eWv$y0rs0pP!e#+Q$h|b-<07h6 zcBh1Qu(_}=ScaH;Q0g?)e7_wo5oWI40oX9}PV(o&&9A8g5pM3-0AnM}LB7C7nwPj^ zOc`bVx(n!NbH0m^h%o1+M&cNAX>zP%%{?e99B1A|>F;>+^&qfJFxw9Rm}sul7sN^C zXH<1hHs__ReTsP@)d#BCgM86c^NU!3Y37>~AP{NxB}0!gUq1+Jx_JqOlNpLRbOPW^ z^ZX|Ov&?fScbaYfO7AkvF}EuM;#~8fX~3e*wtr%5p1CshjpmzMQo0di?mZb}3(T)t zV$y}?JZ>N^GJ8&0Q!Dyk>q-4#ex`dM_}`4YSjF zU^mSsazeMvt!DwdZH}YV>5ln4Ir97FWgjX3d|-|xiHGKfblpehKPj(zY__9B?1}j( zrQ}b|-jrcKGmi=e=W}!4?jXJ}pCpBPX?~Oz;FZ~%()HKoL-T>XF*l-I`mK2#b-mu1 zYg4iF-aLR(;}7N?n*lzWZJa6oeKJR-#|1x|1?t^>F?VVN*01I{3jjhaeYasO)Z$Cm z9c(#E@nDEWqC$13Wm_8%!z}%%!!*oNIxWC(OIdO);g-EF03$5>sL4Ol(wdU3QI=EW zl15wX$wne9AG2W<${0&NiWy@qt`sWAS#FF1Hs11_V$B50`ZBoEL`&fnAWpK3+yQK| zWzSN8DVCa4R;iZj9CA}FMFSx)&9bCAI3q2Nq`6U+qoiHaEdf*k&9EGyU7KmyNY7bj zSOOepScZ}hoolHw7Oc^h>K}m3v&2(qpKl3h0+txdmC3*sS-Rf=%VNvv z!np1dOZ*pbF0}-|0$65oV&GhE@p}!&d zqFkW|HJdDR$!Tx4xHksaVwn~R`K^|IRBmsxw8;yw-O`ZU&Mr$a%64{J&X&L`_E<(u z2iR+wIuFEsmU3G$*?!B4roawZO67yVLCc2Ozz$jd{0i)_C4?S4#90jX07onpl)ivR zE$t|^K4x+I3~=01fi~)tWxpL}J8cPd0d~gH@D;9f)-t~}i03Swj{`ezX+Y`51-3dJfh*mbxv0-L-@?#MnK{#ySA^EgvXsKd|hI1$bx)rIg^2B|{Zp zk1cJZ0G?Qu41?TL%azYq+A~X)K45unsZY)47nZYh3tw6`=c4aFyt4SO0`;|}fDcyj z#v--^cx#z32!ih{`6yd@Z~4#$*au7Vi{Sidc~cAElVv4kx}Pm$gModq9H6B1tK~Sw z`w;64D(XV5n+F06w(=~PWr%elaSpY9qI53IdLUgI*xxYgMlzY<)=MqG8g3nJz?DW= z6Mh+dq&22Hh@-55Lm)re8oLxA!kTRtrWs=$;R(61R^0#)$5|V6gWP!QE9!PnuwFV0 zxrtV93dWPH8!m&WT95Sv%T()K3JcS$ZI%Nlk=9YvI*hWuDh)8*I+mUx&9M6P1DI*; zH6C-%vbxgq``Ok`?|{v*7PA4EYaL|^mT2oZ$_3_GchYS0t+lB>kFkEu2C%@|X#_YI zT02wYbCK1DHg>Ufn-AocSSwHpv{bPUs|nU+))qN2xZGO5EvPH3k6!>=X>C>?f~%}= zsg7H1%}!4R)>!X70&%Uir$4|tYu06$ZN0V5eXzt@{Q>|sSUsrj+-R*%adVS3oQjpL z)}`bOc35LQAa~F@m2%=kRwWBHM-N*!WrARw)n5e95$mcw;5lmTo*iSytYu@tdfeKC zdT%GJ{V82IY4zI!;u&k%vtT)E?MjK~IqNt|=gwOvodnAT>n4hg7p>FC;x1XE95Hsq zYNX8is&(Qu5aX>=6)J6SSg$X@Y&WgNP64}R9cK&H+t!RaV0WxFo?)81*3sPn?pa;W zfOy|JZ5F0^V6C_v*h6bpn&pZ0eon|ewN|PF@XXqs9{4}ER@n>A7uHj?!1B^+vmLX% zvW_BUd1Ea%fjVk$t+nQX`p(*PJ_O%e)AWMi2Wxt|d7rJHOS07?93G zbipNF&1lzGd-;;;ZSXpF0AriIV&VXHdo}6}@q=CqC|A4h<+};QcV3?4nUv377D^z8 zc<+4&!O`9d8OdbtB5y&Q;r*%-K(zO0%2;E(CoKfaV(%MY0hW2kP)@wkI|mh6YrK0# zfHT&6JjJg~-f8N9xXt?ly$`a>yTfM?_j#{%gxo>zml=Q^_Rc{sFC1087wiD*N$)lp zf!^@GPER3kdgmtRdCPkg#pK)GIZ8p|j<=pV;ddbj;yv#y1nzscMG_%B@NPyO%O~FT z*Mj)eduLs6KJ#vn2H11&2+EmWc(131%}ehzN5J{Y`%@giYj0)kB)~V`X7~+oW9_V2 zT`cnu8{7;7aqN{X<~Yjghl6;W6=?+GNv2S)ahesGjcOD3mY=N=^K=-tv(P|ls zV9-D6D9)?T%8&CJcaLI@ntzaO2V{B<{#pksC?GZb^Z>^eHq?~wSYjNm(9=)GalprE zU>(A)(1J!YSJKi+tT*lORMvSDh;!Mx?f}tjg*}KdY^nmW1HthB(74wilR@Z-Ch900k^VSK=KS4j$@HFl>ZgqL61U8U5Eyy>_`gBc{|#r$V%Yeeo)?%d&Y^Wwr83Q{6(ykFBbH&baQ#|1FLGllc#0k*uUIUk zJmxN*qbttK3GXoKbLA_f%5Up{bKeN+!}*ESL#Y@}bzPN-~-@$rQ;=hv(+X`$KyHCaDZg!i%9_B+Ex0h||gK77%(jE%X{cKN3Ea(7hKz4GF zy`xDFvGHWyC)v=p*x4tn5%N;qc;Ok9!&8Kz)r2&<>B4WXO*r|3HEx|uQwq!n{mpb8r$xAm8NMXvA8j4|`MOiUi{wbB+{)ggpg2~7)DYIDB9M_RUI%OpQy!ECI+hLJiU}sLUj0Cw%raeu*c6t&DKM4osR5R0 z%wrxvB-=(0f2K1x+RvG6XdiH{VE$BKuVhy$g1CweSq+c&`ag)MUc@he+TMQ{lJFc%<{m)r|5n2S5X8OEcI zgL5Q*8V2kpPnQW}k9Z48ogVYHq=K(_&lwJZADQX!e8!U}H4{VZDkW#0q_{Au!FiOf@fch^pB;x}}%#l9y28fny zUw~(UG>9x@v6LYmtV^ZFBIH*}N_G%eOEqY_*GkhWVr+xd>@>zUOAEarw?%q|olP)_ zf*zN^?3Ru^wnqUvAHmYqgy2Zl`2(;~tRG4)1&*~-AgB>+!(>b_hOH$qmaQRwF^)Nq z#CR6A6-GFR?Y9>-Ta-reSx+(bXx?HOKm8o!2Esf*!@unW3NJa7WQk9>eM zNATN=Wyc6FQ3BD&*X3>A91|5heJ{y#@tttil3k{2V6)drICpr4=8_^gvaUd!=B&a6 z)83~#J6&e7$@GV*V#@G>0$;|g`Hey>yK?Xo%I_bq#9H!pJYuy3$5dU-r@`w2b@{e&`p9|oX=+_FIBPH8|kl!RtBwu(y`aqj< zP-;Op{E+mV(&NKYgBM_llcK4{KO(iERPv~_4oV~)ml{)(_k`4K0me=$Qlk=}o|5(* z12`?kjfUVE>E?9soRuzI05~W055d@ZDTplkf~2ET9eZN3u|Bm#gF?Oqu`85OBNeD`3n+@xr+|Xb&Vytw(kz zm99=Vr_A*Vn76!BS@2gIpj=GK``k+*Kaxx*(H2RZF!O%kdG|cV(c?`sOlS(GJm1oY znoq^Mlj|$lf{M3NU!yTvdfy-%%eV$4$@@*C_H4!1R1j9pOb-NVny=%$zCw#=d}=w4 z&G;(PuU0u);Mm5Us@onns^cPkM{I_`AJ!!}4!TZxKsd8)2V^umM$McFtT8>0Qducy zfaxsgBEWKXo*u)kW?9PsThChTfWRh}V>htvtepke9=3$+=pbvf2-s0pb}_}DQ|v2k z`+4Tv3@f<6Zcs41%6fbPh-Xvkg7p@AVUu)Yd3RC(hx6wknd#o>r2VfoovN-tM+pUnAI98fPv{*)2lMC%LKEvdgVum{qZPXI5Z>9o+d zQZzLY-$@zU0Q)E{XaVp^a(a=ZeEuUSAF5IA2$*WlMQSe9YSkaddY1(p+r^c{Xy@}3 zla>B+C_xBiV_IM#qnS*Nld&uak5BN)SEK8cU=8I~(IU!^q@D1MA zaXr=3m2S1gv2r;B)>6Av4O}8z)1sJoSSbVuohxN~MAQxBS{3 zQ?$8p4+HI8TVkL?SF(qWZ$Ck}(}|oo@49d!&b!SgC)NEr-N&AJ_k!O0azV)UsW~0z zeP0=I?B9+2=zyLFK>uTLAkP0RFhO=-Nu#R9(Ux1Bd53^&+QLJeQh?7{p=^##F<2M7F%FgA%*fb_) zfp{dlPQfCIZJq_mBc&%ai)${j(CWiE)EFxUyyblS{v z9>b*D+4xPEW;g3V1>qw8g-l^JZ{q{7hC5JdxRxI|0fBY=Wk;~A=OvfWWIXaDuwA?a z#f;s&ItSRpn^1&|1|sgh)q#VM2APB!>%8^t@o4@WKd|@xo(g5GM%f z^MM#8G^Cq6U2voxjxs|iM32g1gag$uxIjqjiNS?J93`Qvgg?pUt`^490yvK;LPhc)$Az+^AaO!yLi&GF7(vgmE(-os;9nBf--X0wVH-JzD}ufxu&Y8= zGSYZq4PEe>u;&rLb>ZMd2;2}3FUQzTA@>W+a!W|t2E^OK)Cyp^BMd==L9(vTgt2>q zGKn4ty$~``8~>%?M1JIzaFv4IYhh73jJ*+-Oat+)u$a1X?}Xlz$GsP37KXqFA#)tS zN5RzumQTVyTa0}cDqjWmMVP$@*jM545U_-Zf4GAfDrTX=XOwuL0kF}cK_MfH5MwDo zjS-LU0;Y=9!hlT`iygrQXNxna6E#P?L*@TsvDF>SwnWTO0$`~aM;*>(qWyKqEf)`v zV^|@UA#bo!>`@%pDsdSp%O-Ix#g@(Ddh*j-#BRGm+$we!$o{s8nU4eAE*7PVdAGQr zCRk62eW@RES`01(a7Gj;BRVIp+J-A#6zy99yDUDW66>m1ISg35IDj_)nwUQuu3-1BjHIJA!A9 z^sz6%Li}k_u&j_;Q4Ja^y+l5N%A;mK5I0KKN&;+>cF~(@o2An0fo;JT-+^tF(v!#B zCha5tbx4YE1a=s|e}=I*X(>`o1##kLSIl-)8hsDcV^X~u;5jbMFA9kh(tN7-PD&NM zFzG32(QUAt#_w9vmPj)mf_PS1_88!tG>N?Ld1(;Y!38Pv3=nTi?MSO1;Sa%r_)_Xw z8{mWFvJ1pe-9oYoWrQws8?cVl<)%FurMvVQ*l6AK#Tbmx83qHJrW;WRW0ATgC$Xj| zU3H4h({-8mfjC2Fo(V8h*WCo-EZy~a5SXpI+6BZpx~~-T=IY|eO|H;|Ie}%p?sgLp zx9WzNafLmKuF@&M!@9f2z;ja9emHn8=&F|k&o$k{%^=>>dDRB-zOLi|5FhBajsWqY zt{r{sN4oqJ79Z=1?ZgG2=;A0he5&i85!gqax*y<^t|A4A&$@>t0?V2oi2|^ zgA2}(`^RE1Mh?jci3Re>wZIn2hbW#bl7*(=Tr5YB1}~Al<3U^|*Q5r(aycy(+bd+7 znZQ=c0}o?tm7JHd=+$zkkH9v|bvr|Di)^IWwpIRv40fB${K@{d%P*dRxA&cDMY#7FhSnW%Gi#Pp(8^dcT}uF~$zaJxf6RpxmB{Q}y`L*02`TDR$YZ@}6a9O$%(E zUDqZUTV$sT#bQ?2wapJ~jopYtU^!YQc* zEYn5I2XVQs6zSMjS#i)qaId^G!J*2V%7N#W?0OGis6N{|jE&ZZzsKdL=^yq0agM$p zCGN}hSJwesua6-Qyj#C*KCXL6-=hvVPwJy~g5{K6CA+(-uX`4pcl34q0iNssybSPO zzor{lZreC2*dXb#P1y+mF}C48kY8wPPX*^j+e!A|*=$>QK8S~G2jvFwu&wJ`$RDwd zppSOcwm3PFOSa}kV7X%ZAuX^6wx#<3duUr>E?6GhZrB0h6Wh3j0Pk&=k==c?Jw=)1 zFuMqq>Ys4C+)xH!`a;&<=Z-7H!dQl_APr;PiUS+YJgM^#&SI!g z9>L;1f;f^j=m{{2@b))!uiouoQF0j>eF@A=vwc;vgna5aQ=h)lZ zSnPRrz9go1RKY#im8x7mvtxWr>7P|f#*Eo}n%r%cxx#AmFN6~y$lz2)^0o1pbQG_!3t%*luY(U7 z!MjjE9>X_Mnmd-CZ~_>|BT!$XoBP%mf)jYd>foHn`%~UEiFYNpI+;JCcrk_7xCj=N zx4(v2rt*jLFgA?`ZUTtpd#D_U;=L%Vn6B_ul(Nj=VJ(2ppod8U; zoCjwH%PM}J9x$)vM~{OumN(3Txu5f44#E0nm9hVD1~k89uR7&s)9HZH-IRFuCANiaqj7Nb*Wo;<0o5NhYf;g8AZ%zI$n$<1< z)_Kf{a;c?^4Z}3c*nO(P53)Oyb)8@rD4~pJLFDUhGn54MT=OyI_JetykB}R~18CLL zcxiv_^XZF#xx~dhU@G07x)o(FRsl=-(o-Q_VIo;}<XHVNv{&j)L{-9oDwS6Ifi9M``6<=oOh5}q+Q>l`^ z%4(5*U1M=n(OzdIU4h+T7pUaF$&QnL-C`G>VwT%%=23t<%#DomF00r9V~B_oz#o(m)jY+-iAaIrURGd;+9%ZfAx z@f}-Ced+g%KLPfEHK%6BV18yGW*NepEyXOOc=Ll`8O@`~=}zLUD7Bc(hqs{q&lE1x zY%0H(4y;r8_&dO+@y-sIEs`%Hj~m6$Qc@AkdshU@JU+EAu%$e@0H#^SC!?>9{?Dde z0PDFa2f#MocN@TVK4~wmyPwY(1-S$KY8GGz`88U_37*xK_WvZ$LD|45UW*!5r+K$I zm^+@II11u5?m}93ox9R4zQK1r2Jt5MrIP#>??w80o8O)X@R+ZqIP!!y%!yf^@}|yU zdBz`32Jtx`eFcko!8aEM_L7&Z4uMyEs||?CYc5iu{)Rsz5Ac?kAaDMTJFWuHdw#hA zun+te`MQtXc_hFm{%0P{Jyyuy1Y@&=VtR0{5Eje=al4Rb5LnI&<2kU0!WZh{zYv0r zxWYT3$|(qZ5sZ(8L?`BYp*ZQkk3xau`zV%fDTc=|;{t$j%)4Ha4|pyPI1H{=Vu9HJZ^im$z#Sre zSpaN^RCX{u{~RW@qc_n;Na+e-Fhcq=3fGt*-JuIkm6~S-YouhF0G22`O$EzzX~Sx; z%#cRJ0-Gt_ZUoNR(k3bd=1Bcs0gIO2kw(vx7GHsQjP$UAruZ)hVc4f}4~&*idx-pB zg*3=Lr0Q+XgH*%62_~somf}V|e@ZOs`%+YH@RjoOKdR@%1&6ZjT{RasX9@^oSbEA| z$Fc*Ip-*6Y_d;SW^CMTYnJJSXxrJTagvqutyOv&n08t&$s2k*byEb2qMf!mlUrm-nx!!hOxM43=d-mNKz_#<}@Mh8u{*K)E9-hSv&b@re8H^p| zi|Jv_AwDyj`d>$R87gs(@xXQ%JjK6I#5m2jodkBB_oI~UF5l7~;3-dE3?M?7ZNY5g zg`+kA(}l^@Y#1N01aiaq=iUI}d~bWOjNlf3Tz4ctMIL1o zf0GrQ6ZtWF5GV0sw1<@Mp z>nV$!$0H{Io6mC>0p}uKAO^&>JO&X(+Q+N52DYDPjRiQ)@BabL6Wn(rI8XABnP54^ zbE5YGwOXuD6Y(C;a23?&yqP0dU-0>BK^!fVJq{2ld@*2}Xn|4Tzg~D@1r{r89|5pI z*h;;%jY4JeE<1&?O8|BW4%q;93pMRAwny0B7PIUX#x=v#`-B#^0rm^oC@dZj>h7e{ z_@Iz}1;8PpVoR_d7M7Efi4(rkbIK!v6NQqa!jiGTjtQ4D0Xrvre2&Fj6?{V>5HBnu zCA}uhcgNUuA!AE`8$#h}V7VzYy$0--P;eo{ZwuEegLp?MI~o{X*eOK$_dQ`Zy?b$A zXwVDbfv}r8sSgF+a|k{X#?}LPEL5b3|3tV$t@XD;*h+wR!o(7|?t5X!EKK@A2%>=W zQE1%}#7~0%84y1UwKHI{FG3LIJ70w`y7wVs6Kdy%ioqiJ|G{EmN}Pv?HRux#6&*q` zO_-<-hQu&23(YoD97H~SzSyA$IG>A75{O|^U^x&cNj=~c6N-YOYv+N`u;w7l)5v!R zScCJH#d)*!QJ^<3xC2*h@u&{yE!R^9-pc(fAcnI~Par>mEjkF|B-WlvuUX8yIlvs2Ej?zM z$M#Y-x{R&iz?QRO(}1mD?NB5uNc64+fprsW_6YKu*#}B$x3bq00JgKOlyUB0HK`@K zlR0ij<_|Y7c|NHILgN`-Fxq4?U9su4GdT91M)uIBdu5FFU+jkS0a?$1KA(AZ0V#&n zxC{`>mbqhS16yK8`R7jd=oqNGSRYE@FS6~Faa>|DWdN7iMans@u%Xkz@|<&9L0Cm05+PtegIDd?@o7c46jU9FqQ|A0*&L>8Uq{8KMufHB;P{S z#7wRn1(?kj6bD$$o6v)RrTi!*Y0LRU0&BPjsnJ?~lj_-Zyq`+(cRlxi1BqCko|=}s z_;!kyd-(fCVBNN)$K}87iO{e z*&xkkMM@;;rfUNij4oxNpCPb}<)LzDIqUg>_J0LCM>+3Gc9Z&!t5~ptDb_GQN;B87 zs87Jwv%`HLv4J(D@UV$hro46w^CbVgkL96N>}O|fz_Y^zV81iSBlLuxy#|8&N;yjx|nd}9& zdpd|0*=+J@mslt2id<&1&H}s2HdF(MXBVlWyv7<`gTMpU<2Hy7*;?}JkJuWrvBzvP zdDJJ&V<5f%^^~=o1J-A(CUuZruohb&|C;Th%IPgDM9rXg%%2|Teqc}AfMp0ju@%@* ze#RZsgz=ntAux>Fkok?_SKEU)mfxnf|2XbPfpaSVOf}s!UV;Q-cn8Y<7Vzg+A*Zb5 zD}6y-#Wzg>x|vTO0l_W2ST+#%@&N$=`}iAL;Zc6X0n;4gH;D5b_izI7Ja;b->^hGn z?{|}z-UonhY10PZ<-SycKjlZ7gYy}$6#?uWuf7A|Jx@!iNT?zt`~>G<;oMZrJyLkE z3}BSdJqBQ+ka-aVCkbmqATeF2Rt&@$!XNZ`7YS3A0W21H48~Rq%NK%kjbKG;j2=tp z?Eve9)13jf2@m&xbGy)sZrTnZGBMWVr6%5CLCHrS=8SOK1o^YVe#&9vh4Eyq*MzMi zB<>04t77cFFmDUMU~zO>2#yph_X3C%>$yQ7S`6y1)igVrLiCUDXW$+5jNHSY869y{ zj#1(m!W7Ej4flg zsM))mwNl9ctYB41$=0x-=KyP2p%a*U9sAS|*e0gd!`z!0dj;Yac8H3^Jq$Slw1d^C zjIn*JKwV(_SwwlT9AJGZCLd&jC18ix?WVvEv&)|VZn3#9L43sa;sF`lIKM07`tl%b zosfnJfs(umzF!#6L^+;LLYYqTs8Ecj5e%|mqnB)VPGe~VdoJmAA&U_7Hd1DPq;x_~ zTbV%@MLA!>aWNeQ2Rr#m!il3GKg6>nQLcjWUX&a*U=mSwLs=t4GkZnyNE3?F(hhQC zkVH|K#~dY(El@R49!wNrFmsYDN3mm~JT@~;G%p$gS6N!AU|%HQf+?MRjVL=Cj~Bf} z`5cYN_Veku5Jw?jHp#sOv|BJ{m$xO5>%@?7{_JuKn1?78d_4w}y5*3Ak*120d0rLl zNvWKYU7=%`*&&lCIA#|GCub?+O*05tb4j{Z6$Q+YEw|iNAsKlmj>0UKUA~rp=37EU zUpfkNM?j=`K5vb)6v}73&@pG zEQ>-8S1Dgbq!WT`K`CF6HS`g~X+WNua8%9%2qy$LQFlg|*9@C1`8qemGHbfaE0z=A z-h^YoN;;p7qj2BeLq3LN7WZloDL2d-E2-*Q=l)G*NZKq(88}A^oadZ^o zm{~rRaCVPbVl_mbQ)Itn4&TP}@aSQyO;%Oi0j ziU^+0csE3pXCf?!BF@rqXNNQ?x}0B-T&eC7j5eB5>ouj8HKn!_Y@mNhS}kc>?VxG3 zB3ilC?Uo-1S?f zcK(r4=Sxy*X9ZfFU(@OWskPcw)9QlBTJ5H3wY#R(9zW9RB&9C&7o|3Quhg{vNm^}8 z(Q1>X)#enfwrE;y{Z6YrleOAQ(`xS&r7o-~b&>Csx@dw@E70m|L;OKMU9FFDfh~hVuDAhj^rQU<%I5s(O0>{qIr*Z64 zi0J+QAkIG~UPAsw#`E+3#P4oTQ2*yw{fXb*ol z(pIps)8eD3#YcNBK05p;K00dgQTj!EbkgEuT3JcX`qF(LAk+Ua>-$gQqx_%8N9AW( zpB5m0b9_{0v0n$s-y9#6@3OwX1jyeU9~I_6g$8KkA?S)Aot-5Bn$ow0)xd!~V%XZJ#Lruz&JT z+b7CD?4SJ8_KA|Jf5N+E|29Z)t%%ZTF+$Q}gkFmgHiC_<79#{LM%ZaF!v04w!a<7> zqWn<#X=?yofW*##Q%Vtq!YXxVK>lHjNT=0M>9ravgH}Uj)M_XlVnik>hmzPD$gCAn zS+pW5t5!s1`*{(SUF!_wNL@qaNL@qaOkG1cYc*76)KE$e6j8afA}V)s5#^G)h|2M! zA}UW(5rrvy^J+CzzSK2TeyxTokX%E#YBdxZ0u_~n)_~hDiYWKL6j2`E7f~rOqEJc= zWzcFUV@eHW(rPHPRzoRh15j(gl3YYtwIa$hrHJypo+h+2rk5AvcP>U?ru^dIW{cX^SLsvY(p>3q5$>U?@l z=QC(JpHb8KOq$M9UX)qu8)QjPc?IpTteVbe({w)j&vibBrt>*d>wM1CI`5oX=W}T~ zp9MOf6DprON#&KSF3CEdC$-M!{E^P*P11SH;hRs>`TVJMzJR9luE{!IP}6y6dSW*W z4Fu|jDXH6GNsR-Kzvz6SpXImP{w_xTwh*b8^C4(~_C+*IxXzHC9 z4*$PLLnU=M{Qn*emDJ(z|9do4k{=Ewgu{ersMDe$T2ue@*^tyY@+I`T$sezAYYefD>izf5TM@+HTj2bS^Hz2yKKlG^1vWdkdVu)HkxG-3iVc@mCc7 z!J|)7=C7r`an&tl%~k6)S8b!YY9uL%kHu45wW1aD{71^1{802iQ)b6sJrqsWWg$hE z($UC?Lvp)$+ltAF_%|9^dqul!5T@xOiI`QJRoSN^5v`2Xu;ddE3H1V~Szjw^^`BT5QqIu@u<(O?qmy;c{ z@_*KON_5Oh(n~4-|2t2Kj#>FX>pUeoW`*gKJ5R|krTnkT{EaS4RhE55#!+?gCmgE< ze8kbe3sI`?q4U6bIMP3bKdJJK!V6r|yM4iXE4D&X3r4WRJ5!0TElE;+u#@ECB3|ysHxs#D)|9V`qJ9SwE#sSy{*=afhH=BHgYiDeMd{iPU}M2 zCw626*+G6pLwHlkF?DMORX~En`}Rep3{F~S$VQYCUy;g~R^mbUG@_6>om}J-Ez6&d z^ud#UfmM;R{wu%0n(!u?l;`Gt^d#J>HcgX87sAFY!cK>>Su(INwij7v-J8IYUK4$_waUa-A|u)KHdeJ@}kJf<~R@m1QH0OR=6hTxpU zmwW|FBv-EjEasfPrL>6;TEg(@KygU;*;L0?`0SF?Q@od#K>g8=rz-#G*Hbb5fBfUA zc(eHjKiH`J*T2~Kul!(R!hX;%RO0#9-~B`-UanG#J>m0o4_NSG;LL*2iip3LN>J1%BZ=qw^!(S8t-(G}7vtm|r107b#uMt+=dQp{F%vL{LjJ9%KjNlAOj`59hy6opa_lJg_H-i-GL9pwuNgJopN zxeDHf7KO4-l5>B2bzKz7rBx*74moHNpLCM*TznB#$d_JzO#<==yaNi`&yzuNcE@KB zg}fQH3P1T(flOMY%`Dht(Mq7?mUvdJ1j_cK5-2;BK-7P7{H`aSswJL7D}i#Rq>aws zmq59Gm^J3sk_Q(pdB~$>!g;k!SjmWJoKI^4pc9nnY71yBaaYZ^7W{cj+)ZK;Yd!HIzX--f|I!jK_Vbo_@syT$39ThwGNmP6N^6Oi#`_-> zhm)HCWs-w&S*=Vem(m3A(OTl=ziWy6YAx{!KW>Q&`M9h*N$O1YRR~`x(B68+`|tmn zfx)bj3@mN3fx)Vh>?^%yUm3o&FYJFF80POYu)nb{h5cp&`y2aGez$@BjeRM<+ra+D zzVQ4hsdW2I2KG1hrOf01zJZmjpJHHwi<}g|xE8?lS^%?=os`4~W~)UoDLI1ak|UU? zMKHT$14E!oieLzINd_ip2Ily!fhC%J(?;K}h^K^9`ukUisiL+dNsFmEZAGxoq?oEt zUXhKqBHQE@VQon(!rGEngtaAx)E}&JwRO_H@0>9rNvXe+`+lU9U_ zCPjIBZAG|dk`r=FUJ)GA_j@EJ?U9lcXk1ZMC)8X=}6B z*2a_9hTD;}Hc4BXn7lS@YT|Awa!f=dW_c>{`y4BPD0d`F+mloRBkO|5JbeBA1pl=GKx%7cFVbqa}?QkTd4haz=dj zCNXEsujPydw4BlP=Q(4+q?}PPx}{DU-BKrw?x~YT53O|1hn&$3Ib$I$XEY?|jQIM^ zw>hKRk8(y+QqJgx`|oSkl15AFq|vG+jh@L#qnGv`g}0V7B66v=Rbz!@gx^2EPsbv4a7-}$4Q;rP!Gr{Lg>q!I4@fI>~gYqMVQ? zy=G_`w3fc48CpicCX;4o$?xc8POvl7A33x9$k4KChK85)e)^7HHqFqorx+UY$L(8ohnu}&=>0xMjG(*d)8CpKg(D22f#Bc8v__?9EYQ)OJ=d z(asbp=>-J0)Q0A+8CqT#T0t0^hh}Jnk`2v}+RzIA$k2>QhK4D8O`4sVQ|yfVe+7$X zXx3yy^VAH@OEWZB+)oXy@LvqA$oGbpVrNBD?5voqBz=9ac#5Hw&6pJwQ`l9Kd965o>b%&%EGUf@d%sjix(7t}1>?dO*6 zu35TAYD@P>9Z?IVGIXVsL9_G%uyhYtx>2)qQ?jMw9lmcvs>hEk-I8SKn8MepS-NM6 zrIVq1X@>5t8M>0aux9D#z9hbySo9Z`UhFTHUi{~lULwWPOKK6dREnXOhM`mau~R7X zou!vewsafK((&?|_AbWXgj9TE<0lbSa+@t9gnDey<7l`&W&f-32@ZJwJn38Vzj}0z+%?hooKuW1*Z0Pk`-jHo zpc&s!dZ2XwO=NukM?Fv_>09#uS3OWA>09#uS3OW=r%?JkU+tI_On40O_bn6kVK%X~`l6?lO)Yjs zwpRnPiwD#qgQN^1z|ZAdB)EFdj#6XR*1u^scUe%6IECs5f@%oz)Dv#N29&Tw+DFa4TKj zj6Hib@72DgOZzUpTsn1a+0mu6i>0J`y`q>&-I7bRssrcivy1ft0|M2&xy32!tOB}B zu^V!Wby#esJYo=2C(qaCR$t5%)2jpXiZ|81`NSdWM;n{mYSH{+AN5NO*`oHWq)Vr6 z%P&?_PoER>s>KV4;VPzZQ12EHTc}rd=?kchZFSky7OvuA)qbB?AlAO1=*HB!i}V@Q z)-jm>)LVUeHy2AkOVWRJ()iU6suCO+ge?gSD&~@c1qBvUE2v_AHNZ_=s4m>1vsay# z=)BVh2m1uotX{=8IMC1Er@mhW7mFJ5R4%I8x{K~=&m1<+v0m=tWJcR$QN8BtGsIr< z5Suf#hC%GD`cD#b#hx{Y8<-m4t)Csc)Fjqms@zNOsD@qDrB%HxVs^EGMXaiN?$#Gl zqb=eIeb4p-TKDSTt+m?IDqdFGkC$B3uAX8qxndQ6zu?L)u{S)$W;{!M-+*A>>J@@3 z)T~#-zot(G7dK14HWv5TWrfA=JWFtJ?V##jo)sAz{wi!9Eo#Sgkal#p)jGQ(SDp)lDVEUTTxw`n>Ar z95z{FO{Iv~rI}nL7Js+63sc?q>4Q~WIdPtP_^3XI8of_nHg<72aVX2Atur97W~D%% z>NIUDi+XLJzCgmxCVZ&6Rcco$@9*bgRp-3WXIFFW*B6cTDKC~_s@qn1kUHL1yq3|Y zLZTk~)$|Px=-Si8&9jcX8vjP`5!=0jc#b)@ZQZM-Tbpj~F2TV)={&fH8}682jUa45F25fDUbQOsgdyGQCWsl_Xc>(o$EnJ1OSvTCg=;-J{u zI54%&e!WL_`WSwJfx$KF1O?Zu7#!$Rqmmze7Eez#oe2AAIYggj%2`oVw^S4LYQSTC zaO~M?;&?m|e=g@zr|;BzB^v998ltbN?8ipN)et?^Vl}a@7CCVjb{3Q~s7?W5gqrJs zoF(>nfY^kovt#tmvBp60JXd2I=qsvIr|TS5n>vu`_CXRe1O*0H4sr<$@(oTnBa2qg z)Dd^7YwL<`>ed+S<>k8KZq?>3t~aZmSVX`ss@9siT(S5`{hoq4t+|v_owHvbrbhR` zDHf(gRrs4(C_VjA_0ez;} z0>NSju8z-X;~hJ;xtN*h0{s1}_wE!M*Fvn$)TZaf9BQ^!Vh%gsnl)+%xwP!srDrd- zVJq>Pnz4hr4}ZNx%Z0)3$`;HX(6L8BAh zfM=c9+HJ&pOx<@0NhSgU(B|E5TqjY+;Ydg_KJ-Gl|@i0c8Eqj88s9mp$AABes zt%Vcy&stdh*iP)G?%gAKt91&>nPOMB7lWDlrG@OS+IJMsI|l~`xOMB%wO7}k?kHOPS0iz07WMi)DQoPw-Xea} zja-syI3d}oujh&BVtx9F?|6pt{z1Vt>Q*O}t{IrPF>29)P@3)oG5;`U(GYuKpm>Yr z4fd-a;1gKgtxNOHtqlnu!rjHq!-deK52aeJ>Wio^-E1<)ejOyfVwp8lsqI&*j$aMm zL^CO_K3Bx&Y70G7{rYx9sC=PfZFN99v4F{~pS!zz8kl62hJG-uituJZ!ND%xY3OrR zpndoC^{(KTwCn1l-g=izZo$4jwS$7|)~o`5?4Go(YG{a*Sq&(q7uAU4qCR#(s2IxZ zYd5GJ9MmAduQvHk%Mft{Q%wi;=8P4p`(Wb0;2^&$NppMEQPaJHf2?&`%n*BHs5q9X zpv`jrSlw`O0&}AE2L}aL@T*v*2Ev4D zeFq&Z*G8W`_Efmoj;W9O>Px5>HtQT>n~bC=5bzkD;qWN&SYm`-au6CEIa(Z`mWdFL zs|OAuxGntzn%@|)lX{|{O~%-jW5gm{wJyL7O?z6@sYlo9v*{95N=hv z)vyZ%O6io>wbP#M$u!qE3V(_Ezsq6^kaA zVU@-ofp=bZXzFHJo_!UcGv>Z_&F~>)>EFw{ORSgAFv?qgVSj?OV2Q-YGa3+M|Zt z5i`c-j1t`iwc#GD{Aoo|R(sDBi>to(vHZg)MSC@_sZJlee5P2Lt9$0b?jt)$uIiWB zNSrDj6CKr#4|OhT9|zc5&V%}Nv0ig207XS3ynV0_wM z!T+zc_W+Ng>i)-fH`8_@jZ|9L1PBQwjnEX3bRr1}DHH*hkZd55MiQDLffrOnK#FiI zpn!rPAVqXQR6tQd0YSh*M^RBxK?M;J{+~0m6NbFs_j!KL^Pfk|oO{ph=bm=Yovp5` zDJd&0b=A4XI@Nw_g(|2o%xj@P>ED_>(?vie`aPhGk}$hA`ZKj7(IUWaP*++n4&n!ZVxZKdCT2j~6vQw-?P zW?^ASa!yWxOB2GpPtpb^u^f(yqmf&LBb0OlyCG()P(xR|?ZGtnx)Mw)wqj0;THBrK z^{t?K`hFwS#<#aYsug8nf(qXh620h&8G@4*Y!`OZqq4mn&DkNO(yHr92RgJvxJ3WS z7dz_|bm(m%SEsL&4}$4#jFF(aM#w?bb*IpqW|l%+tocdy!!8qs(&=@AQ}usGXlHGq z^?GnxUVdiIKvzmmUYaXADH9AneuCQdT_MLtqxwsI$W;dc7%&ercoDxPMimaZg_^Ki zNcEx*KM;!5zI%m3R`E7tYw|(siYyP*GG?Ngo^#Ze!ZP&8ua*H!bLmofvpXh*KXtBy_S; z+;bS(`=4PldbSmNQjbi`XYOGTYL~-8EQ_2@G~%$ZgjO9;qUp+EVWqn5h;YLy=ayAw z7eTfUa!UcSuKdJP{BPi*dB=n&>D|`Q=T07jOx$ol2vv6;7e2SznJpw`5dkhTY}rpOodwOh}U6C>}HTT=K5 zFptu;atrDgsx(#aIU&4ZqfZYgebir02~{={*DA3z;w%*Ym(B{uY1cU+oRou5Va}Zs zLe#kPg1?QLf2wq$q;DatG=lDZPzhC%tE%cUE6eKWXR_gf^6AA_P=?95`S8C0Il0X-cg6>LuYJDP6q>Rjg8Q6B{k=pw=p|6#?o{>`MVf{TtSr3vwIftrepRTo(&zy~S2gG_;V-M&_HSXMje0*JcA(Gx z5eligL<)4cTp0rkQ!s#Tv@%2qRQudy>9lYyL=Bk7Z2G3B6hZ@T2`clUKstI*X{Fk3 z3zMw$`dVe?k||;?rT;Gbym?Vfu+nb_vBwUtP&!fzo0zY2x7LTS(-*uAt74{2ETK`& z?SVA(km652*g#=Zyu_|_%u9^V!aSxI4s;F7Dd?Y&9Rg(`59^dmNdtrc$`zpYfItFh>LIYy;ez-&RaZk>?IDUkx6H`R%yA_{ zsZY*x#dl+(VC@hVL0lo_N#YG)0|K|Q31VKAg8iN18xE>_XeW0JqR#36POnz&q=Ha)N~D~tB{i2JF<4W)xR#}^+i z4>sFryct;@_jjrYKFkqx{{4E8xRH%2SFFobm^rY3=`SU!INDk4Y}?j}IxQMAOv%Z1 z4Fq{NaPVk)4p-ZC)uPX5N`KlG3`6p<&oGW-!Q$66ntA)i5J`j--q?YQQFmb5On}-|U-7{KR+CmO@q-Q1N_je6Q86?sH>!i$iS51UrU!WWnc=ZXGQ-UUMC^AV7=A9WE&(fOz4j`XYowPf1kunyfZ;&*C6tXOMR&&7#f zd+8MV-Zx5f6@utE1WFk6`}sY@I`Zu)wj*^8d?Yh&NcYg?4`K7n?uo^ibVT-53wnvW z1zB5vEXTrDa-iD3ubARRZ{ASi)u)ogVk=Eu$0lvEc(2L2Pe{;+Ju#Z1Qp6K*7GR=X zS!vLydusg61u%1Dw6ZM-{pUO}S0kX!_lhm87P{qQ52wqcU~z2B$M`j~_RGUq z$n*JPx{dA`EcS)cHZW~SR%Ws*J9A)89$PlFWH31L>qmuW=ywU4oD6D4~nHBN#%9! zno5wYhh8%=mw5#_G~OYGI(e0Y}+gZ+y)q4LHTV{YS$#n~(aLa1&( zWIzz>x?x9P2K`5IhTxU=wby5PuEPJg_in zlk$?Y@(T>hvxmC9QuMXi+2T#h$a59a**PB^~Emf-~h-0keHxn9Pep?9THIu{~ zIxtxZC1J9dL}Mn4we)TqdnlclEKZ}fl~NmZ+7z*bWmU$|p{}IlOqWOVh6WVZOFjRv zco~NBF?c@%*JG70OcnDQd;qLMH#5C_xQHIhVMJt2;v^Vh`=YVB;XtBpSHBstYJbHq>^E!ZS=q>tx{=}nk-vHN96 zVJ>Z%FNWIjqI+Vf$vm-b1hgDD8}shcZyLE!I?od`Y4>xYL`&z1ooL@Y@e~C*?HTmS ze6ZX%e#Wvc_ykPmonwl(`o(2iRsFBT^T!NHUW{$Ge$)#XE6T(@YobSc)J zDxI+ZYMzH7afZZ0OL|GMwCP!KQj_GQlmV$Z;A&Wt_RopwwEQ`-#-B||7ic+cFjSiU zE~ka!d%&{$^m%-|9P*X2v!vGQ))&NXR{DFH_yoy2;H+@nf}!U%7b5w8AD)?(*9j*CSfhYSlu^ZiU8T9he z2K-I{op8eQ)$cg^wDWbao?)BBZFK0i9HV+~7W-O#U9O?|*jOG%c%16qBBopEOd%BO z^IOGV=_xOJC%W+ll+sUI2@z`5HZjK*tU3NPUqnty*A$NztB1PtEhdn^xWR|Ei!Ibe z+j)m-YIyx|aHIdcjj=s@9GYOkPO*X>+XubwyPaaLn*I)cj6qGd+lWJ?-HFfDlW#toU+^YDI_#*U|Ij|4|Ba{JjV!wEguCcYo zMh^G{KRQ6k=b)0pqvJy{E~P2?91!0n>p`)e2K!?lvqYt54vKN~O@I_Z7Y~ZlS+WIN zJXS`7(`qM*Ouv;`OW#{LxLLMHfc+>Qs z1&O?mqR!qgfd57v6ybHlMTjIXe2}Jm&B8H`s)lyg&D? zIKHFi1k`*B#pOk{wVn0p|G!QY)qxkF&bKl-D^sc}OUuTjRIb7}iqqtfkpZ;(q1YO2mMcTVwiBos|E=Jkt z&-F^Q`oo|2MGZRq6<+sT6P-3y`CEL%Mn60blcA;nta!;kViA4472vgh#I^L^O>wKv zfSP^{MX35;oTBlPY_AM!qW~pDihRx~JP2syl z#2phD#s_{tMs&2U=Dk;^DJyGX4h7yx>?+*aK#R_Qva`&C&?*EFH_$Q&=Wt9 zq{nP}*DibwCfeUFy-g=?;mzid-XQAey6O~VpnxTpj55+IFp`-d$s5ITnFF!XEP2@LN zY&4{m^a9nO8uj;9Qi(w4zZPBU;BcwbrmO91PCz$#r>*p@l^$LQ*?#VT+(P}ly|mRz zJJAn%^|sY;G)Z=KoVx=oxrDH)Z-I7wAnp_Hk$%DEc5t=|7M`t?n@IgNTilIdoabc9ZP z4Ho@?wM9kq9$)R}_4U?H{4k#gwQ3c*2#4#0W* zHT?Or9fqlx1spKyK8Z=LH{b`U#ms088Kz3!gIE-X)p}r~OVJBW52a9&$PjF2=TPhu} zE^*oWs3l`1C%*;zI(1J{N?uovKuM$U$yit_lZL4Fhop5@x;ajYZE6JR6bwzyquw_W zAToWmB&*5g5)S{ggEvJ1X+2sgbyBdpT9pV@LBz$!l~S>dF24??vEz8@3F=iRY~YO@ zNI#C3=2FiwIO1j%L|s@T9kr^{>ZC#|Wo?J~eRP7fogRq6A(^wU81(8>6QO`)Bhp-5 zH%V%XFbu0bJVHBY#L0C-!~qUq5pe)-LmK-T^5FvecCyqA$5+=OB!^pZC~0f`2o$D54m_eibj)?(;Qy{AcQ zbTM84;d*`=;vuP80;id0#aYXD|Beyk4v@ImYSo{88J2jt!mC%muq5?i&Y*cEt`$0DL$jbP{EU!)6(N| z49TlxfA!LnOd}K1#g1y%r=*+KP+qu{beQj1h_wRu)O*mqkh;v1-iy$6%^G*PyQtRv zf2y1G<2&~!RLd7g>B9@*@VUBB`q)ax7E5_L-TuG>k91xPA* zeeR{OW$+>=gh2ztDNP6sUnb3@@V*d{P4+8o$+jHAW2Y5{Om$}|NUdKkRe9+=_v8V% zHk6gv%l;pW0S?d7vEL=@ELV`l@_rhYWrFkXp>&WhJ1dVR0Ap)uVhflddV$=A>hQ`sqS0P>?D3O zWIRmpCbVcOX5H^WS)}Rji-KCbQR;#Ks7=y$OaB2AV2(xaZ3Y87{~M(AduO5D&EJ9v zII=~GRaj?Gw~PP?T-TDlv0Tl8V*J^`h2fcocdDaJ~j-j}NAh|S(seg1t3AxTgyL+Iva z=t_TmAf5Hny{i>};Hcq?kEKoO>U|PU=Z>zH1H$2 z^3*3%loy>@Cbd(ALy{kK<#S5=4u(G^6=F&A1+%hq$J~k6of8Rk`v7d)afhY9vC?fp zRO>!RPggC5A0+Z9HY%*dZnW{J6cu9lUk$faL_$nrOk4yVJ1X6#e@f*rR!3Qz+Ol1Y zqWYa;Tk3XPste^U1`m zV~%L$I#5~rEm$&+zEIDfmwc_1cu5RUW4@J++DN`4bs+2aQXKi8#~zFS9tzWgGjSf0 z`@QrQ9)cXgin#TVLPtdfpLb!VI2kEqxKL1gAgq}VIs(Wsk(n=lilVrtY zX2FUcby&6|E)&}FQ$KU!l3c|}M?)ao-o7L~r@N%w=atcF{x4DwtGe}9X||Pu2Froe zXD#fX;4at!Z?A%<{ejEUkN|_zv#MoS38ybhdgxZ4WTlN_(S5HeRQ;mdnnpb@*sY0l z{-_+h^eQ%D_FU{6&6XZ^MXFFwU6I;b>AiJg3`PGTZBw93rsWMzOQlnPNK5GHhu|LY z+a*SDbeBK1%@W&dr{T#1aueZIpMf!K`&0T^&dDvnK~mn*Yf|SHNx5Lzd6~KWUCBxL zX-?BSo!^WO6&zIB1*Rrx(xo76py3(D`dB}J2tRushTpVnQge0rHL0VOrfpGLM{CMz zT6Uf*Ejyuyeq6~ALPvU7H18OKU=TQ4IflOZOB$&w8-6$hVxMK8ntxroh`7pcu%`Fk zkP;QmQ&Cqlg_82c=011(DF{KDLG;-TDPE2ENBY`Ib@_5<^`Dzksg>65$FUP_6WY>W zBcV0CcnglWtG+O^cHWW_D7&u`=>^k+4T&}sbXz(nvI})G{drqDLBl5q&LxNBqq^^C z)HjfqE3I;fmwHf;m)rEPmFzC7bCzeYV5%Y9>A z={U0=;KFicW@kR2nG4Q%ogu)x?1?Mo^9nWxi+jjfJ<*~JnW9DE)JKLI=_|+C^w67IVX$4x{N)F=2!jHS#JJ=ypQarmnC<>% z@-}9vL3HLiqI##jF7~1CMSE{`ZGhaxO1|wd^5cQ>OEe`&ZbicPh|bv@B+s*|4}{2{ z*r@6uh=qYI;55nw`A}I4Xct=ePr$bb|501We`$UHt%J};-Plr&5~<=_$iCxFx!g)= zTcPPCMaV6+fCBcl7v?s^0(Vm%iICy<>-Ls(FU@Etm(hZ6p#p@qm-kz#%_)Q;xq8Y0 z`FcP{m%g5ej(eS2fCpgxWCKCncVWbjybHr!Q_~nDVIq2uIX8)upH+VuBX+lX+@g7j9Nwozq@o4v)WdOdtQr|F_qNib z?O@A}yZ~~2Btd@A8pI-pgX9tU>^XmgF+%6M$|q^?RmqROOoY<|LA^L9zo6VtQaAYw zwQLX8+N?VQGKO`RE9j+maJPQcU0zS?y~Jo*)bU<7j^md3dP# z*dM$RKCFT?&4#|&S`4RlJrRWOtK$5j?jCHuuH?3#%6sLnWzSG(%QN7D(_=uF5BG*h)Pnd&eg`JLvA5iXR?6t@iQe+l{}m|? ztx}7W9NR}uw$hi`FtX~~$_|-Bt|5rkb$#*Gd>T{_3pU^rC^rX_DTmq+J-Eucr3pZQ+tq5hO3FS62;pW%303j^LTNPdBSZHEJ0&E8#-C!f{!UffCW zjhFJ}JleVy5n3nuDJ|72`SQbvnJJW4>mBd+184(>2>z5Y7!>-_RVY!v4VL#BG9QE$ zue)ix(v~6eW8{nx<7nVec>`_zUg)ge7%C@NY2*(|0*!tczVChy$S*te@K!B!@S6uP zw^~f{m90v1wRX5X#YWfs;S=ofpnSmUo1CAQcPF^GKV3d6229jSgrnt+&Dlc+nlDVvbKZH?oE%yd{@Nd)xU?-PBQIkQb_lh;s0>i|j**XB=@-S` z5$}V!S-l zO1rY8;KnD+D{JID*a+950fp7c2WV7#gx&sBC!e&@hZiyQ4=2f8HKI5i3x@pHB>8PC z^+d1KEmPz|YwMh3P;6@QFc(4`u<0itzO$#RE}8?2Kzca+eu2Dy1kYaai2N}5z5&I% z#Z<^hgs8@ADhjyIumZYl11Z1$mDEJtI90xi5DvS&1Ff0{PBUk}(1kvn2KI1HLKN>F zyS)d^_yq#?_B4>^uf^C~Fc)`s&c>{Xh#_94vn@&#k zZz#f>Jc{+)2;EK`Ul*#>?;gkZ^Xa-B7Dd!-*~> z7_&pFwmod3pXbQiDGHuE%|n`;irD$&0d(FAgqQO?;*&mlN*+u-=3+{Qp-LJu7tEvY zJUNX9Y=KSk&OA7ol=<=%vaS{S>3j8opTJ~_pO){ZmJT$q@o9+MrNvN;kEqyrZ5GH9 zeO&|RfBOaUQ&u|l26i?A6Q=4XT2F1p949T3b1CR89Ghu}P46uNMK)P1cW#!QlM2tg z$IYb$j?lONDpBg^i{%fk6fVOj?1?gi3yw)*-4eM!{dEo@wO5wNqjjQx>L(?{+i(=Y zA)J;^TUN^<>ZGOe132GU0~_Tu$+wyydUJ3Z(_4y@PCP4*r&T|}b1>jJ`3jE6pb)CH zFUaqE(KqekBI))L1j)9al(wGuixk?u2zDj(Y*CG0AmBZe)tHw3c`EFEtf#LYq zz=FJlc#9{r!V^&ur3F$%)8{MYLvVcS+s;WJ4o0lgg;nw!zPVXRg}B#~nUz^E49lr5 zeObQGMq9_hls*5Om`Ima%Q=*^Mjo!dzebL=8NLU;tYP>btQRbI_h& zkdtdfPISX0`k%#`#C@Vf2C@G~yX@9K*JC@f9RKkrC6k=5$&=|Z5q{vyQ{jBr_?q0> zi^5-**Qm!|mtm*DJJf;x*d+g^-r6iX;Q0I;?(3dgZh>PzY*DJo4Gs@##igpgiosC#`#b|d)iMymrw=Sb=iYkl8I&0h$%WC00 za3&(0(uD>(Fw_vGbt|96Um#{2+t zF8C6pU)V0W(neF8K#7{WM<(k1K6GG>(cFItTC4N{#K5yFl~y$7138jD7%SYXzVLy3 zkCmRA4X$}~uUzGcLtlIeE0_F{+>2gp0v`9sN7%+mh45GU_l0rt!bi9uvHlWNiya@y zi|MZi5y}0}->?mKd@QHc>t_MFL8Z%g+z5mJ?hYqmSE7D01%0W(v#gzjBqu@aB^4la zq+5^fI6kp>B1dzf{A8sKj$@saO?`e)t6{(9A_TC9Q`1AJ^ESod@CeT2{9!a|7S14R z_Q~m1Dqjan@WcJ`Zd(V>DIFWW7Ok8o-c(lxwEE+j5ol)Qxl72J@8s8w0LPTPl=$x20``bjL%)~d=G^@QuxHMLQ|6~18+pSb^*MU9L9rSV9o0U&Y{|VmLqKR#V<;PgU{zM-jtLCTF_c(t|Vk?941<=_(hJj z(!Kd&o5oi83%|!c5sXbENeO;CW zIoDlNRz0>>zsY;zCOELBv_H$0{&G{s5pYxcaKz%ks(9dEd8XF(peEp!r~U=^Thr9u z9@0t9q-H1Nj%w8{R_pk-B28EY>*MBa`4ZJdf(;`I*>A~p<$)$32lhEBJT`jOF&}cSA+S{m)dnr%a0vq9sPsXFo+)g4F?$G z*W(yk8I3U8IER9xRc+6${S8X-+9t|r8@qoaSzjGTO?{QABwq%zp6#ntP)k2$zk170 zk>OwCTZA!hLWynF4A|?vp(!ReQ*aV8J3w}-wE@a99O=9X4Z}BBxlXUVilv?UCLAhq zi1LJuI$egTKfk#WY^Ac7q$aelg;K89xoHcutK^nwQnQ^=hRM zC5srzZ>e~N?b!zXW?K$iMdE0v-58dl{?l3+Yt^*LmM-iX6W6ootP|&)=}EM( zn;fjpYNNborJQhOe#l+wNw&wl0vlTvp?r=YZ1n5$`*Jva+g3S4i{8Xm-qTKbfV#C; z_KB{_x~j3{_Z((Mh*T!hqDW;9?L8<)sm=~?MyW*|mDX0D3{V7u=2A1$(_IBlb!I2! zL7Y*0+dI?54q^}Wd}jrGcK8q|xREhRA9{5?T;5wB!v@$Iqx{s)a5Cg0B0jqyN%Jst z*MtK{4e%fn<7o3`oV{;|RTek4Gqn>CC!PHS5#ygoxLjWprm~KdhJ1-zH?G49HVg+^a+(7$_N$9e?#! z;AX7ts|=<5D@r@{)4oiildeFAN$IDMoRgo6doFqEpZyf*b|K+ncl`!#{1y0m=X@qR z)U(M7^u%@?zkE1VnW)yKDQ97UW?<=_$xyzeOC#k(7;AZmJQ0HFrT&PX zr5CTjbP1n}`SG0tH^sV4f=&Aw}u$nZ9#s{V2^qm51mInJ4$JZ z;6(xas_AH@h|XO@=~sR1&8T9ul0%DB3~0e^#CIJY4d<11Y&G|H@Yz3trBF&JR^Cyi z5@m+Q;c{t#TiHzW7T`>{-*VUxRi#+3mJQ6dFhAL4Vz}5?^zInt6*gQtvm_3piDN+| zVSj)o7mZc+S?PfQrHwl3A&gqxI8K4@P0o_Mlm34yt|KGVi{;9F0{!CyX_Nd1$bQOr zQnTnKHjdt8~Yd#YDMBKp-SGW$^A!Ki~^m{JE};Wt6~ zhLR>K8Qw+ZlZvL)dhVlAs5kWC_>bUDcy6MS&*7SdIFC%%&m-fzt2oFnX*l440@77K zr0PX4O;Hkcf2I~CbC*9e4)z~U)X^!*Y=I8`p>(0))09fO@rTkgm@mKd#N8LDa{9#| z4WQU4Y}oVDAaI8J+7aTIj?GzHuMDPyKOw#L*DJ#*?@uMyxE1_jJo5WZhjY;DUuZi& z&BVRsHy1)Dm@-{i+UCx(@^t_lx8trOjIV*IY4D{ZrrKwQ;?MiW-h$fvM>#^P{=`II z{*SUtKPavG9KlA24Oi&wOl1`fIEo{qzI^X?#r=YyZk?s|X z^}kNiH4j$oRq&06XDc7;JNH8sJ4>U{!A~l!?*u7>RpQbWf`-Dof()L1Qn9PAKBRtQ0}!+mrVE_rz`>kz*X%aQeG1hY2P9xUTwKpnW8yQ zL#gRCFvB)}IH}dnM#_2yI3c;@0 z_-S@i!JUgC9Lx{?{{lq#x)+oa{7nsf*nov=0**+xEmM}M4=q#;hk9^s9vb%^%S1JjOqSZ`o>CtLms|YmRwi5DZ$toqdeS?tij~iL$laEA5 z`U2Mw4j*ySrcfzSJ-Z5uR?<#WFbck?KmXagU#%C8X8VRMq6;yE+qU+32iDb(a@S zvE&z~q@?BNTM9MjyzU@Lo=`i*qD9bAi^Iy}lz9aEf71~qyqT6?37fE?T6M>9X@6w25t~oX6(5KEY<1soOZfZ>SSCl=4EDUP!m$ z&~8#?N&ciVT$0geiKbsrT3IvsPq_20`VD&yW7N)s%ZkU**?N}tL0p-yH;8SXj{S+c=g z%d26TP>YWtfb^)J!yZdJ9QF?abrUY7d>s5CO!K%!Sx3J$u?I=HMKxu0Qz+F3sPFsO zdy&)EelPWw>`m#YuRV(T_#tfT_fUH?bz`u-rx$Ho4J}M~Re70e*DAqb)n%2{RT^pD z(QocdM#DOVs!ca4u!?hDS01Lpo0PrYSfQkJT=#VK#8q4By+vu|&}od9pKiUOv<(Id z5b~?>=^0D$gqj+J?x8taxs5FaRT&k;b5x+kJ@b_!3w#tj>WZC82dTncQCvNR7VlJc z2eKil-!#>(YO? z`Os(YDhWQoHMLIH--U^h_@2@~k}J|VgRyz4C)E^}kHd|$$}yNS@Gd~~7dLoV}&_rHpu7@X4y9meXSUAUuR+kxG7dY7`o*V8Vt(`uOTr|wn;b>@z9xPMxz$E3uO zJp`-%J*Xi$d8wA1Y7S}Qe$w(CN-Kf=BJ{;>s0LxD9WBYa2N(W$TjaUfXMv4I9rq|< zfu7d5wruTlBM9A~j6F(tNVUcdEZPK=;95yeWkwYj8?y&>zW+A#fFIvhTHARX8poxk z+m%iM+|h#6D`QF8sr02`e)ccyIJk{>W#$d4 zr2hW)E>!PtuMm?m^I%c^>~D|OIyZ1IK11d)CxA%-&2WB^*v$SiooZ&^Pu5`E+UpZ+ zx7%Phz7k*`YxQH6mHvR%T}_lw*C6}*jMz?^Fo|i>M1GTy8dqFZ;>H(S3R3yPDqr0y zDhH=2vJ{Q3!nP?d8y#Eep2UA#?#X3!F~#(Eb10;JTG+!gjWDaEEUb1CpHXW#mfE_S zx~h^=T$RM%Qe5Ll*tAEYIpZw&l2)n~ya8L&^Gc7lu!s6+cG^Bj4yAn4^ z$5`ry7FTChmR4EtH>IKk6=s5gRaI6ZQV$_5mpj4PReaVFK<{?Jx+ZqEcW8&wOwU{* zw+OdX>+;;i?y`y4#VJ+Q`4~u9v6~Avr)iz-Qc$_Oa!lP=#?Gw8F7#Ai^|y%1>-@Rdq};H>nM7WG8!vaP0gE z<#p(OMH1o+C*pDm<`qhf8)*6*_;j{6ujelSzyZoSA-AXx0@0wBLU32lVDv|^NLSG;2@2QX!Gw$MNqibjoQeDSuhIV+XvbPtnsL6 z+S*cLM|)4HdV)5*?H%pWexotlC5RE{kZ?w!a~8Id3~v8GjD1LJjaz9P)1ti&fsA&ijCDg=O{kzPCqZO}iOIv<0J8Ln>jSJ*!nTUX^d``U~y%i(lL5#`UYaA`?{Jz4=g6~(1f639t ze*wUY07v03SG|BXE^~CK--lOzdg31^8*mG}8$IFHjdaE_<2g-u+#3TgN>8^KW%~>I zD7cpf&IXHx0#-PJ>_$QfZCU3CXaMJu{|apWQ!5>Teb?gm@c1dfzfk;RxBzu>(IlUy zv%DU|oF(}t zm1t3T3`TxW56o>bet}3ns~y4j^ZNqiIgxJ6Blm^VHzS?#8>jC>ddYvKQ{`$$BrSN! zAp~`nEXrQ41pl!7mdk)&p^8}&RRYg8a>%aZCv zeP470-(wWwk#VC2+!OD{6d4sD$-*Pm@wj|sX0-r9N5$=s&Ug&-!|!I;*$8HG6*uhvUVTj2;!GO&2k&7C*W&7Iuq z>9o;_i-2Fzs%xly6mQ;^U zI7@sCpJaMM->uvPx{GCu(6*z!Gk#&Sl>^&=_F#+FGsut8mH!3vaJYHSpN`@^O)y@y zZD8axY;@hI&s^S=-%+cO6P);GuE3x{qXI=^vh{unBj1^FGt6UPcsu&XRA5ktk$&ob zq+6Q&_mUg+G6{3HJaD}R@Zb!D2(6(8_84kHwlpgIUoelwjL+|8xN-TWmZ5heG%nB> zZd}3thUvvu9EgQp<`A0Cf?#uEN{kg?m>+!w;@<(-4%yrm&n&}nfD7<$%sA(9`YfdT z>9T+~STDh0u{?t`o)`YaNXMW5O5cuj&*G0j{%(NAFd04on5*D_44(tc#AZ~_ zxSW0y=}x>Gc&(b=-JF334z0ui&wz&l=I)|ggjP{?qk^2t4NOIPl+L*rd<9^?JK%-8 z!FJvjB~_Qjj64=#J6#r^TjvnMIc+Y|m?0PgG1}Rt6=g*#$SPS{Ap;#81@FF8+(@V_5n7ihvBb0uu=a-AB#=dc88aS*P*6mzF0a_ z<&4bfuWDz@1Gs@pN!{JAaFkcqhF<7vQ|1$m^+-8G{P|ZlI)1 zj<)q!aZB%JclIg6{Q;Y4iYJBBtC4Q>gyFe>d9@AN;~sMQGNhXq)F}T7(s?l$zKzFf zu~E)?ho}v`-p>~rVxy8=Bd7CYuF*)}{6Fxw|Bv+D|08{0GfRuRx@x55!f z%vRDksa>$as_*P4PM?hQ5vYadhv8#@&17x#pec>t=x8Zc`va90ZUh(N*H$6muG-Xv zFxVU5SXAVp9}M0?yOueE?m3LiSCGjHB-hCBS`(}jk9Dd~Q*SNb(#&Gnhgw>LW|G#d62LOJ>1UCo#RwH=3364kp0TcWn;IB+@1>j>Q81*%?#K62n zIv%Tq8;B$K7DpRvXL@Xl13wH+`?oj-1T{64`W;A#R%l8Tz11dmc@(zvPgH7?~8xG&rxsA$yWx_k6HQ9yDU_DiD5BaMXM%a=*s3+>XPIEmFEGJ8F|$lC=Pxk9oWIrtYcsw1?gR^)zQDtykD(nb zTQl65`M37?S^n0>(1(p-JxMRJ&jfQH*f=)lWA#0cpT(PswmAa2usLc*S=IB;3LwrEYXW=q9fjo>V1z1kyKc43VfX4=88;%NLk*OY%0`3&Qamj69o z@&GfV@Zg7O30i%g3J#dMensngA2ybB6rJI+kz|J1I5J>flR(zxwMW~<*n;(JFzHEF z%WZUH4`3F(1}X0|%4}QJnx(R^` zuq9>`=!ydW0(RahV1WtUkk9yRsTuewz;6whhsh0aK3i-?eh%`Z0kg%RcK|<{m1{!a z0&LP51%{)*Fu<%p86zw=(YR|*P}ptwi%IvF9E&nXglm( zB$Xk_V5?k)%}t}sVdT#P9K}U2%S>6DP5F$!%>-Wn{+obPY5z`mysrZM8(@j4_)yr3 z0P*OH#&)U!dtn!i1l$=3Msu@F`P>|=j|Ti;;Nz#T?^?5Eck=5ss$j#`XdoH|RsuFJ z8XLGqK96s&3FZd(nPAR8W`a4N4PgAiqtDNU2Dn}y;l+jo9br}@z2q4ftmXO1am&y*MK>n?Q;W0e!V5il)wmV zu$vGp{Y)_D!+^gle}!qDMqr*8?gu=cr}2RIS`0Sqr4jaC(;UnaD0!EoSr@kdjW)Rr zw)+j32T=l3TYvm4PigaJok~mIbF`^ot6$I2r|*CXUW(Swp*JQWpusx6E<`SvdjB%; z8O9&2_uTR;rk1y9Ew^T`g1N~HCX{#eMP*NefwC9Xod#^;(Uw0=`8;0sL>TzTfd4mO z^X_!Q&0yp+K6@w(n0r}Zf{`Dixhc#DbMHpb{1y%QG-Eg9)iQ{NO05dHD9^znH985S&8 zZu2CtvqjI>mp;`5b3Qv?%=slInDf~Qb0;5iW0om_5!fqp2LaZV3FdtE&KUU&vscD| zd4zGM5vE}P44Vh|tZ9J5@MD7wk1;}a;usZj1MH+R!|a?f!@C>7aK_w~&psFfpF8M; z-$8%;EY_i#22_8}gyTY=&I3*bk|8LZ@VDq?bQZ^68w0KcetW>|$1w1Rn(}!J?A9^x z9|Qi#yYcHS3rq-HfE_9voTU)(bWepmYlltw+yV9>;SV0GI3(YU1IoyN2d$+i5W1rv8)k1-CxgT+Xk0RQDqnQlo>_1O7@f) zFjsNTRHThwWP=H%BWye~tj!esVfy1|N!E&Z?}p<{PqJFJ(vi0uft^h$TfxQk_e4$M%6<@duBW#g_(sd*b_9&j6KCoi)}2&jCCYgW);yNB*;bM@f3; z{Vby8Wx&TFmpPxyZvkvPe(2V_fX9PbvYhAq{eZuQPRcGd!1b0hNZ4&LD)h4a0=O5v zL`DHG)Z7{ddWolkP{2*#@WVdAQJB@z39vuh3~U^71NQ*_5CdY{i{WIz_|@hH`~tvo zLwRV)Wk^_!9&&|TU<%+XrUJ78XJdp$hZX`}0&fm0Y>dAe@Q)_^ZGgWu!Mg$X^eiM! zc`OG2w>COZj|xs9;Y~E)^i=pG;7s`Xj0SEusz8Q;z5_GT&V%0!un2b~vli}97~s{I z0Tk2VXoj&NS;%sJ55W5|!#tz)oREtIZy*>2$^rMmj2IpG4H>&Fx|H?@!A?Sc89HoC zIlMd`_c$7`SuJw_w+Htu@HDs_@Zac=F@u``duXU0Y(})~L_(a0R{g;I_5%(#rU)JU z8t{*p@>e_+{tVdPlz$uW49o~iSRPO_7$N;Yq)x#8%uE3rerU*aO9#M(nBjda*tkG9 zB=G*@DPk(`5BLgrNtUO=2LMB}YapUZz~NY9WNYQ80shCd<_iJuzeDAg6@arnEP>lw z1Go*>$AXQi_$?%?!;~9K@E%|{wxO{t_W|B-%Krv%OH+sb0Bk%?yohj<|6%G-AmHZ! zCnAqK5CPZq@(*aas6i>CZ*fQ`qA7dtGp`gk;8?9*T*1egj$0uC|3Jpli0nt}TPcQNG;1H1>j zMq|z317iR$H!W!`;Ek9OgAY97js4dJ?)$yy4Nu`5AS?vYaqk#j3AnAPfh~ZI$BCCc zfWN~o>4$g5KLEIoXNnm<3ivS$&?9Ut=k)T*Zs0Q?_{AIh?aZu}jthHXbKlHUVCU4sF0Y*S`nwI<&`(j^X-4 zNI2~gCd`OVas^I991E830plROVVC>~_%{~Yb z??An!7ZSWo1quM)>A;oSBLMFJQE8kJL{$NJ3aH%JB{Kl8#0>TKjOb~=S3py*cwji6 zERd+07m-H{We2<$Em)Zb>aW~>8wnju9q53?{16Rx_Ec~H`DvJ9tpg}^k}L2$PW*-I z$+87BVJv}+^5$I-1o*0H#v%cSgDACK!tx)kB@2)mD!3nTdsBx-0N#iK%;I?jV*x)3 ze1pg)0=Ap*mjIq;BFYy58;=t&TLEVxKMLQzGy1TfGMwfNz=1T0spV=AT6<;-Tgn8lqGW~qS z5$*%DiQT(Y#1_}o#l=+7lxTa)X0_VIL3}{5qH97aet{kF(I0*8=%$pHyK0Jy0VS2$ z0;vDz4nL|+vI(>dnKZQ&7s5t7HDtUwD{^t5GrC z@c|#s(UP<K7p?! zShV1GJ%k-MF7k2LqN>IKDe4PHJ}v&j5z(PkzZN(J7jrD5@s0OnzBi}c))?LJhB$V5 z?+Zuv|Ks9!*DkNenpVCnrpogFMmXMgl~v#P($UH0oq`(*HRC<^dhpp4M|XAb3C9yw zfBZg8+2~>ye(ARiKX_bIG=)x`bl`)^`0-U&Y0)@0f1}e~Q-hma_~Raf&y~AtT&1`O z;>ML1Tu8ZdOUZLVq~S&d#h-G_#SfAc<9d%qW!1PVR!i@ka(vdTwyLylQc(@pQHCES z1`W}i(+(H?aoTY|F20-E#_hb`XB?G1m=GFW?ZAbDMpqE

© COPYRIGHT(c) 2016 STMicroelectronics
+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c deleted file mode 100644 index f521d68a..00000000 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c +++ /dev/null @@ -1,101 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f0xx_ll_pwr.c - * @author MCD Application Team - * @brief PWR LL module driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 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. - * - ****************************************************************************** - */ -#if defined(USE_FULL_LL_DRIVER) - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f0xx_ll_pwr.h" -#include "stm32f0xx_ll_bus.h" - -/** @addtogroup STM32F0xx_LL_Driver - * @{ - */ - -#if defined(PWR) - -/** @defgroup PWR_LL PWR - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private constants ---------------------------------------------------------*/ -/* Private macros ------------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup PWR_LL_Exported_Functions - * @{ - */ - -/** @addtogroup PWR_LL_EF_Init - * @{ - */ - -/** - * @brief De-initialize the PWR registers to their default reset values. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: PWR registers are de-initialized - * - ERROR: not applicable - */ -ErrorStatus LL_PWR_DeInit(void) -{ - /* Force reset of PWR clock */ - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_PWR); - - /* Release reset of PWR clock */ - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_PWR); - - return SUCCESS; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -#endif /* defined(PWR) */ -/** - * @} - */ - -#endif /* USE_FULL_LL_DRIVER */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/stm32f0xx_hal_conf.h index 204a06e6..daf0b72a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.elf b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.elf index e67036230b655345c5ee9addfc3c71a3874eb273..8b3025679c7e1133727ff68dc6cfcc158288fc26 100644 GIT binary patch delta 170418 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℘^@I}8HbTipF>;c$5lS|S)&rG^P_j{6*vdpG*(j!Lj%>p(xhTdd z6QSgyb|9ZJ5lSwKDLbTzP;yc1Uw1~@2qhbJHj?(b;vl}aDy4n0QN-u=URNA{LE2Y) zU2$wcmpz?*a#7zP7F<-!dK@+Q7a4qySwvzv8PrAKWI+F3&W429J|uchCf$MG0aszB zh-`WD#-M>-$^t~m;)sL2X;21ryXD0N&3DQL=v`#2@L|jgxG3Ns*r+%VRVnS0jk*>| zq>WIrQ3RBUP_j|1*ODeeLtvxi#G^9yKW4GyURNBSvJhTmkc%RqOoWn)BBV@&hNfqH zAEgB(Y$z%B8XJBxgqw^chBD%_Q9NT%3T`sUMsfO-iBPanQ6^L-LdivOqgEzD$wjfz ztzCPK+Z zO#-A$gp!M5h1;ZwP;ybsr%Z&Biz1{Ht$ zt$=vMy5%t8CWA0*moP3e2)Fuh8BFAbaFMYF0n$V$xhMk4L@2nZOfmxyHyPZk_$tf6 zO$G;>OTvSdD-N#ToGT7aR?Za%t5lUg;AhIY;$TQ6SFprTV9FDCk6B!)l^HH2ADzFH z;qTzLfXEca#e}ThQ`#pR#XTzLisNVip3Z*39{L<4|A#vJrBU~p&>2Wkb|Ppx_qjrn zu3Fi_8K{Q4FG|QNyMa-!NWdwZw-_uLai#*4R?9fJi;6+j|U*+85 zMRseWzC|R$H9GoGk>@cI_di?aYa^2Nxb`O_TqL_{g#ON+)~f!DsPtlo__5#S$JTnW zjVjjc(FWy5&p`AB6n(IY2G0+kp2M|ep;moJ#*6J8UxsTn3ppqY!yRaKyBsT8gdDjy z=3PIyl*n&vX&w0u!E`B+&)jlLX2eFMJ`q*j?X`1Dt5$t3!p=q*=i)d{6E)^)Xt-8y z3vaE1{8dR2qDV9P5+vTrm&@^j+0jN{g_kQCaxGqN#tY0jFmJ8R{qTAOs_ev*(c1yC zouhBV%e@S_3onoHtxOp?usU0q~;@K9TQ`pP~^yMMDC$yb|RT9a2p@sd|hV9p_ypJxxUx zhPuFI8>cHM8fqeRhJq3f9cCD3s(i^%S8Io6oCPb&z=#Uxua6<_Y?ZQ7D_~8GaL>RC z^y9kmUU(+coTHnMV*P1h3Nr%x6tfWp7vbkzKRNujoQU@@g&Bcar3{w|ZuAr2*7R3Q zKw(Cpy_DgRXz+`W0hYRmO%8hQTcUK|67<}+MCraIsNAHFMXa!U7 zb28o}nwS{+(62(Iw4;!0L1KN@mNv}FiqrBdAJr|)-$|YRib%}Sq>+a(Oz&1rGmvCnl z@Lh|3{04yb5CM6+3;FjP*#}Ks@4EX+2-mv>rRZ5H(#f9Xu6NyooCPdZj^)8IzH3ol z@4B9g&?v8W-9@1^Vw@;%ciqJUIU1Bpu)Kmb_~FBXGjKi%1_n@hsl48GH#olp6s26k z-B`?bI1a+~F1GuV@b0?^EtS{1?#<4-AX|!Xz3Xm|$;3st-gUj}-6GuXx}J;BC~tS& zTSHAKq%g|cUH7(76URSN#Oq!6_Tr7KILhl?*YjNx<@K(6zZ{E-D6epoNb5;9GT@_N^Ow)jr~nu;iwa9@xmG)H;8>v}FiqrBdAUnv-iiRy^*de?nDW&@ME zqrBdAcNT6(%={>Ccip!lTuuw4yxnzu7oq(m{xM5``NJvizW}wWi4b?|Rog z#BdnzP{Y!NT!K@gIn=OpA(vIPp+f~r*T3C$F6x&-QV1qm zz;h%VYFN7d^{zt=OBZs90}waPp@yaFU++59uyi4pI1F)99BNp)kV|l3PjjeY=|V2S zrZqd;u#vlvOE9k0p@O9gxx^93*X}^U68P_5?>f}5bRn2v2fH0=Sh|o)q>xly@4C3& zCBA#tyDsDs#Aok%*TwbjiAd{R@4C3&4WP^3?XC;C#94@ya)~r5@NRcAHi4K$Ebhk^ zpA9f?G9<`wq**Rg9)aI}dt#z)?VFN8{@5vt+>HRa*%G&~0D=DyOmO%8 zN(Hd0LSFB>kV{;O?y2it7jlWIoKLy#A(tQkRm3KYwST?qP{Y!NTtZGfDr5g+77JFl zyDn~bf6PKCmvAAM__5T#bEskILNLL&fI|&SH+Q{TKq~4yM96IjSJ6+pkV{+%-q)dA z!u79r9m*wK$R#*?mO~9o7jg-i(4m5*3%LY0>Pm+SmaccZn`w2ZVd?tUyACxhT?i)V zBxAlq4NDht39g+L4mB)Y$R!A^btso`A(tSu$)Sd&3%SItXxZ@&H7s4oC4LWRvqJ?- z*T3C$s9@lg0!Jr<%7Qm7k|Y4-_Jg^j%V!=ewk^)qEexA{F6jp(BwZO4lV} z&vi+Zu1mr*q>Vurx-JQOu1lhHT@vrsVXDP5OT=D99`KaC$DQGh8+rR$P#Cb|qPVwA2+!YB0O zyA~w}82(XthW)Uj^j#7@shr(TMd`aFe9FM>00u|tyCi(7{GzZjO5Y{n(<_ce302W5 z7I&ruYNB*q5yk{^_gxaRNVN~% zh^YSj0V3Rv7R0Q>0K_cP;nH_W_@|}{r;=vO+KkvpDl#<`17jbh>yn7)x+F^1B@xec zNtCWjBA)A#C|#FCr0Wv+pNUem67hVOL}#Fj5zlu?l)g(Mp6`+rx-NYoFul&(uErR$PP>AIwH z)YFjv46c;EODd)Bl1k~jq%zNUN#ys&cH|DQh{)Q=%b^|M@FgxqULC-9g-emwD>wsI zlpaVTI|gz*Dx>s364^Q6Jd9F%lpaVTo(GaBJ&;7+smNT90y?AgKoWURrt6N<14+d5 zKoX?~l8EPlBuWn?5zhljlpaVTpA7gp%047Y447Bj#b6yR zT^XeZlE~jA@B@jNnaDQ-$f2zQDv@oI9!MhJ83808RtO1zzO?^4c(=_C>U+G8Rii&q z%JXt7BsVGi*SFFQ%ZL#mzw{?2aJzi1TGL*@Q*{UE68)(XZb0FY;CAp-UxjRi5H(Oy z17&8k6xBcAZ$zqpjMTem)MC^c)^l2T2NM5O)?vfI^suiPdPb7(ws{ZQGwfW3oat$# zVEv?qUCfZPybzrsHSERNo{oxzkeW|Wtc6DJh~oU04Pjy0=s*Ls&(XHg!|}odqrs;- zQ&HXM{k$keE0iEe?!eQuQ8%%|b>USg6D`MZFn#s80EhK<6Qyfo2C*Tt0uLanLZ-a7 z81;|+2v zJNn*%O=vn!4YcfW6gv8c0Hx!cF%$`9^xD83$fgpoDWmTL$PQ|CjSx;5FB_$1T{Bo@ z^J;y(SvLlIw7CIq_2Yq9d?Il>-r(!k6b&t^rvXtu5yOr{XrM&{#d-|#f&P(UNXwQK z>v(e+A_o0jFBIE;0Zp9AZd)7+s1hE?_Ld*1*uyo31jfsM!Eu@y*~8t_WxA>5Q=qWp z=z3cmhCQ{=U?dp}G%JYfu8TzWWS8M?STh|3w#9i%QHTH*f_N1WF7*R4vU)hpagnZw z|5$l6j(FBpT&7A!^(;B&6(m~&VSrb!7n{hBWxXYF^k25jOHt~zOy*~bvW!e(s~)ln zNI82uJPG4gUZRaaOZt`QBg$33``dD8Dsox9eh=`ns%|3dz+C-aia}m?JTMj3GQ9(X zV~BOI5ktIDmnErDA36@sJ5)1`BsRG*`qXki?}&0tbzoZZg6T5%FyzjSzfqQ*4nGCM z^Go!?MvT#>CR8C95Wf&Hy<8OkT<`a6-qoD**9ZbTwx-zGUuqi73Rf4Nb&tS zJscjbTAxvS25TCV-yaWy$M$KC!t`1f8(l2G>g&*O0Bm^uY3PHI+%g>{HMsh`GRBX~ zHLoxJYub3mOetR-iuhy5HBo^rGKYrZtIPCJ-u4;n-9GUt6nC(Y+CGW;++4h=1zslQgr z`mU8en<2KszH6nQzkTIaLjN4DdMlyAYfLW1fE>bmDF%8&qEev4gVb6{^{$n{YOM^( zW%WjLXk5qknSb(B_FWpd*z6r{?1BE$7?F=kYH3vEPyvPKZG}MjzIfUPzei?zm&T|* zxCk_>=@X!kbMydUW2b)0bllO#0`uJk_WqcmF}7A0_ffiUb$LsM7+af*#dx8aP^7@V z@2$2vuR=MLUUBt(Gwf1aL#{dV%Fq~>jTx5<^O`6_#}7agcWd~BmN7VC6@K${OvzJv zVt&V=r!Xcr3nR+O#81x8#4P{!yzvi{|F4}l-$SH$$T}h)Nw~jPF(9LGsm)&v)xGQM zpPV#U(z#ua#nt4mac?p3Q0YyiR^*sI3uKl@NqLR*&lk0#P-?ALYW@+c->l^3y$RovikC42aUR;AmC;c~&NxLwR zyOBw`g-gWkWgr#*xcdSs^6921=%$QhQ+-0oTS0x8NfsL4m00;#aGT@zPf>d}F7v;S zL->~%gg#v6f65{B9Y}7Z>iy% zQOq7m4YdqBGz0-97l_>Zd_u}!55WCQ-eRiD^+%SJTTa-&zrPOeENJk{PuY|$AZnj?}l8w>vD+Y2ypa{qre5jbt;FQ%t}Jh?j^mnJFY6p z4wd;?B}13LX5)&lyJ>l{E+5}|PoVtvs)ZKryJUCgNOr}yUTK%YxBn3_@4qDF z{Xd6@`%iFcgpUc_hpO^Wgq*e~D;=3XZN$4#lEYmkWvV_eB2T|Q`(!>Z(zgXZwdUdV z*j@3B+{r)O=H~pf8>+q-<>c@Bq$@}#QL_=xjQot>m^P!uO4MR7xKykdK>rC_5^@>^`VS#vymweh*$MDmYKf%Ly3!y@Jo$?-hK4 ziSUO@$u#TxATah&Tr>0uLLb2p@DI1p;`XccaOTH@)h8(`7*{uVF*NASLfw>qHA6J# z5cvj2nBIT>I~I?j?St}EI)=65IRokEdqEux#2>$t;2;0LHC(xs>>h!1&<)eBsZwU( zZmAMKzg8cU=|Lhxdt`uL@Qa9F%G~(NFNiSj(x+5w&Ljf(V*~hyIhTL=|9g-wh0ycx z9||?v1^CaaZ~w0wFNRhzbgWDTK&VfYZ#GH;yR7ztH=CymJzc)*fU%wYdr=(p8+bN3UY!3M zy`g0aoTXApUmLACJMeD@{`&>*1nhg$T?!ALn*jTsJn<^0jsLfa@U{BbM61_72Hk|m z(Dqy`wq2*E`uW~Ue19OmPm^u6;^ph~V>99izpuXSX_k>cpf$3*&@p~G-$b8p%I{U! z?I>g>?~mhTXh)yyr}xc#_?AfgbW@lvqkXc)Pw0Osv=txP5JUV=bNsKZm~lRTyuW7r zH?-$3@$>uo8@^hLuN2`cW%#NnzBUDmfxe6;-Z1o%VNH81+<(ow!xpYzv%KfXMeCL= zoV#|}>gny>3%eJsJ9Jsk!sca%uUROrYuAS-7Iv&#bEr0R&b(A(SE_zYL*1D1bzm74QAZm?4(`+DeF{F2zU4``#BAD6YTMcvPHonX!j>eu5blpANAr#fO&} z?*$6W^Zrq`lrqj(WO%ukYXSdBsr&Dz;qZ=kQG&hTTt}t#&rqgY6y3_3~ zja}V!6Vm&)HFvi%%>+?=Krk*&zS1~?jSh=7cUnR5;nqL_&NSmM;=@f=tvLC8qgeF6 z+Bh=lccEo|M|)dSTQ~aB+R~h=&u+QeXwb8Ny2kiG7iHHOhl*nsqOdEjGa3Ue^Sj&9 zo#K$~M!yU8LgA^AW-wcHy>Y8ioK81(&Q8y0Y3!cY*^-_yyHV8rI1m>v-(buOr@Oj4 z+vd!y+Ekqyx+y#QM&l2FeX6Q%(!6T%+nbF~#lno85;t!*rikooX05QZ zMx}!(X+rNNiQ!pelYsUA;o`QealB}{#dt*=(QT))d*5oDVTb{D7&ArVwdTyqU0TwC zG3sh+Y;WvD3){L|XSZ~>HD#CFVH{zIbst+Xao~woTpWLfT_DbW4&C|eF5}lG#$R@a znP<%HoZZ-+Zfj|25ueoBiR`ua8TT8(^zzlfqV?I!A2i~6_LbimlXcN?w4KZjdf2#E zFKKLUN;jd(=H|ApwCd-)>g?c0jI1$eMtgTdeR_7|{B&Jy8sm@tHB8c&qr0;%-7Zp_ z&7?T^=Ydc*^O!Ni5KlgVzD;=2xG$P+pF3w}Zps_#vs0fkDh<)}zFF*!_o^9>;k>sw zI85C8j8P_Te#Yn$i~5;yzf1lM$*#?A&jz10T8*Oo$?IzD&bB{qysC?-FB${IgHy~Q zV*QK8rNPCk4qLzS=w;%bi;R9^>`TT5F?^y`B-VavTH?q_!4V?xnpKp2^Ce@RE}EV& zW8#L3&HiGqr!lH?UopP19DFpeT$Zq8hjCv;--((tZ+1&(TN8%`NT02I!x*BMr_=se z0ppw7W@4mpi-M8DS~3QR>ckJd+Oqz^?@@Z8k zd7l_R5P#VmC@+$8Upuc_lZ&TK%>IkjPh4MT1+sho#aLsACvLVz7^zL-gz;uVeDJAJ zC=Oi{*emdo&1GyjuD^N*a`gWPIu0q(~_#H-BdfiUL1cSlE3s0P) z^;QkW3(NMX4}oRlZL<#h&;HyM{oN3ga>}s4EOD-FPKu-#EnTX0c5`{9XU`Fbe1#49 z)!VF4wjyBOrHcno2qeWNS6d^q-vnXrQ>-X3p9-YYt2eA#B|be3RSla1EN^$srJ`rL znG%0-&Gq7$=L6N^p+a+I;k+(6JzbsY?iR7HVU>w{PPQ#^p&M{Tci7y=S-x)BvQ;bB z_hhdMn`u-0_8PlFv=o~|fQ57BwYN7;Z)546c++yD&rW_9K2l|BCeF=W(mB8_P6Z=N6yz0NGke$?N5*brC! zG0-pj+(0v9i3b*8cMp%S%f*JF=27C!DZyg#3o{rJM_(F9WxpJ1Ms;!XFsmh@@VP$S z(%ISOwPU=vxIa$0yDzcAqV!99X!e|8rmJT!9$@`I&;E6|Imr;89&Dk!kew8%j9DON zR-;p2XU%ch5hKl?>cRA)o@JX>_K43$nMaEaHReol+Z1bS*v9R9k7UQ>>W#aLAvt86Qm@kQ%6U@Ve zJ^RCCkbQ1~xkwjF_BO|f36sn_ z#c{QPHQ7%mnb>*upJJ{S`#x&KvwxdnuGGcKpM#_jdz8nUwZV``PolTjqm)XzOlkY;QZDr88AkwYF!) zx@C)&rVrnMfl2pNr)oFN@czVM(}NXa-9dp^c6pO|s~%1tzIffLWvkQcdoYS(dW*S0 z{PqH~Ui`Mjyj4v6BO37Qw*xiVvu2o=8Uxn%tm|2GSbEi>_1I^-P+JWPTbR$@G%a$!o^NdLMq{QQG=9E}E-BGo6-I|^?>#I}hzZklY zd7(I9ry0o>%rdtcV*Um8(EO2IaDhEo3>J1m+&bIr5Dh(n(rjps`M8de*|2)UdU3?) zU_!ip4Qy>cFd`VwCOgb)jc__WcXn#ynpKN>R<2qm9_%!4DfNd<(Rp19y1H9tr|LxA zBy3mLb(t5KV%qXRN}M|Zbi|SSn}fvFWkBP}A7Rrtdw+9AInL{*S?SJ}rg@!RZTq4B zDHYP4eRh9X<`YkS4(e~;^U%<73(S_#+EuI8ui3C}$+GPA3(SNgPQE=*B!=H=7mL(l z;OTo;8AHUlqpT8i#;a=3JMj;Sv#h7 zUVCSD`)a5aJKmD1&5m4a{sc?;Q==~X{5o@?-cOz3ja{?TT?^)PgQA%?r)@@COLICc z>Uzw3i_(pAy4pbhHDlh>t=Kzz%zMOXpPBugbQ-7i`ejS9*KaTn)x}MZ+HvvhFRf}( zd!+g2!t|o`OL|rwzAVkHZ008O=eiA)pD<25)g6du!$+GB8U;(&uSu_1w0bEf>&auy zx5aUnTf?&1_Xsk6NB42=Ej84F~<8D`vw%GC$jT+t(S8 z#b3(+9(W#hk)OO1C>Em%aX3CX4G7V3hV5prKF;^qLyg# z$WP4@Q#|Jei^R3(2g=0BTg}(AYkz@37Aey%&9-kdqo&J4sQak3%bJ%h&mQ1;_P1s@!;)dEG#ac)Df3#`ZKw?bf-?>F%y{-J}T<>e3A$v1+q>TyFlF{6beN zs2cyg2IaNm3Nr(`(G6CM#*t=RbOg|)A6{i*U2B$PzrNa>VFZ?J>;WQ)Q?51l5?dS`M1Q>2oDZhq zKR~+NGZV}2!wGhHp-oMnH%*acE9y&mn~Vj zd?j{S9Mg+dElaOly?jk}|9i})U?Fz*-p&1I51GTFi&i0(+>h(4R@ZE*7TZQ(=lm)e zbc!f0h)%jM_kj*!wv!BNse}6X%2H%xlG# z%du;$+ShWe{XrR#DHtg3c;0+jbVa~?zEo<(vlqNz4mZrU`X&(#1k1!-mjxU#aFtz< z-T9LFwk~$QV%ElHv^RFOqDh#DPPKH!wpXz(CcbJOjor^Xk3{C`zz9+Ly7`XSJ`j8T zf9x<5+2|k5K?csK6^qtmuUfgPXXR@0xwT^LtB9TchM6=JqrdS@vr}xjFfeFDFA30x zng)%%WW&1kD>r%+vpDdG!04>|mU)x`R%uSl{_SnkDG!+2$z`N9gH{Aj0GjiScfbl< z{Ej(zK*#=_WI8+AyC5FeZ=B>6YWX(_3`q9bcg*t)VLW1_vM2n>tkA`~Uj}Z>{^HN( zX?jG?T4zfOkg+wL$`1d)>@daIADbUz2M1r@P|q!@s~eo*sh^nZO>y7n=73?lc0}%( zyLIF5pPFamaPC>L;qb-vI2YbH%Ph;@{+Sun#Ydl;OT=gIfNHq;HLFTI^om(5j(r8^ z)L~zkD-vB@9b~?{+h#0acUs!fYq9MqPz_aInxAJcc-C&vNj&xw6Q=<6e=*IDh#UTD zJ|ga1XO@dAzB1>COCP|&{M0D3GW*3>=8byxfxnxV>f((XuvN{UX~#-B=VKTZt5mH< z6g02cwgP0`npcfL_QG$>DZ1#sA6)-)-#%G;)9TWJ&h5?9 z+bObXn~iQ#1I>rz;TxpeMFAG`sQQ$Ch zJ~p`NZR!15Kr76hld7w&YY@xB)_Icl6dmuH0Wm#djSuovXqnR~&Wl(F2PHkTY-zTn z$m$o!&M&c6>*BXj(7x+8n^j_PnYG_w|GereaHyT6b$5ZtpWE0au0Puvps27*%B<-@ z72YJ$UjzoIQ{)d9S+0S(J9~y%njM<7`lIdN+Oh1~e%8hE%&Qg671sFD^m5YvV5@!p zp?f}PcTrakl6|c(ZSio0HC>DuV9ms;QYW)K(S&!nQnk z2xjV(vfu#GFvPk=ByTl_i}#0EZJ^_3w6(Wn8-`l%=)1_Cn%WN#$zj$nGYXwa>sD=C zw5~dJOscjf1!9ay4vM60F6B}!jkBwU%lMj9ZS{X1U-wVq>k*GCh76JaviC1Bf1pPt z;oF@~Y3b=J55=*R{c4y6na*KV)*HQJ(D1%7%%0Iuzey8M48#F(-z;=~L$%drNs+?x z#pY$%C#tQn^4ugL?Vp=CDrTM@7%QGWFOU$i8mq;^e!f&}Fsu>3-dJPl32#ei>YDB` zjbP-&hSApk**}lAO3eh>Vr&^rbGusFJ*s80_@>r+Az#c0X;p89*=OpkzgeQ^Z&?3az!kM;A93D#uKZnCb`v-`DJ zzXOxQBg{X+vi)aTL%@$N3``PJTCIuVu(zyAaeXVO@MW8^yBu$wRSmU+dt3eb3bP z=FXP+8jd|F5SrN}p4tbe#M&m*}L|)E-}Od2Us0q;y4Jie>KS- zE)oY?_lujJ4OC^nInWwxh^Yr#tD^bGeOq(ee&ULQt#d^8Z;g1UR-s+(JhA9ypwvET z>u2RY-_?Zm+1-MTwYyPDr)$N|v~{?cdN)ps`fD-z#~y+q-|uB`NC#I2hl;Ed42x7l zARul$#EOGY-nfV&xpxn-4iS5`fGnH2$huB^`J~a7{bG^zsh;Ej;q;%Gp1WUXiU5Tk zc+bAK#KP$k`4vP%D>g$k!f6(J9SVZ%k=r3rJ@8O#Px0du(dW%8tRIV&wZY2lz?If_ zhS+13^_+O)bo8Y5aLctNEB@;}4!3M|#;Os;87n5QvkussHx5m86H}AM)Q_o4)z{Wd zs;jSSNL8&{hS^!atU7hzp-YyGo-}&#x<#v(tVpd}wsGb9m1|a~>L*OBoj6V;;lwC% z_@Z@7R_wKC-QgQ2tRH>2n7%SFUHoL7^?aGf`jBXBn*+9+QYHvFc>%=GDKv>@Y zbZfXFhPQ*n{%&&6&aOYxazGdC6&x&%JTEA={#t?2*}*F0pPm#Pye17mB}yt@`0uetq{5>>|5|iRTZr zhGw^2ZY46(cK9V63fM14Yq-~)4S%jw_su7Vx*NK zoyK|X-6(bW-PR^ulDpZ^z19>n#3{$&(W8mjTyx*f+e}8Uew9#7=p^mAeJ0 z8r?9lI{U&y*o4I=uR-qqi{E2|%<7LqL|%x4ii@+mYwmtC#F$qCrQ*AApdkB$$E*V& z*ID1Qbmi*o{f}E;8{+k+tW9F=)7Cr>z(D!9G>(lUzd@#z5{dB)4sL zh`}2n9J&8l>uDW4X8tCIi$C1@WgmLpItn}bLxCaLgI=_bFfiWoil)y!4H)~!UbdP= zp$(DngjcLH#nZ1?mx&W*fVeqlWUxGY@~alE7j{?>i%uL5Quh7V5L4G??k&E3&AO@> zY}tB9(vDoRUdi1wf$!-P;*Qs?l=xzR-7ow8>lWm=zujRyhKck#gJ~Y}zqYF!G(;Tt zhBZP=em77x*^~M9tUKzT+zITOBKyD_)*rxedib|1Z7gnn)7tK&S064pOmY2N*6chk zzL(k%bq3C@=-XDOqBtIS+ghgNpBU8@?^^O85>@Y5W38qcGdsoFZAd=tJHyVN{Ejun z5K9ZqCE5Glv!+{idO78K;Sa4PV*7{I`Z7i4wu1VZSr0n6L1Fj=(NTweX5&Xzz!GP@ zWS5# zXG6k1{&TCs6dMiPu6%Hh70w>-a)> zDxr~c8k=T`zwBw@K$>oc#Vt-SCcc|u+rs&~^@x1^wLmOMCcR)b0qhO-ca-=h$LKI504~Pmz7-|HIl_fLD<;VWUT;XO17-CD`JS1cya~1xtva3nA#TK!U^W z!XDf$SmVK6f*#!6-Q9I@xBI?x5@7fHzW@2}eJ&3()m>dx-P6-uT~*y@V)PzJCb}DQ z;N>vL?B_GT^yfgJj=Ow`;b*M7`~SrLOU)D_pR9G=lupizP~F}EDTLL??n_srRnM-i zI>-1ScHON-R|ujFnFyl%a^&!1zKmZB1hu;)1#@+rUs=DO5+_R{nRj?fanxu*P`3lN zk___e5I9eV1zR1B+zTcui6^jI=B*8TW;*e-9UtfI5on>L5IVuTMQTFTzx z2mtNeqo(kV$|XEp4wB+cC4V&ObLAGTjq<>HC7*m=0YR>)C8qT9U>=dd7F7pr=ezOq z-pV8P)7MRs@DHy*F3u;yy&dz5v?e*jYsw^>4~7MJub?QYH8lvkIV zO33CxVvyW%SR1@2zyN>!3+zR&ncjf40SF|)d7N8E)RVnZsTn4Qh)UkyLPQ6XOrA+8BHz~)cN4el09aOw0;jO#ZTBeNp3IO0sfD1Qy)Na#(%w z6h(=~12kOX7I9!nZ_fr|B%^hFfw3`CX(Z%|5L_4|pqbXVzYAj?beIvfA&#XyQ z`bFf*Ls;lU+zz7MBz!Hgv;-8$^YNL}F83R&OUlqO-srPJA(Vmmj)_vU2KjY;kw#DngC&_(GA*yQ`akBb(+pT=pzI zM4(ybeyloWg$szcRkFeK__d*efcqb!S>S&Qk|2aq0HK9e2yXh~B?Zf2sJ3pb~fRQ0#kKwq{MMmxNxdWoSX+0!G&%OZWm z9}v*BgFM+soRL-PoBdKoMPj^j8RNcT5RULvsVwL96_cc~sg~B;w4dm2l#lw0MvlZN zSQNaZma_5y(aROpzIf4S?j9Miq_yxqA0SMK#1$|X@&*hNM%pFZdJhVUtetqqO5gCR zRa4d-3_Z4Kuowq@Xh#U`{I6KH8xIwK8fDkgFu2s=qW-@kPL;z$(>P@Pydl$^=&V<^4^fxva7h=L%|U7H<<{wAE#{1BlTkEH+t1AQi5+ z{uUurlV5Rfn_Xg?BBRP8AUCct4nzd+7dfyJ!yDG;Qn;UNw;xJj>_IU=$e>Y5a&NWc z;+j$JFQ{aZ6;6s?zPNFbK&(pt@Ex&2LBsxzm+swkQk*x+PN&Splcx5hk0P6IYF|4e z=9^sqoCh-WIF6)EIWJzp#O>NLwp&*@=YqI|eMHRjfZ~4Hf6eageNmJ_NVi_as9M3{ z-_Hw3?%1(mJ=9xh`DE}Fu}F^CFA917m)=5Tw~U`2h(fN)DkDb?aFaDemW#TD^TUTTGR_Qoty%BNRFz2u0JL{$#K zAuS|=0+5oSH=!SgUlY^4jjoHSij0ea=bPdVbf+t-O>~D2(QpUa#2_WB-4%VIxo8CF z$3J1)CK&_ph92A%W2N!5Ih}XrJuzCyemKe|3qKLr5tsPUb*+oN92xpV^veA&PaZSl zzk2rGLr-9@SflF1#_&*-pZCJwqNynrccApxSwxj$i8ew>*>@qFr^?U8Y(_(VtTm{1 zcoli)rT8T&EcNg02yeMpRJzvW=q~+etau|{$x?4&Io;`w1@mQUsHu@}#Wi_u5>EWJ zesqisPwKT@~9#e5|Q&k;g%>0ABnRqm`Vy%cOVRb4- z;Dm>~rK!uM>5VB+&MgJ2dxu5cVDc`tt5b}!rBgjFbH?C#=qY-GTq?dn&Ld8YYBZ25 zH({xtm_qHScPv94)q<<)liDv&(MT`iV2aVwrDa>hIdFPOq*9B^+2d7z8J$Yaoa)<< z_-@vh^o~xYBL3R(iIT~CFpav&XbkiYN~dDY9MThtrcwsAEY10F9ILDt5mFmxFOvon zjuicsQC%SP$f~zeHnpnaJ(){|^^kGFhOON0umr&h~_87MZyKjwy`3je}`LE16SG%!R$7 zW(8DDPCKIJlT!<*gXPedN^N`>zn(l zIFi|;b6YH=kNj0XqsmYKJnC875ZSH}sQL*aig=>})d408{LrpA#?VFHEUFIV@lmH7 zP)uzp@05WjR)Y3tDTTLs9d(RJHg7IcC?x{?Yssv2)xShk+t}t^ywmEcV_|$o zYDInL8ZdLY!u;c0gEuHr-GLJpOGJTuvt7iM_@!ON;w zY)lkS_(kdGv!6CpT_#yB5a%gAH&(rJcP#ARC%>pqm4HNdJu%k)KaMp1SSmX$R#Q$4 z*4*At(dsa>1$sHEb+?!na-~blC|9&n<7DznN(OJU)|jiZO>%S2G`jT@tQ$N5C48?u zphTp%c^fqrkePryQxLl=(Z8uHu`vv1RF4PoSOLw8wk`bf^px%x zJWI0^@GVcosP!y*l$e9y#4MO_QL(Dc>2r~Md(p+cJ7U!`Mwz*jTHZUPlUmYb)6Wl3 z^8`u1RU(aSW>mEt`WbR|E%XV(MBiG2@KlodBDwpcFY)q87qx0J7%Dxx!pctaVte+~ zXDAj19I1dm>w9~;Jr@v~*a4AVPgixIQ3O@Tz?BIpwRGNs-PNTyY`w%>zpK`9g$Q$=Z)fBq0`hv(^-_N~dMEcrPku9pX5=*M=8*6<^{59mIe!V% zNuI%KY1ta5guSB&t36F}N4zPQH}fzxzfl%^qvrQ^AFi%c<%doPy5i80Rr;%Hp=>{x zt%3irTLX*1BEy2LA7qdX$Epdb6TA8!+yAA!>Ns_}F+EA6+v}c4#ZU$g^*#tJ6)8`Q zS2GFy)yl`?)eZ8`%y2LEOi;fj|8ZbLUtp7$r%5E7kCF0^LYQJLTB5DzrCL0X{#r1D zICj3DmgeiwJ2z=Km6X{gsiS1Zcji(e2)08QBbsUC-AO8Z`S<1mzMZr3CY&*7Jy|^` zSEVs$@s^!}KaAqtHdW04OGMY^-;U(HnWkPsNU9Q+Wd9M+-7z_!Ca%m-FUw2uc$A=Y zaQN5FR7)6TzBNjj1@C96SUd8mHRb!+>LvN;8uZDji6XzeHAn3YuP^aPrgzm`s8^VS z9lLhcckcY;>BZ2$x$=vevVH+2tM~X4)nbtoXTx_M=EBBnjx{QFR72LPXJpDsT3X*$ zQJ}ZfI`z5m9hI!s6$@^e&FZF%-@L1kIzd%*?+Ql(0j ze2dyawwjLJ%>Pla4Vnkn&`^+FNS5a3t-w9qK(f#0&RZJVs!jzYZ`3l$2u@BGY>(l0X$;`5 z^_7|oYi5$}LGVk499P%q2V>ILtB4a|;n+gLz@^WRSYA*b?Ao`GWlpHMeCD8kO&n)D zvQWw9?GBuNrVoeJzb^=Fyqx(L+cA>OB#RqO&Ld#L8~?!Lyg+jc|6@0H%K zG0l``Z>mM$PX4!3`;p<*{k)c2D)ztf7lgGi>o!JEzB_7LnZ~T;@t(M&wlvB@1=REc z=d5uWu-QGlL0NGNPU>sqg?s zm#+jFOUj#ar2ZZ7Y~L{d`uDm7%A(u=mO<6``ZUOO!&g!5g)i&)NSK=aZ%PjhYMQ zef@u^7*u=djd~vE5EA{||5()Va-nxB;T=qQr{>Z0Xid?Q^2$5)l)UjCe(d%4>M?nG ztI1EU_@K7txvON}6d%=aqi+)gUBREg$jkz3Y`0HpFm~Q1f$j2V^|0kMbs zcO(+F7f;3VeBBvMyI_?Yc}4|8ZOWI!1;ueWbb?E!wO0jszhPVxqfM@RkklXg>{ zN~2{6{P(#-Iz&GlJJf%FlGotVKvjdQh9H<4oLj3QwNSV{=W=WFO>$8_Ey3F*zxGD) zj`Y{y67774)1`hnVF=X;)Z)C8r--E{@7F->F}9QIi9+5-#qg)Gr0Wi-o-Ktk&R$Zh zlqRY^PnF|{Lr|$wiN6!%4#4!1+PH5UpPU6hp1$zbETvU9de@fL0*zM2D|G`(zAK|; za-lbL+uzq6-jqLUSM+o5m|A}~HD}|Dc9zqcDKacX^Gl&`&HQ+x*UvkslJ>Ky&^Ma^ z2QPlyTSuTtKjf%8?bT|P(4F=Gnea1~nQr$?d1Z|%T7W!yS7h>btD@mBc9opa|6gxo zr={d|jOKFHw6bRJgc{lwMV^}v1U$K3M!9Yqwyewd#ktzE1EAWib+xJgKEP8WB)ATD ztZ+tPPF*dNNlsi2&+mD-)=|bpXdC36>xfXT9gXeO#*y0oj6UO0Z)O$z9Lkr)>_^61 zv7Uxq#R+GXB348=brt02_14$2nw9!tp<(hyBQ2fkTaRSZ-*DnLdt)uNUz?6?V+}mO zUOOnHa@+0(Ju1t?>;~WVoSd-{=ScrZe0vvRl=); z)vHq35E2@JBP3yX3|}7@@Ha-2>WU1-A84c0keWK6$jYtQc0;9b{H?f-RcoP}5Fyn| ztF`JHf#)=YcSP{gkc!0U`ks0jT!Jbgkr8sG6`v7b(LqZg-R-oL>1u~mt`hcRpCol% z$#z;6S+Jevzz+zL4iOo;cEC$UhbO)Q)c5@@=$)U$9o0@t?csCqr6!Gm#D}UCR5Q#F z0*@F!i8OF`F{ztDUpumvF5TBhNd+BybjAz9xuBRfcrH}g7Tcq+dRWeG3n=QV2hYe& zu$obkp;&5UxgDC-6QhU5i}5AI7<9FZa|cZOUa_8pbrBM32=CTBv~$~7L^OWaPvQ7S z1^6ft_(Vt|Ro3S~%) zmO5p{;4o}-(&Z@{72s>2yxKv_niBOT%7H{*&GJ(RElbnzda!EQb}|LxryY7GI6O4W zfFD~2SJEG~gb&NZz(M%ELgE7^oe2sLs^n{|eh`DQc!*!8l4WDGOj*NQb^X>0Ne}7& zZLkK)4j_`FVzew7LR-bO46o;_pn7!YmQ|x+WBDX4iP6&6MHrf+(MO=a8jMH1IUGOS zh7HE=w17yO9Hc4gqX-VdGwE+D=^fygn6lhR zX%CjJ?X_NRK8il_eX~+#XabG%tUXrj7tLUE{n1qGq*aOxZwMnwW{J{{yF$8SY3~+O zxosCdfh^HXDzGQH7{uSk`L;#*n`GIvh1Of% zZJ~9`@J&+1=CPf-{wT=XsHK+6D6_Z4^Ym|py_;37Fa)l((q_qFt+jw;4O+MA{15t# zt+7JcI!5%Y)U9>v(5{_jv0t?n^3AVW0a>)I_LsL=tk%Yun-$jX(lJq+QI}S2q<4Jf zR_&vG`b>Y$a~-u7b`l52wBUG>r8;R5S|YcM>!@XR)UFs@$G5Ix-}`y2mQnNVp9jhn zpvB%ZZKKE_-}fR6(R@Hzq_dVSyIxYYVsI^dKLLJFSVe5qz~qFJmz0#@owe*TTW2km zo#8EmesU^WZtbk4lXp66Im@(&ZHWLPj<)lcA}})zUAi@o?Z_W)8}y%IwrtH~EnQ;~ ztw}tPQLz?YLPh>CulEX5mb?-8#a(Azqu0Vu_z=9Q6cQ4Fv*ER)!omaLD^&3<;&}pO zA+I@G`G1wd8>mwUr^tirRIbth-*w1qz_&KQU5CH?qdtHWj6`*OI73g#s|S@Fa@z?d ztNbZK%Usu)>03|pUmd5V=N?(dIU z|Jmp;-%rUaSB$9Wm#28q#PT}zaEyy5>1$T{0n2u>4=_;;Njf7*B_xRrPwb3{f6HZX zq;sJbzWOQupO1i+=@dSjwpHh-nAjeMTCG~@BP&A}t$ZLd5wUIB;2cz?*x0T?vHDNZ z3>~5|>A#s1iFQIFfqdQt7S3?5mcfyT3G0FvBU*p6`kRz{x@g&ik2bE0 zmMNe!*?doGXpYMH7yuRVBh2nxHhZ?{7}Pa3tS1(?&REzxw2F(%D4z|}T+)A<#=olB z+3<6Qcz%9`|BQxkUjm;k{r{l^CtZhOnwRXWIpn@RT5glkh{IB_*NDlfp@s@S=lov# ze;|G!&+frzb@VUmDEP{e1((U-A5WM9m(dWG2B3&9SrUNXLIO7FX^e><r?vR+-vWv!3Lqq>(GW^dH4#ndYf930hz$R$DSnA8gq3j_4G{$7 zPK%zZ`E!OGT4zJ0Tp8jF*)4vV#v3hPzjqzJYJ?~Jv2lD#UMl_~e2PB|`qNStpFD0> zD*0@PmMtzpmCgEVcG-3UZXG9SY2p$T*^8Nk0T?2eM`;#5cT$s)q=*Ducus=rdNP9G zp$|*&*oP%}H@t@u# zHs)8og1Q903L<~3psrqlk3I4mZ&CuV5%@OaVz&_P#f4`h@I713dW7$Ak%Z7+Z%jS5 zd=xHUhi3QiD_wVSft$cThu&m@Dta=Mps5c_5a+`ZY|W+95}d~6>lvnIY{jcjkOAKQZACZro0qy36$0hLh z=;=s4Z*^QGA>;)T0^hSo5{$=13PN6>AXuy?BmV~A1uQ|DoJ>ak1i%Yef}efZS^&K8 zr_VwOoBPna0eFF!;G&+a_Y8m+uml#p+v}AE-~}u}dmolB!}nf7limyZk}u`DkKi2u zFR&4K{PfBj)yu&7(o(8n9h+x=LjPp2fHoo z+mj@9+eNVbP^Tf0@W0kc33Y#zfKTz^A4UA|m`Nf+^+x>XW5y*|F-eStsA2U zaLMo$%J_Jk&xoD|qn4%xhRTg$T4rM-89ho%naXHrl=PnXoj3f$;$FBfjG#aJV!3HI z0S8`x?~5OSjRtQt)zm^f*HT;@=7a_CiM}7~lce7GH(8c^Bx_IzpoX3dBe3br-@aI9 zj+<4?^KZ`esKjWfPjFaIMiN}rll2I0`mhAAd{}~aJ}iMvudp70Lr+E$WYUunl>qAL z$@&BhJbJobBY@U=GVE7?-+W1e&U*3}g6?`Uf?yCXlcA%5aEK2*3}A#WNibGV{z5R< zhb5S=CnFaEEY_2SA_x=obUlKtdNP7wCoWXtI1T9Qy83amGEoK8=I0s{|6$6Xma|4_ zsp1x;@>vZ{$K&lM-JEjNc+En^a(z68$s$Lh&Ee4H$l2qx%q*lKBHcr^)c@Zy`rs>q z!4x`6OU)rl$~&)tpsEAWCX!jT)wt4 z#jjQV(-25{g@C`Iuq!UkGs0dvaVUXLU?fFM@?i-!>dDBBg*^t#ejl2^SIIXc3zGR4 zcn$orW`sWbLJ4XW(3?U~2bZsnO!3Q`|D%l+z*h$sTS(Xd7c@bGAizerk{P;M)UL_Y zY+Z3~s%s`STYL<#!*r^!-2nT2$?E{OeaWQfH^t3L>!Ey7n+z4=2@`ahaB{v%L=!4{ z)59|WWb-A91C;h9`3PaYWCTDxU-CDA4!&eRfT6zRY=8t`awkBYJ-&2On-cY-fz7Ib zB0e@@b)Bp(fv*?CllqMmN!&`@tkn7wrAcHZWSh}r1c8ZYLbe}h0zL-C5LWV`DZOZg2M0``uFVtuL2m8QZ3#G#UIb~$=5^^_`` z5)EG{Wn6+oS7@3rbTO3A5HFMW#qZz8PS6U*ElNW<4HD%6+L$jO-D5SEjq4WvN-qA% z&>>nHV_kw&vcV8IQ**|%`6{W?kQxi;|IX+_but&eD1-&lZwM7zvLBb>|NgMLKZkYM zCHss;2jXUzOLaYL`{vo@mRSa9cK$7O{)0-Aaq$c}#%Tq8wfT>QbGQhj39{cVF~K_umCA74SZ+&>c5@JvtECwPO)Z0KQ(XTsOq`rn&d_j_~ev#E{ris};h>a6d3 zq2KOt38D&nrZX-CLkK91j~EvJU2YiVCOvytJX5|$3nQRtd2|#^SBh$+iwY<3bzJ0+ z9T%=M`x^6YCE%ne03pS3!M-9Wi3`v9*Eg-@Yw~$Wy{K1E?;(J%1L`F`A0j~Yk{&Hd zM<(SPfP5k@Y9B&&F;olzyO?M~N(DMexXBRLGN~I#lGLe8C)G+CUoCM9@cD?LTIlyF zB118kt%+?g8slcA^bOk{(==zg@6n?lo88?gW2WhvA$FRU+VLY1Ev%&2i#|gUpRrJR zIc2+1npNd%3y;^$>0Ip7q<{bDmhRvC6l)s}d5wk=DBV}H$*9qY!s($n{f4Yl(XH_4 zzSudS`ueVERLD+J3%V-Rb&zmaNqK=(6C1+PoL*Yq3Zs(yr#aIlAeV| z#6x|Ygc20O_pC9M2>fyR<|b36^ny@=%6c+_psEi`z;A8qlTi0^?K00Sn5pz}xdy=7 zNG==9(wrV&y(A9z@e;)NcnSEaZeOiQEi@YVaqi_h$+wsuAA$r5K9`*b7seQYzn+W; z1Ssdj67bvFiIxt(37`0nU&@}33#xKd{HQ!b zQ2G*-gal-?fZl(S>z`DVL`NP5ie$%?#&lVjVpNS6qh`F;Ctm0C$gQi5`3ll`q{m3t zm0oI+M5deLYKe>9xsI2eRvJ^vWUGx93q4=b=r!pnh6b4PE63FM#EV~%=QRUYl5BoB z-sb@NdOE4~#Nk8mY?lmOX-tL;Yzw;9|sAC1FtcO*GxcO91?txU-c*Td>5c zJ?SZ#=BL?tag-$CndX<+c_k!X{1Q7aerY}FK@#ab1|m72cx_I+_~~_C{Pa36etMl( zA6!Wl;SbbLMOu3a8^&xfn!{{bJ13HHMxjk+qA&jJaXwkVY%mvan5|A>t1;1NFgr{_ zy?GHxi%XIQk53W)JC~V&Xq=jII?e{eRbwiVyNHHR zpt(?LZ7ESZjA_JA3nwB~Fs;blJr0RNHpLv6PGoFS0WHs*URc&FG8xRa3|jp;6m8Ea zOf$NpNXewFB}O}<-%WFwE{?l7M`n>fU?CEPEm|!deT#Q0+BAOQ16#9LqvL2%S#rmFYe}eqeYvk zXK(3u^I}$0)=!IDg3@vj5tL1sGSycMW;MGu3rI!Vvc%v4QRN)Mlml1k+EsMUJ2aDAPh%phfBTc-+lTjd?`MMR`D!Hm}xw8B53VZhmIW zr>L)tHyWbzMbL^!G(RN2c1)+Zqu(PuD@Z;Uck=^B0qxX!WEJxPV?iy~CgA#+3TaWB zb=(nSVXey+;C7h(wPxGMHlBC$31fhEPES2C25MiC!gpzlXlu9YY|o8FwK_Y28-TB> zh3+QXO5V)_O~ti}dpsx^VJxAI+M`p?GL_V3?*;CSwUk!iAaPjh%Y{Y-`%U3ver150x}iQiCy_vk)kUec8K(51ZZa}wXOJ>?usORlded9S&R_rJRm zzcCxR9@HSl+JIck$1yGP;SX5|!`){@-I`88yCu`ja+4v0M$E#hyqCgj$K643)mM_{ zus>;bR%CibG)wcfAttgGF}!Q%_wMeZPMTWoA@kx=N~!8(tJIMZwa>z12BrE zeP0msWHO~GgNR?$1Zj`qPAwK(*56sJ!6a?^D~TGHVFicgGF|*M88%(xeS8((7wF9` zIfnG(tfcuR8}F_3f%aw`@yq-u`JO)7Gmd0wWOnja)rWKIsg&nh|77N7G>PiAV>-Z05mUx6eanvw?{<^2R4Jz04<+Sh_$ByD zhSNy1Q!ibgj_GUVSvspU?+NH6r#lP$0;J_V<7*mS) ziet#oLZAILFEc&4IVsB>Bu%SQ#9WKxeYQgSZhE($=tr7kn~1OTij=k4ay*)O@4kZ&P%g8N|0p%XG6-l+#;Z7aDeEI^R{|fA^BU z&2eJ3dqxn|S%1@eqKGU50wVk3#qmyPLdugMkBgLmT^-e+{BgbKl=&+XCm{{a1M4cI}{Y<<0IHj3%|dQ+|x zU^?zM-Y-T_M4q20dPaWUI~HYSy*u(=$xhMp))H@uVft(sMk1={hk^A9@Fu zvVy0&jtkSZ>XPb|&=STcw8aqKr`IM|&me{R|Bta`$TOYy+4?;8EMRe!*~FBu!^RC5 z!uwEND=gPlR?a%4i5txOLVaMqE=>9J9>#mdie&EBj7@woht=G}Tu=?=TQNPk6&t7Ml`VkBgUOkX4cf0; z12djb@*jJYALC4MEZ6RY_2Ez4siL zZj&y8zq|7{+EZ0CGmM)iqAcDx`6%jpYs8);=HF-I>-NYFG`)#N9m7oHrvOYa4UPcmWK*VdnQAO4oZw8PQC zC>>#JULTqH#_l&jwb|&o_$%O1<7I*O@yeL*YhoAJ9#E4eyPgKk&esR(PR;)jHkeu< z5T>tM5MQ)0moR$7S&cxqvBg zs1VW>s-i+st&@kAW60_mAZpaK98j%laW#&q+z}1$cAm!mUmtJaQ3e{X(2yEqJhTEO zrEX*b zP1(~WfiHiI-CX&XSlomAa}}wxmD(dbdBw!BlePulK;|BN0XaOE*#CL2us4d$3B$d7 z+S9lP$GU(I4@m|weT+S5E%h~a$pKtH<8nGblZ+{UMcHKIF3#5}#=k#+WVW&K3*_b) z`*M=aHQu8gv)pL60IV>Mcmt4N?8RBJ-dLS0-v*EINE2W;8mH3v*==l3y|%~Lkw(m3 zV_UA>r;WFBfaHwP?;Vh5jUS9a-Zi=q#1Qw4IclKnzOh^vfH%fzG=$z7n>Rq&JL4(7 z=|QFyPLvHcjmrzsLrl9k6egNFK~)H8^4JC-JIQnee|{X_Qpv_uYk}$GKGd|(w0aZ3 zI#WApQ?JRtFDTcW9?+`TYg!5gBKDbvl?L*dX+SXe&Y5aZYh5v=IR(C}rZQPjcGDC& z7rDEpfJ(?cGDU7h?u{w7J3t@vP)`cLf#&41A#H^DQF?%pWAP54(94|+W3gt?TqoaaVR@)?C=q}3&x5FBZ!N}h-;u6Xo|iCFvxU@FLQ|L?jAI1 zs7dLJ+;Ee}^cmR^rqom#qfFaxBRASqvo#85nhsY0a+YcNcI4KZrVT~e2Gcq#a+^$1 zJpeYF>;V8n_5E39P@zo$jvqP-2f@`&AZkDEHImj0=dXMlIH(nb8U{7rRHM(9uzJ! z_bH9+3UfJHS_x(+Rn{tVz#!DL+WagRNY3{{@1XFQxx{L495+8j#6_GmuPKAvDRabDNIPTRm=C$L=FfGJyI?++7wi|! z19k&>*?czy$SdZ$RG`<*oA;yahWTL*3mMUv%fO45KifhCQCD~LUS1Mx|2U(@8=j2`D8;xgURB!BQ@^I1r(t$o zIocb@8%hW};imGj4BB){nHP-QZ6%Io%N?aGgBf>~PM=VAPpLQ>W%rfVTtGYzl%}r$ zA1Ylq#2zV?E1~eQ(rY!q6J>u^fWMV`)V)uYU0m~@DOI9T?{lTgOypiDlRpEzR8Dgp zdZlFj9c8bT3|wO0D6P4mzExIXvsb)RX5>Kby>j(57(OWblB3xlJxbxR;P|ApX^g_p zN=q6UUzF&tp!uq-{1c3QL~$7GqOVBX29*6oWj=j>QSKIy1H_kjKMt0` zVj?U_F+`N(GB{MsP7RV_Vpt#KhKq%3keesWXF<78c-}L_vPj%&i^9bsV+Q1wh{fB% zzf??b2IMl4e+^Iz?;5aK4eX0v~C_ zC=&L9}nq3wJR1FNjm338ArnzuUyyNO|U9`>(z8k{X6AU*+7rLFd#B&wkw(v?I?}#-cL2_59 zZ8-lPh~NJ};X{$x1!<4OlC3CwEPi6(@rigI0Oa4I4cCpQ;xf&>XTn?+49~@DF1jy8 zKe}75L_@}xUW-x;HM|jZZv**Oe+@7^WVa zh}>{B<#gmms2fQ#Qf-nBV3Znr71fVcbCib6G3prF*>P%MO5{9a)$RoV$EnG=%8yq~ znUI^H<}iS9qWU+VLaO17P&P>oHiL1B+K^(Vs_}fW)6|gEKu%YGi2}n6^}Z2h@#?*K zD4V4YZVTjW^*n>jX$py)>>?s*kcDw@O|4J94Yl?*7QFQ%CW|;P0glMzhze zjr|~OgPQs^kQ>!(At2eJR=Nx1R@JlQB;XG9<|=@lsyhl|cB$6#VBD>iXUJ!d%D*Qr z_Nprwbv&S6SO9QPEwT{|htxY>P##t%an(Ae=Dh}RT(z--PpC6#DxOrQQze~J4V^%F zTD?Vs^^CgC1aMZp;-PtWPQAnTdtP0@$od5}q9Ae?)or5yE~%|85OZ055s9)ZYCILx zH8lslkL&6vgcZaMb?s8L>8ARUYsD?KBv8+VCiF^wW$*kn69BFUSqhJZr!>P^+>V$U$1C)yNIjE~iJ?5baGUz))?{OMqe8 z`@SFQCAc7Mx%QzT%2sG|=rts0?p`2SsTF$* z&(Q!(z+_9BiYc5Cr>klUj@*@N6(tq5Z$2er$z z;}2>0N+4#8CQktz(LDX90v^?J?gBWbZ7T$t6WX5q;6JH3xMy=p%X0zsUeKmZ)q>fpzOAGF9P76cF72a`&yeW01vcW zF#r#>1D-u#e55Hu!SPtL(-L~3{agazZ>{!nAfIZX*x?q>w2ps)^0}691&lAWiuydz z-oHogl{SG+&R%g}Vbez%qvOZ=hxIE`ULn7jXbXE%%FpWSFI7 zMo1ZMX|x;2QI>{$Tca&!sGi4IUUB-ySxy-M###*VK#sGVY5~6SmYoaee@w7EON}Zf zS{Bs;ke0~apqXUJN4t5l#oQmrDVFA(6;mzggHSfjk{m9pm~QF49>^J%k*kr5x8zxc z+)T^geIa|6CAc@hY|H2wK+dsDK^#fUwX7%)(l zOM99ke_OnEv}YPY-yA)!76M9cnGu8@XZD z9j75|g!NJZ+Mgq>37q$%tkHXb9c_(S0RA!7X50jcv(D#09Ba*;86@MZ!*T$Ow;Jfj zO|a&oVx4HsS05zO8dn$$ldKCe0y){bk0$OE>rt+$Q?2n_DW_RG9sv7vYsw8Mn_*p- zf$`sX>-MK8oN4W_1*EgA-Ko20Tk)$^%pB`yZqLoN)?|0jvp(YP*L-VF4zC5)&HKT( z(0XDaz#?l1hxKA>hl2o1tlK&7ms)3J1z2Wnp9_4;t<|zY^a|_IDnKS!2g1Jhh*j1Y zeacwxA;cusSliSBSZi%l4>aqn=MBhttvA!4G3%|J+9J2X8ng>yHd^zR0Ldn6@=XAn ztxcAKWQ(=$Er6}o@?7|~S)cuZdbe9AGaj|WTKYb~PHTULsdrhIz6Ygex3%&VVE0(p zwgGmp^^bF4+-E()9@=l6#AiBSZNhczpmkaxI1X6{mICErYZX5rk65?n1UPCf%lCWC zI`kY!j$8ZE5jtW0gH!FKwF;;IDQmMnpuA*#G6&$Ywf$z0T=7^(a{0b)#el||VHLEp zZd>!vV7_BjIH2xY`_mk}XFW#8;J(#OJ@vp^i>u2+Yk$s|N7hp-kb7*kw}8+m*23kH zduE+aHTm3ngSOfW>$xtV>|?9Nq1V?|ARkEj**w=6SL$y&L4`iR<{Ao`fwtq^o*rb& z`VnP=ZBsaLhuA)5LT;Gt6fNZ8wkI0_M%X@$Muj77Yv@IevIR4CGul?YB+BA!CuSix z);4nua^q|rhaorK)~h|h1Y7lE;G1YG=6Q?4DYg|QAbYCK+#X`4+0N1ei?pqXjw z_y`=cY$s;`IoH;KzU4gIan6eQwl-CeTV$)j0kzonuCWas2w`h&8;p#0Q+qn9|L*7R1)SC><^4kb}|+IBb>Dm-KBFaXH2ws(F2=WJ~m z$hc^`cNip>Y>o3l=w;iQ6JWn$tNA+^uG%_rO}=KkMU&vBtxFG3-m-bNf$z5MmzBuf zvE8Tgx@+4~j{BeYY`>pC_P#AORsRE6E9?iDW8btGV6HtP01Wf&H8KOtw|k0V(@rd~H;)F# zLVM|!pjl+!R|~nt_N=sYm)Os@L2jx2r9Z$jd++Q3%k7z(0j#k9!pLTV{pYgaTWK$M z7hsir=Ngo)w!dWbX^s6Z_1s#!u>rt3yJs7aUi*F!~nznZHoB)gHj*Xq&w(-JRdX;+=Jdsm>QQ}%}gL2}xDy$<-#*ylI^&f2Rq1Iami3A)?o?e9~8?}ELd z6UdA9VjMG<>{=gCUbgS$qISieVjs$`+PA#t{JUmXspqcS7jSajuvf@{DsI}tY3bgw zJ2^aV+Z#3n$sPOG!r;Ga-_CJy&%S6YNbcJQ(>i-#AK*srq5U_G?nm}BR@D30&I6j_ ziM>P&kbm1>k3{aNeOx%eGkZ(;Q6BN!UeAr}3;Vv$pm}Lu9gLb@*{{=|dTn3Ef&9k4 zr!1tswFm7$**kkm1|Z+thjZ`pgZ=FrkbJZkJ_O_^d-Hh^_St@pitUTNIybAn+Pz%= z`Z&sPhWB-ZO#!l>!@$6!r@!Mg{p=ebM(KA+<3?KjsO!J zYvuz?bPVLcmmWv52cVhcC`Bu4vg5CH08<>*HlwDgj@gl*ndaC!9 za}3}V_d2%b26DaQ{sZuBa>VQN$MJRwa$6jIG68IN6k`oL94BDWh@Fm$3`Os8tn@Sk z|6a#eKVbcztR`J=$Jr#amg{Bv5LzMtu$m_aeR4%+*QZG8MHsIIobq* z=DMRjt-BkJ6!(C<>6la;xm%9FrQo>j&_06Xj-xRb&byACe6)LxR_yirj>VG!9ykiy zLGsWsWg{3KIf}vh5RV-{admj&7)EpOZ%2o^;Ct$5kQ&HmjuYt^|9tK!K~3?(QKJ|N zUpoBhd%SY|ITzryBg`MIc;k4K1tf1B>m*3tIYbAPy?1PnhnNqJtvr_V(XpBh{p4t# z63EYvbN4{<#c`0n>{rL+;o$4z%uM&BuQLVLuYS%E$7p}{ckbat7~s6hm3p8vvKlHJ zdJ?_3fEC-$U|@}bw)J-SmykLyQIsV zO}SOE!l_XACOA*OLD@>Di~(5X%rOsTtDUz;p=^!wITiUjXS;R)US|AZ9n$X(9qTr74w57EfmfJT|q@nIj*n-|w8G032|}j0HI8tXBkOhnyd3Aa~gLmXXpU&c{^GN1Zw7za4YF zUyF*4J3Z71C!EPV-26G|T)Y(El(V=I*wfD56~TDM*{c*t&pPYU{XFN)I0(q|&gnLQ z3(hpdQFhTeIS+(ha&~Qi+-2t|ZX8^3=3}JwsxvGda@U-zrXY9SIhp~r8&30Cu-|m< zqXBoznXEn4^lfLlSb#gudII3C^S3vUcF)<7y6C>s%$NSa`K~L#L#HhRz$535{t)xn z8TSt0iL>e|Q2y;aH69f{b=Le7$Y;*WlaPDv?8Qa#h4VNy(@W>raIn8}-lxm-+L^2- z{l7QPW8=W_*17903g0>VensJXr+p}LADrW=AotOEp+CSUXDvTS`|LDu?0j)PHv;+9 z`5`OV`?yMO0O;!qN`bO|t`S^!`@0&@${OH0|u>yF+FxPUb z;^D6DeEJbCd?g#x$<@CWz$jN`1<28^9GwBixQg_H>^N8S?*L<6Id1_u&b9U#z<8H6 z24I3~%{!D$be*9ACtW!>{U^DuP|ZztHQt5lr?|!x2bk)*&plYrG}muW!8qO3q9r(H zxJohZ8t)ob9~?7XO=#lIa&7*EvbnC;T!-el=5qqfcP(j&vIVZ9sgPUf+D;Q_k*nui zfW@wtoIgukt9dSGsjECghRa+n7Xi84wK^HV3Rh79WP-<)g&xpK*WvYGT;*!Q0kzsS ziblj5S0?@nV6AHudwrejEY+;nHI0Vcde=&tY#Utt_=Fo><2m6sx&9mvDVtpbe*)Oz zsx}FHTV3ZkMYp+zz}yhqT`5O{a)+xeO_7~0&yE}rv&$7X57^zVnVc(oT+!6sdtEcR zqr1;__B_CTS3hdD1Fq}!KyuL4lNQY(*X-p0hh6#kevi1W?Lh9RYk5w9W3G1`h{s)) z-%xhKwS?pGq-*CQNIB&Sd={?gPPF2zt4TL-oOAg#1;=@pq!Dq!)s)S@ z=$hIHB$r&}MuG9N%SCVhifcI?-K(w%G>@*iTn3O_cb%hWeZ$phHrQ{v{^Ve};=g^SL!kV_g&p~(*AtlT2dU~p{w|MFg|ka&JXa|70wmpiK{fNv%g(AgTepQ zRhBN-GuPwSKt6X}qB42m>OKVwFJ0!MD0}5) zM!5}GlRaXzyCw~cG47p=2*kPbUjWTm_w01YjdOS2hqCc*H%H(E_p$_(O?1y20i<*X za~+!GzA_QH$?lyTfm7V=yMS-1yDznit(g#fEP?!J=%*SJ3~ z0qI(I&VdlK&h26kdEHNG#IJW3ECt35?#3CA+vrY7PiBjIMo)mP?kDsewz;v zkjGi~q{^u9oI5X7=y~@#?#f+oPalcgMfb?60GHer&wjwm?oLO*c*TuBj)v*vj^c#B z<`x!!>+VmdfV|<(a~(o&{y!XDcU+a_`>u>i`x$5Ny*HYv*-}d@wbCq0vt62HOS8<8 zhpmWgSpu>IQQ3kZ8)YdVpaSAxsK}5hDu@EV>;C?AeXe^v&wI}MKKFW$;yCs?;Fe?H z|K?PVwiYbf>8L*h%R7!ddV|&F*y;=DcGRv0^f=n+4P~$64k{4tI(GKKz0Wag2cX}v zzKjC%fMYie^adT()JqRJE~C6X?D!P*L-!op??N}?7;+!F`?yp{rV~(q6?MIFqXJV&u$LTaidF;6DA{?GLesBi53CEsMz@+0#^pH(CYQLuQ=gbgM zHS5B#eF|`8geJhzjZyw07IkM7M*=(;vwg6kCnKsDu$Li|LAa0c&OEH<#n|=_U_WEF z7=GRirwr&0Ft&Pu`7qv@1_xip{mWR|j}iL{m_MUzCmaG8%6Dk~637T>gEE-$qY928 zjDK24ijMV~|9AY1Sj7@Y_jxnN7 z!X}yV%jeLgF#e@_J(ckiJ@RRcbUG^OjN#89%wVL_69mRxV zhT#-eD`Bu`?NY`94s>T2yQo}0%kaMjlQPC{bnnX59qel=rjKZG?5`+n+qY8g`(K`$`=pqO9B*h;NLJ!9X8fCh%=Z0vNAVTb@+ zVuW49+Lsw)boq^pE8oMRiQ!1!MKfdlDmYwW?5D`q!g#}srLQvn{S+qG7|SSMUuUeR zeQz)n>%m$X(e_!OZH(VsVcO1!J%TMd7!_*3O-A-^*xX{ArGDx*W7|ClI~fNzg56;h zQ$N(jh@pb2n=wUK*u#(r;LywHr53)QF+>+Sz<7~bra{IUs;q|?3n*9*Gq%&Wc8`%5 zYzG}-h-$IgeMa?j@PELFYk~41<3J2_qYR59*cfArA50!Gp3o$GoKZ^8<738~6fK`H z%F-a5V0iun;Ur^n2*N4G!I@yr%oGYDF3jI|!DK)4#au9NW>*~G0Q0Pj-v9YBc{KC$ zV`WeDZW(d6_ILZ8;qCggN6}9Qv%td%r=x~ZT*$K#D zniTNMWp+~2aGGhL$1;z(jlxboGl>N#VD{|-*bAB4=~R|5?@;h7Wu}b*&MIxzxKpcD?HE4_;=uUkNM4Nuo318DopM(pKpWk0n;G`@R0e+XAq7u3n>qcF@4kE{)l<# z6m;Xvb$0T9%*+hH+E19xFF-lL9L$2pB=b+Yqf^Z4%P?_fbGZ0>oppc?hX?B#z3TI1NxJ}hS?h+3+UNY+lOz@k{fd{`c4Ev5b*R2Iflods>B#E`U32=<{D~+O)Sv|8U|D~|1$uyN! zO$R8Al`MoZowc2!NCwN{WvrdW`bP*|HmfciaEdj)84fwDJgN+GSuHd#I?XEI1HvGP@ZE=qw?%LtNJ`v zt7fgZ3Rc5L%dA({ zLfFXq^;7sYvEHVRyqQ&42jLY~cr2iWb>TR`ewFoA0T#W+YWM|ko%IKm`!`sHH1=&} z&3_t;wz2-EWZcgBa}QSQU}tyA+0Pe8lZZPR$ourh} z&3ZE&!X8%lKCoWae}4n+vOc6DbYUmG1aM`)P1TtjTTBtgot<9liuR##T^LJkB06f}LP53c&Ws?2wZ%NnsBz1WRQV3dT_LmgTv)JoU9Qp|Rt4^zTE`X5Y6+3rYS4rkcb2EbW%CEb`Zw%2!H z$!7A7$nvGVnV|T;7ioN(buygF*cChp831k(!Lp58y9MT&032HiO*)wUi3+&(K z0qWREw*mF+bxQ#a>}vXEF0!2|Bwb=J+yS`Eo;r-38rgLpz@&-&`CgbbvqR|dxWfL8 zZdwbQ=>&F_y^Y3m*VvI)VR@Zh`Xa!7gPl&l2ySKXdI7YJ?d=4Qc6R>>EYrcBN#Wxr zTTG$!7JCf;4$R>;`-fKmo$Q_*2=B1NC<}M7r_tD{n;k&+zK89Y24OFI=T^X7_JXeg zeeCL4fPQw7A7Fr8D#0}k+Sv)e!DEP>PPN1^dy;Cld+dLXV(k&O^A!m1vujp?jk3R@ zfzKE_KLsX_*uU(6|2TWyAmA}u{55n>*xiX>6YTe?U!7!cxDGbO-nSMyXU_K&-&{E1 zRBO3%Y}B*3aqKE80NpwEd?-CQe{P4PCua{;qkB2g^qZc2oO$%HdU49@VX~jIq5~%0 zoKEV14sZl?ID9za9oWg2GxP~e{5aw&nD}#2sooCYEH;4!a`Ha|3*vCIU~-U?xCO#s z&K^6R$`H;%%J-q1>yg+gjPn5nxNuIl6~aRtk1t>n!TGoh5Xt$h5D>+YpTTN}IbE5s zjOLVyv1kk@kpWeR8FHat=}t&ad{oUf_wP3K56uv!Ku>vae-Ig5>OILS%71Ys8E z&StEg&6#}-mZvyD`(Tp83I7`=xtyr25T53|y$+UnoOu*k@;NR|^!}lMler(#Le2#y zJc>Bq^5Id;*|r+1m2hgQyDH`6FM`P#&MTAw&T`I3U|Gib_b&*`IgFoRQo*?p2v*4v z(QA_`&H@W8&v9mL0z1!HM#V=pXFnByHJn{<0cts~ze2x1yTCCW!fJIK#p{sPb6%K_ zeH%CrRDg>d8_mZqan{i94K8!^^!BBZ!=~`j#5vXjlV;99E8MSe`sp*ZaH6ijb!1q z7R>;3a(0fu|!fKKu2~JQH*d#~m37Fz^)d8Hj!~eq1g?nEE=E`-Uj@*sAg&rMu z?vK<^cyRAiMdHb|$53&(muoo!*vH*^08%e*?Gv#5T%!i2KHT}UzT_X!}B8%zan7JPSolC=p6WqfT6Oy_2tY9hJ(gZ*%cjh*_C28FAcVL>% zy}AuH8Qe0u&6(U9Z@@|JcM?DrcTxz;Y;NxV0Zwu2eg))khyCD?%XM1?_tV^Weurfq zx0qVYe6E>h4h7t`m9Q-2de9?V#N9;oaw*r1s;e{H4GhYEXSu8WVN=HSp)awV>rQ98 zf;)rmNF}!{48khzl5b#gj@$l!VCT8t-2qf{Gbx$ZaJNv@tL4TofWrmuca-DmxXIMv z)^k@=S=PYKk;3F6SNAF$E^%|{2QQbo8WiDnhemGAZYZ0$&O$ggbKj-Ve}#LKvQrCp z3uV)*++XRgUE@AO;rTk(LKDjy+?;r@R_@OAjm;7*J|cau9pP3$f1 zE(J_(bD7jUcXGGV1n&;Fbu*Z~i(8oi+ReRAFX?)?QS`9&a>J;4xXWF32GGatcns5i zZY71Z0d6e?ib1ZG?)?z=g>Ea~ z{z5JBI5)BfCXemhWjk@fPq@{cSbKt-OYvrsd!rFB#eIzyb>>yG0WQ4m9+}q)-gYgN0lZu~T!Fl2UV}{#Z?h6M2YE}Ufd%u5spJdcxjh04H}VY}VtJ?RZBWMX zcDn=OdA(o5;|Q&DVl@S^BU@%F9+yUkBHRNg}#ktx_C8D!>^mSl8TQW-Z$rP*}c5q)DYg~1$YAb zcsd$8_48~2FnP%Hqd+mrOMe|g`xwt}9q1$8%o@;fUIgW#$GpIM*y0KAHZ@=qyy>$b zoaD`-LD3ZN2kL8_`RT22aN$2)1m?=WM|HXzf9n8*?)+OcQ}y8Qphw=5zcdJ|?B(BJ z0`~FMJeYX#vuG@_-_Gx#8q=G=@aIVYzWiva#r^nO*22`E{}a;h#MTVJLro5Lg)h{!I9V^9QL+ImG8n!6Nvo z`*4rs+w(?X6UFD$!s9T1lyY1&|CdTY4F9cW*u?U`od%CM{#7xA@qEkMfFt}<3*nc* z|4|7@3K}%htP~Mg`Z9xTPi=$PTxWr zpH&6ZbpBe(Tp4_KYJ@WRlb-@k@*mQZpT+lE1IXbgQ!Ag#zxOVdIn7rNL72y1@Gl^r zKg@=(fFC&pR>-?Hqa;(!Po&&f!~fC;JJs?B{sp_h7f{7m z$G>A7@kj*~qUe1a0EK5eb`S{<(5&ah3lQ zrPyoytu%|e&VQK!;SIi-GC(VT`6*bo@%{gRuALuS0oK94`oCU@UqzF{PJYQQz#V=| zE=;=kTWFfu&A&Jb*25nQ2J7XoT|oWcUH%8ur1kN$1%Q5j`bNM2pGo7NLHD-4GOG1!jIh!xX*w4IN$-FORwA>@*Al@80F`@hMmUvewA>4#IK`-JI)WI z-s3S}^%6{;@Od=uwNLPGQJkCPa}W(2rug}*A$1mbYQbCtGpLqu6}@?dVCy=teFB%qu=En#{Tr}f@K+2L^A@~+2D$@+czW`E1hq=&d7XWfnPG{h+y*`zp{~ zrg`AFplJ^-|FMAeC*X-dNxwIk5*(qn*IC#>{e_FLXb&9Rg*5>%@er2MBkw8PMK{J* zXi)(Cgwd^V@E0DZC(s@wd?Bz6uGj!LBK#m2kRY5*oo1r&7mANZg^pX{ zkR%-CgPpJor;h=Xg)K`UO%WOY)b%?2|XxWl?z+{#L^YQ!xSMZh4%kw zK5$N$dKdJ(FrWjARtw*X1=I+?qyb8;@NqO&yC8h(Q?Lf1f{Me7Lbd?xl2At#_GRHn z2!xHo^c7%D!n{sEv+&XxEPX}zB{k1ig(cen*MuSpW!HsQsGe#Q{%OAjX}i#!YU&Q* zuU|lVQ+SRZnKDL`4_DJVn!92iq%JLp}ID(Rn$p!b^0CDyaRUGv9%Ei?-6p z(MP0ghJ&vtHV({BRKF8Cf05&lfB=y#k@8=l$lL~HkZ8+)Fg+-82ml0&W+h|o5YdLY zfKZVWMYeF!=S5(LL~HJWMTlDFV#7$$s}}%KB55F2IV}4823WL6mJ5>@5z;1}PSKlg z@QV|jnGc8;g-{eYBC27vSIFv$>gP=lQ*Qg4TQmMDD_Shnaby6LAxei4AvqLq||^F+a4LYFT( zM3-G4I`arZd!a~p6pqEB&N|Q%k;fpEr6P}40cE0Y>MhGfo8HGx6(XO-5LSwuC^S@w z^ucgACn~1G=DeuH0%48l4SHs3MekFTzaT20vb#=nIS7{ZqJQZpPz|CoirE)M{>d=8 zWEV~R0Oe)T93h}tG@pi)S40(MFl`aNPQQ4$Dq2g&;hJc05lpU&mSzB2MI|p{nKn@h z1;2JtUoV6mqGUSvH$@YP@Vh0N^#HotqL=;v>lE!C0lOorxC`hK{g(q_x5&=g2*)1L zvxC^TS5%r0X}_rV1;Bvl+Xv7Miq4Cm8y0=~6yTnSa}vV)qR?Wn2cqXrVYP=MJ0-4B z(JHFb$3%uQ2**V$odJ(UGw4BlB1)sCV?s2L1CvQn^+{Z)i`dt`7)n?18S0?i#Lq{; z!(CkTIlx0ajcPVe@y^XK*(=trgo&4Ul0L*6u-XCf$2M5{h#&m{@D=mU z!og4MNl(7NSV=E91H_l9WD69ZRY4de_Iw5=2gOGQ?T`kG)9AWG#8nipLdE&dLU>5L zdnbeuVn!KQr1w!s}*i{T+yx36);Sq7}vw#F~ z7k#8eaY8lVsCf1-uuKwn(zks=%=nx7zhv>#)C;7DdDJeXiYvlknkKH=4byaSJ%!*5 zaWOq?nc_5R1x||J+XToGM^SRi7I#cRcS>xbLBwhCT`G_A#C`NU=8LN+-xr9}XaZj- z9;SY^NW6<)gcXZ_MLf4Vl!)ii#I#gw4#)Oq#7X~$WzLG*so5zLze>+ex%m1)K!sRL zH>OhDM&p4h@$GY1=A8Je4bYtz|4PMswb(*2tVS$+2JW?D?nA73LHq?hxpiU|oy~f2 zH@(Vf5dZeS^LJ7FA-%o1Bz8%I&1LZ~3!rQir%~Q*68}~Kk7n_IOCY==UQR7>i`cUX zmRH49QCRz$xYP&ix_BpsNe(x}{OMq=;u9NT*(O$8fl0e~D^(;NV#6m`?56lD`nqn3 zb14ekwu^T%;n*o|q{`xsc%~~@m-yjYcyxkSGA|FNev(otn7>3v#bJPC@;=x>32z59jAY|>%73wvW^YL2BzpSt<0VI^U_K&= z=z?Q{gV6DA{=lCYL0;sj9myxk%qrqvW~^bWM`} zkFjR6#4`cxilmedy1hm64L#3SC9?}*dP6cqr?FM?Rx6-G^2}*?+?2%QN*!)VoJFv_ zEt!1@&?$L`V!|EChbQ6JCD}o&Te6iRQ;%dX6#=~xR}pk~C08g(^hw-2VbU*ob2;1x zB>Etj4B9208=)MM2seWcOQLDCdrxwQ+M^MPoW7F#lDK|&JdoU^2l1h#j|(;`5%gj0 zG0FDJFnJ`I-3Z;dq-iE}k0te#Bqk-BngCOhZ``q%tMnf$EZwC0q9Jsbj?=`^Luy}3 zAq@x-NjwNBR;?t$d|rbVvN8 zAJb{{mv$9E7a(2qJ}d*JZ@mo&k|x=pJ19Lr8@gcWeF+u|kw)HuFjQJ>{}j?NsaGJR z;nG!<9u7&HsK1Di8c`oPL`r|4;bfFlLgTW-(r4)S#7Q61 z3z~STgl1<)q#C++3DN_U|B|G~>u{mRq}mU_j!WNk0GyEi{07ZmlBMeR04Y)l6Vg=a zb0=V$CY|vtgz3^kN|l+?~sWl7^+hGn+Yz7Xt`G$#%$SGtoPuhY`|8z9V+ zwjRPYf!*XkPNJbV0Je=^focS)~fXU|9=&zacV@a#)7S z?1j`%g~^hZ!!%r$LPLW?vOnnx@b^zR8~(BJV}Pm2T#82Jxa7EWD5$gO0ulk2@WZ;S@t5(R9WT= zpcyg_g_cZNMlqH-DO*LcJ6pDohHj^1+i4z=BRl#tOmbyM)_~>9R@30KK(>*3_d;0> zeTZUNFFmUzG7o?FmC6>JgYb;(AG&GfvTqw9tdO;o04inqODO+U$=t-C=VUPy8PCfS zZ1As^si;t>ksYG8s#X^B7vO@d=X1EG+p=$y==^ocUZqFxj_m1mPu_I zC(7|hv+=CUSMXqxB%ihn?3lb=4c&41`&w9@kQcrQU9x-{u@rgh|5|DJ-#V}~xjk(w zK3ckbaXK6`l8UES0yK;de%!bq2z-az}eQ7A=!M6Ambs z`#%e)kY7uOO{Kj2W3VcD-;02A@&RWodS1SPvQoAD6FQL%?8xT zU*yB2US3X7zCoV573`wib_j4uzV&$sFUxstfJS*<1@(VT@)`7)G|PYZ8*oKFjRJFv zJcUZttMdP7`)hJ5<%8>T^$6gGJn{~Nt@5fD;Ls+w&~0j$n`7b7ACb;`>R0Pe_FPzLCdZ@x|aU$4BDMjm(NU(gZnlWP&M90uhfR00jj&$FN# zmOrMLa8G`2Hx?a{@1=x$U*7Z~*aP_++0Z?dyHH3Qm7nf_ZcM)76~H6;?`t6(mnYKO zgvav3l(?SATlyiKkjF<-{W&RLKqqHP{v$itE(?cf}F< z>6M2fiZZRI!ksewUd3$MaGxTDGLM&H-$DrYE2dZgZ-o;TTL%ajQln?7K?;@46Lk0{<*4@gk3Z^JUt zuE5{N!U0mOErCsvVx}L~KBj1*WN}>ao+E5dD8^~EWW~PMAxu%coB~KywA4eFrg&-& zAYGy9g+D5q8`ZtMe8DYQ$l$~i@)3hcbX(=LZcwPH5aDK(1k%K){C z8==_nf?@}?pLGf)8&I!s$cC^%F-dPhE-FmlfL&6^=73#R^k2tnjf(3O6PgsydqCK% zP$hs}QMkT=4OGob#7`(Upm<1i>qABJ3-tS!QN`ZXxY9Ajho8apk;422Y{nH=MPQE=hF_t3 zqR6A*H=%g*7GP4*qQPoYir<>SoR!~Kz{Ev4B>{6)UN45bo3e|l26yHBJ}?jEJZiZ- zmHA5{+^hWN3M}_26)02e4qnQXHIVLCwo&Eit^66YDTf2f7bvIuDBbtN)K~c)9e6)w z809g4r6-M#0+fmLK?9Y~YM={Jes&8E2bGoIfdwnuX*3j~41W#~s!Ul7VVLrFY9_;# zpG5)=DaE4@+9Q-12GB_5E<^)|DCJCgJY$squ7faE+44Ddic=<1s*G2%BH?jF8L$M` zl%O1X3Bp8W6IIwpmBUo6Bq>v=sywFLPEW~k

4)6Uq%VS4&o!k3pECtSrVVsmj`C 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

{5gJ(S80H1sHE$Y;rIz^cp@_u>~ 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 C$5VU& diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.map b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.map index b7c2f1fa..83824a0a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.map +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.map @@ -1,245 +1,232 @@ - -bin/demoprog_stm32f051.elf: file format elf32-littlearm -bin/demoprog_stm32f051.elf -architecture: arm, flags 0x00000112: -EXEC_P, HAS_SYMS, D_PAGED -start address 0x08002000 - -Program Header: -0x70000001 off 0x000035b0 vaddr 0x080035b0 paddr 0x080035b0 align 2**2 - filesz 0x00000008 memsz 0x00000008 flags r-- - LOAD off 0x00000000 vaddr 0x08000000 paddr 0x08000000 align 2**16 - filesz 0x000035b8 memsz 0x000035b8 flags r-x - LOAD off 0x000100c0 vaddr 0x200000c0 paddr 0x080035b8 align 2**16 - filesz 0x0000006c memsz 0x0000014c flags rw- -private flags = 5000200: [Version5 EABI] [soft-float ABI] - -Sections: -Idx Name Size VMA LMA File off Algn - 0 .text 000015b0 08002000 08002000 00002000 2**2 - CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .ARM.exidx 00000008 080035b0 080035b0 000035b0 2**2 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 2 .data 0000006c 200000c0 080035b8 000100c0 2**2 - CONTENTS, ALLOC, LOAD, DATA - 3 .bss 000000e0 2000012c 08003624 0001012c 2**2 - ALLOC - 4 .stack_dummy 00000100 20000210 20000210 00010130 2**3 - CONTENTS, READONLY - 5 .ARM.attributes 00000028 00000000 00000000 00010230 2**0 - CONTENTS, READONLY - 6 .comment 0000006e 00000000 00000000 00010258 2**0 - CONTENTS, READONLY - 7 .debug_line 00004985 00000000 00000000 000102c6 2**0 - CONTENTS, READONLY, DEBUGGING - 8 .debug_info 00004db5 00000000 00000000 00014c4b 2**0 - CONTENTS, READONLY, DEBUGGING - 9 .debug_abbrev 000011b1 00000000 00000000 00019a00 2**0 - CONTENTS, READONLY, DEBUGGING - 10 .debug_aranges 00000530 00000000 00000000 0001abb8 2**3 - CONTENTS, READONLY, DEBUGGING - 11 .debug_ranges 00000478 00000000 00000000 0001b0e8 2**0 - CONTENTS, READONLY, DEBUGGING - 12 .debug_macro 0000e9fd 00000000 00000000 0001b560 2**0 - CONTENTS, READONLY, DEBUGGING - 13 .debug_str 0004d4cd 00000000 00000000 00029f5d 2**0 - CONTENTS, READONLY, DEBUGGING - 14 .debug_frame 00000c3c 00000000 00000000 0007742c 2**2 - CONTENTS, READONLY, DEBUGGING - 15 .debug_loc 0000217b 00000000 00000000 00078068 2**0 - CONTENTS, READONLY, DEBUGGING -SYMBOL TABLE: -08002000 l d .text 00000000 .text -080035b0 l d .ARM.exidx 00000000 .ARM.exidx -200000c0 l d .data 00000000 .data -2000012c l d .bss 00000000 .bss -20000210 l d .stack_dummy 00000000 .stack_dummy -00000000 l d .ARM.attributes 00000000 .ARM.attributes -00000000 l d .comment 00000000 .comment -00000000 l d .debug_line 00000000 .debug_line -00000000 l d .debug_info 00000000 .debug_info -00000000 l d .debug_abbrev 00000000 .debug_abbrev -00000000 l d .debug_aranges 00000000 .debug_aranges -00000000 l d .debug_ranges 00000000 .debug_ranges -00000000 l d .debug_macro 00000000 .debug_macro -00000000 l d .debug_str 00000000 .debug_str -00000000 l d .debug_frame 00000000 .debug_frame -00000000 l d .debug_loc 00000000 .debug_loc -00000000 l df *ABS* 00000000 obj/startup_stm32f0xx.o -00000100 l *ABS* 00000000 Stack_Size -00000000 l *ABS* 00000000 Heap_Size -080021b6 l .text 00000000 .flash_to_ram_loop_end -080021ac l .text 00000000 .flash_to_ram_loop -080021e4 l .text 00000000 .fill_zero_bss -080021e0 l .text 00000000 .loop_zero_bss -00000000 l df *ABS* 00000000 crtstuff.c -080035ac l O .text 00000000 __EH_FRAME_BEGIN__ -080020c4 l F .text 00000000 __do_global_dtors_aux -2000012c l .bss 00000000 completed.8603 -20000128 l O .data 00000000 __do_global_dtors_aux_fini_array_entry -080020ec l F .text 00000000 frame_dummy -20000130 l .bss 00000000 object.8608 -20000124 l O .data 00000000 __frame_dummy_init_array_entry -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv6-m/crt0.o -00000000 l df *ABS* 00000000 timer.c -00000000 l df *ABS* 00000000 main.c -08002280 l F .text 0000004c SystemClock_Config -080022cc l F .text 00000014 Init -00000000 l df *ABS* 00000000 system_stm32f0xx.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_uart.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_gpio.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_cortex.c -00000000 l df *ABS* 00000000 stm32f0xx_hal.c -00000000 l df *ABS* 00000000 _exit.c -00000000 l df *ABS* 00000000 led.c -20000148 l O .bss 00000004 timer_counter_last.6492 -2000014c l O .bss 00000001 led_toggle_state.6491 -00000000 l df *ABS* 00000000 boot.c -08003290 l F .text 0000002c BootComUartInit -080032bc l F .text 00000020 UartReceiveByte -08003300 l F .text 0000009c BootComUartCheckActivationRequest -20000150 l O .bss 00000004 xcpCtoRxStartTime.6510 -20000154 l O .bss 00000070 uartHandle -200001c4 l O .bss 00000041 xcpCtoReqPacket.6507 -20000205 l O .bss 00000001 xcpCtoRxLength.6508 -20000206 l O .bss 00000001 xcpCtoRxInProgress.6509 -00000000 l df *ABS* 00000000 _udivsi3.o -080033a4 l .text 00000000 .udivsi3_skip_div0_test -00000000 l df *ABS* 00000000 _dvmd_tls.o -00000000 l df *ABS* 00000000 exit.c -00000000 l df *ABS* 00000000 init.c -00000000 l df *ABS* 00000000 memcpy-stub.c -00000000 l df *ABS* 00000000 memset.c -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv6-m/crti.o -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv6-m/crtn.o -00000000 l df *ABS* 00000000 impure.c -200000c4 l O .data 00000060 impure_data -00000000 l df *ABS* 00000000 crtstuff.c -080035ac l O .text 00000000 __FRAME_END__ -00000000 l df *ABS* 00000000 -20000128 l .data 00000000 __init_array_end -20000124 l .data 00000000 __preinit_array_end -20000124 l .data 00000000 __init_array_start -20000124 l .data 00000000 __preinit_array_start -08003580 g O .text 00000008 APBPrescTable -20000210 g .stack_dummy 00000000 __HeapBase -00000000 g *ABS* 00000000 __HEAP_SIZE -200000c0 g .data 00000000 __data_start__ -08002f48 g F .text 00000020 HAL_RCC_GetPCLK1Freq -080030fc g F .text 00000064 HAL_NVIC_SetPriority -08002216 w F .text 00000002 TIM1_CC_IRQHandler -080021f0 w F .text 00000002 HardFault_Handler -08002212 w F .text 00000002 ADC1_COMP_IRQHandler -08002274 g F .text 0000000c SysTick_Handler -080030f0 g F .text 0000000c HAL_GPIO_WritePin -080021fc w F .text 00000002 PVD_IRQHandler -08002f3c g F .text 0000000c HAL_RCC_GetHCLKFreq -080021f4 w F .text 00000002 PendSV_Handler -080021ee w F .text 00000002 NMI_Handler -080035b8 g .ARM.exidx 00000000 __exidx_end -08002d74 g F .text 00000068 HAL_RCC_GetSysClockFreq -08002228 w F .text 00000002 I2C1_IRQHandler -080035b8 g .ARM.exidx 00000000 __etext -080022f4 g F .text 000000a8 HAL_MspInit -080031b8 w F .text 00000002 HAL_SYSTICK_Callback -08002f68 g F .text 00000188 HAL_GPIO_Init -08003534 g F .text 00000012 memcpy -200000c0 g O .data 00000004 SystemCoreClock -080033a4 g F .text 0000010a .hidden __udivsi3 -20000210 g .stack_dummy 00000000 __HeapLimit -2000012c g .bss 00000000 __bss_start__ -0800222c w F .text 00000002 SPI1_IRQHandler -0800221c w F .text 00000002 TIM6_DAC_IRQHandler -08002400 g F .text 000001b4 UART_SetConfig -20000208 g O .bss 00000004 uwTick -08003160 g F .text 00000038 HAL_SYSTICK_Config -080035b0 g .text 00000000 __exidx_start -080035a8 g O .text 00000004 _global_impure_ptr -080034e8 g F .text 0000004c __libc_init_array -08002234 w F .text 00000002 USART3_4_IRQHandler -08002124 g F .text 00000000 _mainCRTStartup -08002206 w F .text 00000002 EXTI2_3_IRQHandler -08003558 g F .text 00000000 _init -0800222a w F .text 00000002 I2C2_IRQHandler -080032e4 g F .text 0000001c BootActivate -08002226 w F .text 00000002 TIM17_IRQHandler -00000000 w *UND* 00000000 __libc_fini_array -080021fe w F .text 00000002 RTC_IRQHandler -08002700 g F .text 00000110 HAL_UART_Receive -0800219c g F .text 0000003c Reset_Handler -080031e8 g F .text 00000020 HAL_Init -08002694 g F .text 0000006c UART_WaitOnFlagUntilTimeout -08003228 g F .text 00000014 LedInit -080025b4 g F .text 000000e0 UART_AdvFeatureConfig -00000000 w *UND* 00000000 __sf_fake_stderr -00000000 w *UND* 00000000 __deregister_frame_info -20000210 g .stack_dummy 00000000 end -2000012c g .data 00000000 __data_end__ -08002224 w F .text 00000002 TIM16_IRQHandler -2000020c g .bss 00000000 __bss_end__ -00000100 g *ABS* 00000000 __STACK_SIZE -0800221a w F .text 00000002 TIM3_IRQHandler -08002208 w F .text 00000002 EXTI4_15_IRQHandler -08002202 w F .text 00000002 RCC_IRQHandler -00000000 w *UND* 00000000 __call_exitprocs -0800220c w F .text 00000002 DMA1_Channel1_IRQHandler -080021f8 w F .text 00000002 Default_Handler -08002124 g F .text 00000000 _start -08003570 g O .text 00000010 AHBPrescTable -08002810 g F .text 00000078 UART_CheckIdleState -08002236 w F .text 00000002 CEC_IRQHandler -08002220 w F .text 00000002 TIM14_IRQHandler -08002210 w F .text 00000002 DMA1_Channel4_5_IRQHandler -08002ddc g F .text 00000160 HAL_RCC_ClockConfig -00000000 w *UND* 00000000 software_init_hook -0800221e w F .text 00000002 TIM7_IRQHandler -08002222 w F .text 00000002 TIM15_IRQHandler -08002204 w F .text 00000002 EXTI0_1_IRQHandler -08002238 w F .text 00000002 USB_IRQHandler -080034b8 w F .text 00000002 .hidden __aeabi_ldiv0 -08003218 w F .text 0000000c HAL_GetTick -0800222e w F .text 00000002 SPI2_IRQHandler -00000000 w *UND* 00000000 __sf_fake_stdin -08003546 g F .text 00000010 memset -08002000 g .text 000000c4 __isr_vector -080022e0 g F .text 00000014 main -080033a4 g F .text 00000000 .hidden __aeabi_uidiv -080021f2 w F .text 00000002 SVC_Handler -00000000 w *UND* 00000000 hardware_init_hook -20000210 g .stack_dummy 00000000 __end__ -080032dc g F .text 00000008 BootComInit -0800239c g F .text 00000060 SystemInit -08003564 g F .text 00000000 _fini -080023fc w F .text 00000002 HAL_UART_MspInit -00000000 w *UND* 00000000 atexit -080031c4 w F .text 00000024 HAL_InitTick -20002000 g .bss 00000000 __StackTop -08003208 w F .text 00000010 HAL_IncTick -0800220a w F .text 00000002 TS_IRQHandler -080021fa w F .text 00000002 WWDG_IRQHandler -0800323c g F .text 00000054 LedToggle -08002218 w F .text 00000002 TIM2_IRQHandler -0800220e w F .text 00000002 DMA1_Channel2_3_IRQHandler -08003198 g F .text 00000020 HAL_SYSTICK_CLKSourceConfig -20002000 g *ABS* 00000000 __stack -080034b0 g F .text 00000008 .hidden __aeabi_uidivmod -20001f00 g *ABS* 00000100 __StackLimit -08002232 w F .text 00000002 USART2_IRQHandler -080028f4 g F .text 00000480 HAL_RCC_OscConfig -080034bc g F .text 0000002c exit -00000000 w *UND* 00000000 __sf_fake_stdout -0800339c g F .text 00000008 BootComCheckActivationRequest -080034b8 w F .text 00000002 .hidden __aeabi_idiv0 -08002200 w F .text 00000002 FLASH_IRQHandler -08003224 w F .text 00000002 _exit -08002230 w F .text 00000002 USART1_IRQHandler -080031bc g F .text 00000008 HAL_SYSTICK_IRQHandler -08002888 g F .text 0000006c HAL_UART_Init -08002214 w F .text 00000002 TIM1_BRK_UP_TRG_COM_IRQHandler -0800226c g F .text 00000008 TimerGet -00000000 w *UND* 00000000 _Jv_RegisterClasses -08002244 g F .text 00000026 TimerInit -00000000 w *UND* 00000000 __register_frame_info - - + +bin/demoprog_stm32f051.elf: file format elf32-littlearm +bin/demoprog_stm32f051.elf +architecture: armv6s-m, flags 0x00000112: +EXEC_P, HAS_SYMS, D_PAGED +start address 0x08002000 + +Program Header: +0x70000001 off 0x00003574 vaddr 0x08003574 paddr 0x08003574 align 2**2 + filesz 0x00000008 memsz 0x00000008 flags r-- + LOAD off 0x00000000 vaddr 0x08000000 paddr 0x08000000 align 2**16 + filesz 0x0000357c memsz 0x0000357c flags r-x + LOAD off 0x000100c0 vaddr 0x200000c0 paddr 0x0800357c align 2**16 + filesz 0x0000006c memsz 0x0000014c flags rw- +private flags = 5000200: [Version5 EABI] [soft-float ABI] + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 00001574 08002000 08002000 00002000 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .ARM.exidx 00000008 08003574 08003574 00003574 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 2 .data 0000006c 200000c0 0800357c 000100c0 2**2 + CONTENTS, ALLOC, LOAD, DATA + 3 .bss 000000e0 2000012c 080035e8 0001012c 2**2 + ALLOC + 4 .stack_dummy 00000100 20000210 20000210 00010130 2**3 + CONTENTS, READONLY + 5 .ARM.attributes 00000028 00000000 00000000 00010230 2**0 + CONTENTS, READONLY + 6 .comment 00000075 00000000 00000000 00010258 2**0 + CONTENTS, READONLY + 7 .debug_line 00006842 00000000 00000000 000102cd 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_info 0000b509 00000000 00000000 00016b0f 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_abbrev 00001f44 00000000 00000000 00022018 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_aranges 00000530 00000000 00000000 00023f60 2**3 + CONTENTS, READONLY, DEBUGGING + 11 .debug_str 0004e43e 00000000 00000000 00024490 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_loc 00002a2b 00000000 00000000 000728ce 2**0 + CONTENTS, READONLY, DEBUGGING + 13 .debug_ranges 000004c0 00000000 00000000 000752f9 2**0 + CONTENTS, READONLY, DEBUGGING + 14 .debug_macro 0000ed96 00000000 00000000 000757b9 2**0 + CONTENTS, READONLY, DEBUGGING + 15 .debug_frame 00000c14 00000000 00000000 00084550 2**2 + CONTENTS, READONLY, DEBUGGING +SYMBOL TABLE: +08002000 l d .text 00000000 .text +08003574 l d .ARM.exidx 00000000 .ARM.exidx +200000c0 l d .data 00000000 .data +2000012c l d .bss 00000000 .bss +20000210 l d .stack_dummy 00000000 .stack_dummy +00000000 l d .ARM.attributes 00000000 .ARM.attributes +00000000 l d .comment 00000000 .comment +00000000 l d .debug_line 00000000 .debug_line +00000000 l d .debug_info 00000000 .debug_info +00000000 l d .debug_abbrev 00000000 .debug_abbrev +00000000 l d .debug_aranges 00000000 .debug_aranges +00000000 l d .debug_str 00000000 .debug_str +00000000 l d .debug_loc 00000000 .debug_loc +00000000 l d .debug_ranges 00000000 .debug_ranges +00000000 l d .debug_macro 00000000 .debug_macro +00000000 l d .debug_frame 00000000 .debug_frame +00000000 l df *ABS* 00000000 obj/startup_stm32f0xx.o +00000100 l *ABS* 00000000 Stack_Size +00000000 l *ABS* 00000000 Heap_Size +0800219e l .text 00000000 .flash_to_ram_loop_end +08002194 l .text 00000000 .flash_to_ram_loop +080021cc l .text 00000000 .fill_zero_bss +080021c8 l .text 00000000 .loop_zero_bss +00000000 l df *ABS* 00000000 crtstuff.c +08003570 l O .text 00000000 __EH_FRAME_BEGIN__ +080020c4 l F .text 00000000 __do_global_dtors_aux +2000012c l .bss 00000001 completed.8879 +20000128 l O .data 00000000 __do_global_dtors_aux_fini_array_entry +080020ec l F .text 00000000 frame_dummy +20000130 l .bss 00000018 object.8884 +20000124 l O .data 00000000 __frame_dummy_init_array_entry +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o +00000000 l df *ABS* 00000000 system_stm32f0xx.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_cortex.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_gpio.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_uart.c +00000000 l df *ABS* 00000000 stm32f0xx_hal.c +00000000 l df *ABS* 00000000 _exit.c +00000000 l df *ABS* 00000000 timer.c +00000000 l df *ABS* 00000000 led.c +20000148 l O .bss 00000001 led_toggle_state.6577 +2000014c l O .bss 00000004 timer_counter_last.6578 +00000000 l df *ABS* 00000000 main.c +08003150 l F .text 0000004c SystemClock_Config +0800319c l F .text 00000014 Init +00000000 l df *ABS* 00000000 boot.c +0800326c l F .text 00000030 BootComRs232Init +0800329c l F .text 00000020 Rs232ReceiveByte +080032e0 l F .text 00000098 BootComRs232CheckActivationRequest +20000150 l O .bss 00000070 rs232Handle +200001c0 l O .bss 00000041 xcpCtoReqPacket.6593 +20000201 l O .bss 00000001 xcpCtoRxInProgress.6595 +20000202 l O .bss 00000001 xcpCtoRxLength.6594 +20000204 l O .bss 00000004 xcpCtoRxStartTime.6596 +00000000 l df *ABS* 00000000 _udivsi3.o +08003380 l .text 00000000 .udivsi3_skip_div0_test +00000000 l df *ABS* 00000000 _dvmd_tls.o +00000000 l df *ABS* 00000000 exit.c +00000000 l df *ABS* 00000000 init.c +00000000 l df *ABS* 00000000 memset.c +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/thumb/v6-m/nofp/crti.o +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/thumb/v6-m/nofp/crtn.o +00000000 l df *ABS* 00000000 impure.c +200000c4 l O .data 00000060 impure_data +00000000 l df *ABS* 00000000 crtstuff.c +08003570 l O .text 00000000 __FRAME_END__ +00000000 l df *ABS* 00000000 +20000128 l .data 00000000 __init_array_end +20000124 l .data 00000000 __preinit_array_end +20000124 l .data 00000000 __init_array_start +20000124 l .data 00000000 __preinit_array_start +08003544 g O .text 00000008 APBPrescTable +20000210 g .stack_dummy 00000000 __HeapBase +00000000 g *ABS* 00000000 __HEAP_SIZE +200000c0 g .data 00000000 __data_start__ +080028b8 g F .text 00000020 HAL_RCC_GetPCLK1Freq +080028d8 g F .text 00000064 HAL_NVIC_SetPriority +080021fe w F .text 00000002 TIM1_CC_IRQHandler +080021d8 w F .text 00000002 HardFault_Handler +080021fa w F .text 00000002 ADC1_COMP_IRQHandler +080030dc g F .text 0000000c SysTick_Handler +08002b2c g F .text 0000000c HAL_GPIO_WritePin +080021e4 w F .text 00000002 PVD_IRQHandler +080028ac g F .text 0000000c HAL_RCC_GetHCLKFreq +080021dc w F .text 00000002 PendSV_Handler +080021d6 w F .text 00000002 NMI_Handler +0800357c g .ARM.exidx 00000000 __exidx_end +080026e4 g F .text 00000070 HAL_RCC_GetSysClockFreq +08002210 w F .text 00000002 I2C1_IRQHandler +0800357c g .ARM.exidx 00000000 __etext +080031c4 g F .text 000000a8 HAL_MspInit +08002994 w F .text 00000002 HAL_SYSTICK_Callback +080029a0 g F .text 0000018c HAL_GPIO_Init +200000c0 g O .data 00000004 SystemCoreClock +08003380 g F .text 0000010a .hidden __udivsi3 +20000210 g .stack_dummy 00000000 __HeapLimit +2000012c g .bss 00000000 __bss_start__ +08002214 w F .text 00000002 SPI1_IRQHandler +08002204 w F .text 00000002 TIM6_DAC_IRQHandler +08002b3c g F .text 000001c4 UART_SetConfig +20000208 g O .bss 00000004 uwTick +0800293c g F .text 00000038 HAL_SYSTICK_Config +08003574 g .text 00000000 __exidx_start +0800356c g O .text 00000004 _global_impure_ptr +080034c4 g F .text 00000048 __libc_init_array +0800221c w F .text 00000002 USART3_4_IRQHandler +0800210c g F .text 00000000 _mainCRTStartup +080021ee w F .text 00000002 EXTI2_3_IRQHandler +0800351c g F .text 00000000 _init +08002212 w F .text 00000002 I2C2_IRQHandler +080032c4 g F .text 0000001c BootActivate +0800220e w F .text 00000002 TIM17_IRQHandler +080021e6 w F .text 00000002 RTC_IRQHandler +08002e4c g F .text 00000118 HAL_UART_Receive +08002184 g F .text 0000003c Reset_Handler +08003070 g F .text 00000020 HAL_Init +080030e8 g F .text 00000014 LedInit +08002de0 g F .text 0000006c UART_WaitOnFlagUntilTimeout +08002d00 g F .text 000000e0 UART_AdvFeatureConfig +20000210 g .stack_dummy 00000000 end +2000012c g .data 00000000 __data_end__ +0800220c w F .text 00000002 TIM16_IRQHandler +2000020c g .bss 00000000 __bss_end__ +00000100 g *ABS* 00000000 __STACK_SIZE +08002202 w F .text 00000002 TIM3_IRQHandler +080021f0 w F .text 00000002 EXTI4_15_IRQHandler +080021ea w F .text 00000002 RCC_IRQHandler +080021f4 w F .text 00000002 DMA1_Channel1_IRQHandler +080021e0 w F .text 00000002 Default_Handler +0800210c g F .text 00000000 _start +08003534 g O .text 00000010 AHBPrescTable +08002f64 g F .text 00000078 UART_CheckIdleState +0800221e w F .text 00000002 CEC_IRQHandler +08002208 w F .text 00000002 TIM14_IRQHandler +080021f8 w F .text 00000002 DMA1_Channel4_5_IRQHandler +08002754 g F .text 00000158 HAL_RCC_ClockConfig +08002206 w F .text 00000002 TIM7_IRQHandler +0800220a w F .text 00000002 TIM15_IRQHandler +080021ec w F .text 00000002 EXTI0_1_IRQHandler +08002220 w F .text 00000002 USB_IRQHandler +08003494 w F .text 00000002 .hidden __aeabi_ldiv0 +080030a0 w F .text 0000000c HAL_GetTick +08002216 w F .text 00000002 SPI2_IRQHandler +0800350c g F .text 00000010 memset +08002000 g .text 000000c4 __isr_vector +080031b0 g F .text 00000014 main +08003380 g F .text 00000000 .hidden __aeabi_uidiv +080021da w F .text 00000002 SVC_Handler +20000210 g .stack_dummy 00000000 __end__ +080032bc g F .text 00000008 BootComInit +0800222c g F .text 00000060 SystemInit +08003528 g F .text 00000000 _fini +08002b38 w F .text 00000002 HAL_UART_MspInit +0800304c w F .text 00000024 HAL_InitTick +20002000 g .bss 00000000 __StackTop +08003090 w F .text 00000010 HAL_IncTick +080021f2 w F .text 00000002 TS_IRQHandler +080021e2 w F .text 00000002 WWDG_IRQHandler +080030fc g F .text 00000054 LedToggle +08002200 w F .text 00000002 TIM2_IRQHandler +080021f6 w F .text 00000002 DMA1_Channel2_3_IRQHandler +08002974 g F .text 00000020 HAL_SYSTICK_CLKSourceConfig +20002000 g *ABS* 00000000 __stack +0800348c g F .text 00000008 .hidden __aeabi_uidivmod +20001f00 g *ABS* 00000100 __StackLimit +0800221a w F .text 00000002 USART2_IRQHandler +0800228c g F .text 00000458 HAL_RCC_OscConfig +08003498 g F .text 0000002c exit +08003378 g F .text 00000008 BootComCheckActivationRequest +08003494 w F .text 00000002 .hidden __aeabi_idiv0 +080021e8 w F .text 00000002 FLASH_IRQHandler +080030ac w F .text 00000002 _exit +08002218 w F .text 00000002 USART1_IRQHandler +08002996 g F .text 00000008 HAL_SYSTICK_IRQHandler +08002fdc g F .text 00000070 HAL_UART_Init +080021fc w F .text 00000002 TIM1_BRK_UP_TRG_COM_IRQHandler +080030d4 g F .text 00000008 TimerGet +080030ae g F .text 00000026 TimerInit + + diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.srec b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.srec index feb633b6..0f1aa3ff 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.srec +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/bin/demoprog_stm32f051.srec @@ -1,357 +1,354 @@ S01E000062696E2F64656D6F70726F675F73746D3332663035312E737265632D -S31508002000002000209D210008EF210008F12100088A +S315080020000020002085210008D7210008D9210008D2 S3150800201000000000000000000000000000000000B2 -S31508002020000000000000000000000000F321000886 -S315080020300000000000000000F521000875220008D5 -S31508002040FB210008FD210008FF21000801220008E5 -S3150800205003220008052200080722000809220008B2 -S315080020600B2200080D2200080F2200081122000882 -S315080020701322000815220008172200081922000852 -S315080020801B2200081D2200081F2200082122000822 -S3150800209023220008252200082722000829220008F2 -S315080020A02B2200082D2200082F22000831220008C2 -S315080020B03322000835220008372200083922000892 +S31508002020000000000000000000000000DB2100089E +S315080020300000000000000000DD210008DD30000877 +S31508002040E3210008E5210008E7210008E921000846 +S31508002050EB210008ED210008EF210008F121000816 +S31508002060F3210008F5210008F7210008F9210008E6 +S31508002070FB210008FD210008FF21000801220008B5 +S315080020800322000805220008072200080922000882 +S315080020900B2200080D2200080F2200081122000852 +S315080020A01322000815220008172200081922000822 +S315080020B01B2200081D2200081F22000821220008F2 S315080020C0EE11AA5510B5064C2378002B07D1054BFF S315080020D0002B02D0044800E000BF0123237010BD86 -S315080020E02C01002000000000AC350008084B10B594 -S315080020F0002B03D00749084800E000BF07480368DB -S31508002100002B00D110BD064B002BFBD09847F9E7F2 -S315080021100000000030010020AC3500082C0100202A -S3150800212000000000164B002B00D1144B9D464022A0 -S3150800213092029A1A924600218B460F461348144A71 -S31508002140121A01F000FA0F4B002B00D098470E4BDD -S31508002150002B00D098470020002104000D000D48F0 -S31508002160002802D00C4800E000BF01F0BDF92000AD -S31508002170290000F0B5F801F0A1F9C04600000800F2 -S315080021800020002000000000000000002C010020B4 -S315080021900C020020000000000000000008498D46DF -S315080021A00849094A094B9B1A05DD002408591051AC -S315080021B004349C42FADB064880470648004700007C -S315080021C000200020B8350008C00000202C0100209F -S315080021D09D230008252100081849194A002301E013 -S315080021E00B6004319142FBD300F07AF8FEE7FEE774 +S315080020E02C0100200000000070350008044B10B5D4 +S315080020F0002B03D00349044800E000BF10BDC046CA +S31508002100000000003001002070350008164B002B37 +S3150800211000D1144B9D46402292029A1A92460021FB +S315080021208B460F461348144A121A01F0EFF90F4B63 +S31508002130002B00D098470E4B002B00D09847002064 +S31508002140002104000D000D48002802D00C4800E0CC +S3150800215000BF01F0B7F92000290001F029F801F0C5 +S315080021609BF9C0460000080000200020000000007F +S31508002170000000002C0100200C02002000000000D6 +S315080021800000000008498D460849094A094B9B1A70 +S3150800219005DD00240859105104349C42FADB064830 +S315080021A08047064800470000002000207C350008CC +S315080021B0C00000202C0100202D2200080D21000857 +S315080021C01849194A002301E00B6004319142FBD3F8 +S315080021D000F0EEFFFEE7FEE7FEE7FEE7FEE7FEE7B6 +S315080021E0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B9 S315080021F0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7A9 S31508002200FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE798 S31508002210FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE788 -S31508002220FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE778 -S31508002230FEE7FEE7FEE7FEE7FEE700002C010020CA -S315080022400C02002010B500F079FEFA21890001F091 -S31508002250A9F800F085FF042000F09EFF0022002167 -S315080022600120404200F04AFF10BDC04610B500F0FC -S31508002270D3FF10BD10B500F0C7FF00F09FFF10BDDB -S3150800228000B591B00123049304330593033B0C93E3 -S3150800229080235B020D9380235B030E9300230F9329 -S315080022A004A800F027FB002800D0FEE707230093C8 -S315080022B0053B01930023029303930121684600F02E -S315080022C08DFD002800D0FEE711B000BD10B500F066 -S315080022D08BFFFFF7D5FF00F0A7FFFFF7B3FF10BD91 -S315080022E010B5FFF7F3FF00F0F9FF00F0A7FF01F0C4 -S315080022F055F8FAE730B58BB0264B9A690124224384 -S315080023009A619A6922400192019A59698022920239 -S3150800231011435961596911400291029958698021FE -S315080023200903084358615869014003910399D9691B -S315080023301143D961DB691A400492049B00220021EB -S315080023400520404200F0DAFE002200210220404229 -S3150800235000F0D4FE002200210120404200F0CEFE0B -S3150800236080239B000593069400250795089505A9E3 -S31508002370094800F0F9FD0C2305930A3B06930795D7 -S3150800238001330893099405A99020C00500F0ECFDD7 -S315080023900BB030BD0010024000080048114B1A6807 -S315080023A001210A431A6058680F4A02405A601868A1 -S315080023B00E4A02401A6018680D4A02401A605868A8 -S315080023C00C4A02405A60DA6A0F208243DA62186BB6 -S315080023D0094A02401A635A6B8A435A6300229A6072 -S315080023E07047C046001002400CB8FFF8FFFFF6FE23 -S315080023F0FFFFFBFFFFFFC0FFACFEFFFF7047C046B5 -S3150800240070B5040083680269134342691343C169BE -S315080024101943006803685F4A13400B430360226848 -S3150800242051685D4B0B40E1680B435360A169236A11 -S31508002430194320688368594A13400B43836025680B -S31508002440574B9D4214D1574B1B6B03221340012B4C -S3150800245008D0002B04D0022B06D0032B0DD005E0A4 -S3150800246000230DE004230BE0082309E0102307E00E -S315080024704D4B9D4203D1002302E0022300E01023C6 -S3150800248080221202E169914245D1022B14D002D86A -S31508002490002B05D033E0042B19D0082B23D02EE0CF -S315080024A000F052FD400063685B08C018616800F0E0 -S315080024B079FF83B2002024E0636858083B4B9C46AA -S315080024C06044616800F06EFF83B2002019E000F0F6 -S315080024D051FC400063685B08C018616800F062FF41 -S315080024E083B200200DE06368580880235B029C468F -S315080024F06044616800F056FF83B2002001E00120C5 -S3150800250000230F22190091435A10072313400B4347 -S315080025102268D3603CE0022B14D002D8002B05D0E9 -S3150800252035E0042B1AD0082B24D030E000F00CFD3F -S3150800253061684B08C01800F035FF0004000CE8601D -S31508002540002025E061684808194B9C46604400F065 -S3150800255029FF0004000CE860002019E000F00AFCDE -S3150800256061684B08C01800F01DFF0004000CE86005 -S3150800257000200DE06168480880231B029C466044E1 -S3150800258000F010FF0004000CE860002000E00120C5 -S3150800259070BDC046F369FFFFFFCFFFFFFFF4FFFFE3 -S315080025A00038014000100240004400400024F400B6 -S315080025B000127A00436ADB0706D5026851682C4B7D -S315080025C00B40816A0B435360436A9B0706D5026832 -S315080025D05168284B0B40C16A0B435360436A5B073B -S315080025E006D502685168244B0B40016B0B435360B8 -S315080025F0436A1B0706D502685168204B0B40416B9E -S315080026000B435360436ADB0606D5026891681C4B88 -S315080026100B40816B0B439360436A9B0606D50268A1 -S315080026209168184B0B40C16B0B439360436A5B067A -S3150800263012D502685168144B0B40016C0B4353606A -S3150800264080235B03026C9A4206D1026851680F4BDD -S315080026500B40416C0B435360436A1B0606D5016861 -S315080026604A680B4B1340826C13434B607047C04655 -S31508002670FFFFFDFFFFFFFEFFFFFFFBFFFF7FFFFFE3 -S31508002680FFEFFFFFFFDFFFFFFFFFEFFFFFFF9FFFEC -S31508002690FFFFF7FFF0B5474680B405000F001600A8 -S315080026A09846069C1DE0631C1BD0002C05D000F044 -S315080026B0B3FD4346C01A844213D22A6811680F4BE9 -S315080026C00B4013602A68936801218B43936020238B -S315080026D06922AB540132AB5400224833EA54032032 -S315080026E009E02B68DB693A009A4313005A425341C2 -S315080026F0B342D8D0002004BC9046F0BD5FFEFFFF71 -S31508002700F0B585B004000F0016001D006A23C35CEF -S31508002710202B6ED100296ED0002A6ED080235B0153 -S3150800272082689A4204D10369002B01D1CB0766D48B -S315080027306823E35C012B64D001226823E25400235A -S31508002740E36621326A33E25400F066FD03905823AB -S31508002750E6520233E652A3688022520193420AD116 -S315080027602369002B03D1294A5C33E2520FE0FF228A -S315080027705C23E2520BE0002B09D12369002B03D11D -S31508002780FF225C33E25202E07F225C23E2525C23A2 -S31508002790E65A21E05A22A35A013B9BB2A35200955E -S315080027A0039B002220212000FFF774FF00282AD16E -S315080027B080235B01A2689A4208D12369002B05D1C0 -S315080027C023689B8C33403B80023705E023689A8C4C -S315080027D0F3B213403B7001375A23E35A9BB2002BDE -S315080027E0D8D120226A33E2540022023BE254002068 -S315080027F00AE0022008E0012006E0012004E00120AA -S3150800280002E0022000E0032005B0F0BDFF01000051 -S3150800281030B583B004000023C36600F0FDFC050054 -S315080028202368174A93421CD11B681B070AD5154B08 -S31508002830009303000022802189032000FFF72AFF66 -S31508002840002818D123681B685B070AD50D4B00932F -S315080028502B0000228021C9032000FFF71BFF002858 -S315080028600BD120236922A3540132A35400224833F2 -S31508002870E254002002E0032000E0032003B030BD4C -S3150800288000380140FFFFFF0110B5041E2ED0692352 -S31508002890C35C002B04D100226833C254FFF7AEFD97 -S315080028A024226923E2542268136801218B431360AA -S315080028B02000FFF7A5FD012819D0636A002B02D076 -S315080028C02000FFF777FE22685168094B0B405360DA -S315080028D0226893682A218B43936022681168012332 -S315080028E00B4313602000FFF793FF00E0012010BDA3 -S315080028F0FFB7FFFF70B582B004000368DB0763D536 -S31508002900C44B5B680C221340042B08D0C14B5B6890 -S315080029101340082B0BD1BF4B5B68DB0307D5BD4BB8 -S315080029201B689B0350D56368002B4DD1F7E163689C -S31508002930012B06D1B74A1368802149020B4313605D -S3150800294022E0002B09D1B34B1968B34A0A401A6032 -S315080029501968B24A0A401A6016E0052B0BD1AD4B2E -S315080029601A688021C9020A431A601A688021490236 -S315080029700A431A6008E0A74B1968A74A0A401A6072 -S315080029801968A64A0A401A606368002B0ED000F040 -S3150800299043FC050005E000F03FFC401B642800D915 -S315080029A0BFE19C4B1B689B03F5D50DE000F034FC9A -S315080029B0050005E000F030FC401B642800D9B2E1B0 -S315080029C0944B1B689B03F5D423689B0750D5914B02 -S315080029D05B680C221A4208D08E4B5B681340082BA2 -S315080029E014D18C4B5B68DB0310D48A4B1B689B079E -S315080029F003D5E368012B00D097E186490B68F822D6 -S31508002A0093432269D20013430B6031E0E368002B3D -S31508002A101BD0804A116801230B43136000F0FCFBAE -S31508002A20050005E000F0F8FB401B022800D97EE10E -S31508002A30784B1B689B07F5D576490B68F8229343B4 -S31508002A402269D20013430B6012E0724A136801210F -S31508002A508B43136000F0E0FB050005E000F0DCFBAB -S31508002A60401B022800D964E16A4B1B689B07F5D412 -S31508002A7023681B0729D5E369002B13D0654A516AD9 -S31508002A8001230B43536200F0C7FB050005E000F085 -S31508002A90C3FB401B022800D94DE15E4B5B6A9B07CE -S31508002AA0F5D512E05B4A536A01218B43536200F065 -S31508002AB0B3FB050005E000F0AFFB401B022800D978 -S31508002AC03BE1544B5B6A9B07F5D423685B077AD5D1 -S31508002AD0504BDB69DB000BD44E4AD16980235B057A -S31508002AE01943D161D26913400193019B012500E086 -S31508002AF000254B4B1B68DB0513D4494A1368802114 -S31508002B0049000B43136000F087FB060005E000F060 -S31508002B1083FB801B642800D911E1414B1B68DB0548 -S31508002B20F5D5A368012B04D13A4A116A0B431362FF -S31508002B3020E0002B09D1374B1A6A01218A431A6211 -S31508002B401A6A03318A431A6214E0052B09D1314BFC -S31508002B50196A04220A431A62196A01220A431A6286 -S31508002B6008E02C4B1A6A01218A431A621A6A033151 -S31508002B708A431A62A368002B0FD000F04DFB0600AB -S31508002B8006E000F049FB801B264B984200D9D8E0A6 -S31508002B90204B1B6A9B07F4D50EE000F03DFB0600B0 -S31508002BA006E000F039FB801B1E4B984200D9CAE0AC -S31508002BB0184B1B6A9B07F4D4012D04D1154AD16919 -S31508002BC0194B0B40D3612368DB0654D56369012B87 -S31508002BD02CD1104B596B04220A435A63596B0122B4 -S31508002BE00A435A6300F018FB050005E000F014FBE1 -S31508002BF0401B022800D9A8E0064B5B6B9B07F5D55E -S31508002C0004494B6BF82293431A00A369DB0013436C -S31508002C104B6330E000100240FFFFFEFFFFFFFBFFA3 -S31508002C200070004088130000FFFFFFEF05330CD14A -S31508002C304D494B6B042293434B634B6BF4329343DE -S31508002C40A269D20013434B6315E0474B596B042224 -S31508002C500A435A635A6B01218A435A6300F0DCFA25 -S31508002C60050004E000F0D8FA401B02286FD83E4B56 -S31508002C705B6B9B07F6D4236A002B6AD03A4A5268E4 -S31508002C800C210A40082A66D0022B34D1364A11682C -S31508002C90364B0B40136000F0BFFA050004E000F065 -S31508002CA0BBFA401B022858D82F4B1B689B01F6D449 -S31508002CB02D4BDA6A0F218A43E16A0A43DA625868B9 -S31508002CC02B4A1040A26A616A0A4302435A601A688C -S31508002CD0802149040A431A6000F09EFA040004E0C1 -S31508002CE000F09AFA001B022839D81F4B1B689B0173 -S31508002CF0F6D5002036E01C4A11681C4B0B401360C1 -S31508002D0000F08AFA040004E000F086FA001B0228A4 -S31508002D1027D8154B1B689B01F6D4002022E001201A -S31508002D2020E003201EE003201CE001201AE0032017 -S31508002D3018E0032016E0032014E0032012E0032025 -S31508002D4010E003200EE003200CE003200AE0032035 -S31508002D5008E0002006E0012004E0032002E003204A -S31508002D6000E0032002B070BD00100240FFFFFFFE26 -S31508002D70FFFFC2FF10B588B0144C1022210004A82A -S31508002D8000F0D8FB210010311022684600F0D2FB73 -S31508002D900F4B5A680C231340082B13D1910C0F20A4 -S31508002DA0014004AB5C5C0A4BDB6A03406946C95CBC -S31508002DB0D30304D5074800F0F5FA604303E0064854 -S31508002DC0604300E0034808B010BDC04688350008D7 -S31508002DD00010024000127A0000093D0070B5050097 -S31508002DE00C00504B1B68012213408B4209D24D4AF6 -S31508002DF0136801218B432343136013680B409C42DD -S31508002E007FD12B689B0706D5474A5368F0218B4329 -S31508002E10A9680B4353602B68DB0747D56A68012A04 -S31508002E2004D1414B1B689B030BD46CE0022A04D1E6 -S31508002E303D4B1B689B0104D467E03B4B1B689B0713 -S31508002E4065D539494B680320834313434B6000F02B -S31508002E50E3F906006B68012B0DD105E000F0DCF9FB -S31508002E60801B324B984254D82F4B5B680C22134078 -S31508002E70042BF3D11AE0022B13D105E000F0CCF9AC -S31508002E80801B2A4B984246D8274B5B680C22134076 -S31508002E90082BF3D10AE000F0BFF9801B234B9842B8 -S31508002EA03BD8214B5B680C221A42F4D11D4B1B6898 -S31508002EB0012213409C4209D21A4A136801218B4306 -S31508002EC02343136013680B409C4228D12B685B0789 -S31508002ED006D515494A68164B1340EA6813434B60F2 -S31508002EE0FFF748FF104B5B681B090F221340114A76 -S31508002EF0D35CD840104B1860002000F063F900201E -S31508002F000EE001200CE001200AE0012008E0012083 -S31508002F1006E0032004E0032002E0032000E001208D -S31508002F2070BDC04600200240001002408813000011 -S31508002F30FFF8FFFF70350008C0000020014B186835 -S31508002F407047C046C000002010B5FFF7F7FF044BD6 -S31508002F505B681B0A07221340024AD35CD84010BD9F -S31508002F600010024080350008F0B5474680B482B0AC -S31508002F700023A8E001249C40A046224000D1A1E0FD -S31508002F804D68022D01D0122D0FD1DF080837BF007A -S31508002F903E5807251D40AD000F24AC40A643B44655 -S31508002FA00E69AE40654635433D5004685F0003250B -S31508002FB02E00BE40F6433440A4464C682540BD402A -S31508002FC06446254305604D686C1E012C03D9112DF6 -S31508002FD001D0122D13D185683540AC46CD68BD4069 -S31508002FE064462543856045684446A543AC464C6817 -S31508002FF0250901242C409C4065462C434460C4683E -S3150800300026408C68BC402643C6604C68E40059D507 -S31508003010314DAE6901273E43AE61AC693C4001942F -S31508003020019C9C08A51CAD002C4EAF5903251D40DC -S31508003030AD000F26AE40B7439026F605B0420AD03B -S31508003040274EB04209D0274EB04208D0264EB0428D -S3150800305007D1032606E0002604E0012602E0022640 -S3150800306000E00526AE4035003D430234A4001B4E61 -S31508003070A5511E4C2568D44326002E404F68FF03F1 -S3150800308001D515432E00194D2E606D682E00264079 -S315080030904F68BF0301D515432E00144D6E60AD6809 -S315080030A02E0026404F68FF0201D515432E000F4D0E -S315080030B0AE60ED682C404E68B60201D52A4314006E -S315080030C00A4AD46001330A681400DC4000D051E78C -S315080030D002B004BC9046F0BD00100240000001405A -S315080030E00004004800080048000C0048000401409D -S315080030F0002A01D0816100E08162704770B500281E -S3150800310017DAC0B20F230340083B9B0806339B001F -S31508003110114A944663445A6803242040C000FC348C -S3150800312025008540AA438901214081401143596001 -S3150800313010E08308094DC0339B005C5903221040F8 -S31508003140C000FF2632008240944389013140814005 -S315080031502143595170BDC04600ED00E000E100E092 -S3150800316001380A4B98420FD8094A506009490B6A38 -S315080031701B021B0AC020000603430B620023936050 -S3150800318007331360002000E001207047FFFFFF00AF -S3150800319010E000E000ED00E0042805D1054A1168BA -S315080031A004230B43136004E0024A136804218B438B -S315080031B01360704710E000E07047C04610B5FFF78F -S315080031C0FBFF10BD10B50400FFF7B8FEFA21890011 -S315080031D000F0E8F8FFF7C4FF002221000120404272 -S315080031E0FFF78CFF002010BD10B5064A11681023A2 -S315080031F00B4313600020FFF7E5FFFFF77BF800207D -S3150800320010BDC04600200240024A1368013313600D -S315080032107047C04608020020014B18687047C04630 -S3150800322008020020FEE7C04610B50022802189006A -S315080032300148FFF75DFF10BD0008004810B5FFF70D -S3150800324015F804000F4B1B68C31AF422FF32934289 -S3150800325017D90D4B1B78002B09D1F33AFF3A0A4BC5 -S315080032601A70802189000948FFF742FF07E000220B -S31508003270054B1A70802189000448FFF739FF014B76 -S315080032801C6010BD480100204C01002000080048C1 -S3150800329010B50848084B0360E1231B02436000236E -S315080032A08360C360036183610C334361FFF7ECFA03 -S315080032B010BDC046540100200044004010B501006E -S315080032C0002301220448FFF71BFA002801D1013028 -S315080032D000E0002010BDC0465401002010B5FFF7DD -S315080032E0D7FF10BDBFF34F8F034A044BDA60BFF315 -S315080032F04F8FC046FDE7C0460400FA0500ED00E022 -S3150800330010B5224B1B78002B15D12148FFF7D6FFA5 -S31508003310012839D11E4B1B78013BDBB23F2B33D832 -S31508003320FEF7A4FF1B4B18600122184B1A700022E7 -S31508003330194B1A7028E0184B18780130144B1818D6 -S31508003340FFF7BCFF012815D1134A13780133DBB206 -S3150800335013700F4A1278934216D100220B4B1A703B -S315080033600B4B5B78FF2B0FD1094B9B78002B0BD1AE -S31508003370FFF7B8FFFEF77AFF064B1B6864339842DF -S3150800338002D90022014B1A7010BDC0460602002061 -S31508003390C4010020500100200502002010B5FFF7E7 -S315080033A0AFFF10BD002243088B4274D303098B423A -S315080033B05FD3030A8B4244D3030B8B4228D3030CF7 -S315080033C08B420DD3FF22090212BA030C8B4202D399 -S315080033D01212090265D0030B8B4219D300E0090AC1 -S315080033E0C30B8B4201D3CB03C01A5241830B8B42CA -S315080033F001D38B03C01A5241430B8B4201D34B03B3 -S31508003400C01A5241030B8B4201D30B03C01A524117 -S31508003410C30A8B4201D3CB02C01A5241830A8B429C -S3150800342001D38B02C01A5241430A8B4201D34B0285 -S31508003430C01A5241030A8B4201D30B02C01A5241E9 -S31508003440CDD2C3098B4201D3CB01C01A524183099D -S315080034508B4201D38B01C01A524143098B4201D3D7 -S315080034604B01C01A524103098B4201D30B01C01A02 -S315080034705241C3088B4201D3CB00C01A524183087C -S315080034808B4201D38B00C01A524143088B4201D3A9 -S315080034904B00C01A5241411A00D201465241104609 -S315080034A07047FFE701B5002000F006F802BDC046E8 -S315080034B00029F7D076E770477047C046084B10B525 -S315080034C00400002B02D0002100E000BF054B18685D -S315080034D0836A002B00D098472000FFF7A3FEC0465A -S315080034E000000000A83500080E4B70B500251E0028 -S315080034F00D4CE41AA410A54204D0AB00F358984723 -S315080035000135F8E700F028F8084B00251E00084C9E -S31508003510E41AA410A54204D0AB00F3589847013525 -S31508003520F8E770BD240100202401002024010020B2 -S3150800353028010020002310B59A4203D0CC5CC4545D -S315080035400133F9E710BD03008218934202D01970BF -S315080035500133FAE770470000F8B5C046F8BC08BC66 -S315080035609E467047F8B5C046F8BC08BC9E467047EC -S315080035700000000000000000010203040607080915 -S3150800358000000000010203040203040506070809F7 -S315080035900A0B0C0D0E0F101001020304050607088E -S315080035A0090A0B0C0D0E0F10C400002000000000C5 -S30D080035B074EBFF7F0100000027 -S315080035B800127A0000000000000000000000000069 -S315080035C800000000000000000000000000000000E5 -S315080035D800000000000000000000000000000000D5 -S315080035E800000000000000000000000000000000C5 -S315080035F800000000000000000000000000000000B5 -S3150800360800000000000000000000000000000000A4 -S3110800361800000000ED200008C520000896 +S31508002220FEE700002C0100200C020020114B1A6862 +S3150800223001210A431A605A680F4802405A601A6810 +S315080022400E4802401A601A680D4802401A605A6819 +S315080022500C4802405A60DA6A0F208243DA621A6B27 +S31508002260094802401A635A6B8A435A6300229A60E5 +S315080022707047C046001002400CB8FFF8FFFFF6FE94 +S31508002280FFFFFBFFFFFFC0FFACFEFFFF70B582B08C +S3150800229004000368DB0726D5AE4B5A680C231340A7 +S315080022A0042B18D0AB4B5A680C231340082B0ED0BE +S315080022B06368012B3CD0002B51D1A64B1A68A6495E +S315080022C00A401A601A68A5490A401A6036E0A14B06 +S315080022D05B68DB03ECD59F4B1B689B0303D56368E0 +S315080022E0002B00D1ECE123689B0772D5994B5B68FC +S315080022F00C221A425DD0974B5A680C231340082BC0 +S3150800230053D0E368002B00D185E0924A1368012177 +S315080023100B43136000F0C4FE05008E4B1B689B0739 +S3150800232070D400F0BDFE401B0228F6D90320CCE18C +S31508002330884A116880235B020B4313606368002B8D +S3150800234025D000F0ADFE0500824B1B689B03CAD45E +S3150800235000F0A6FE401B6428F6D90320B5E1052B3C +S3150800236009D07C4B1A687C490A401A601A687B496E +S315080023700A401A60E2E7774B19688022D2020A43BC +S315080023801A601968802252020A431A60D6E700F0DA +S3150800239087FE05006F4B1B689B03A4D500F080FEE3 +S315080023A0401B6428F6D903208FE16A4B5B68DB0380 +S315080023B0A7D4684B1B689B0703D5E368012B00D09D +S315080023C080E164490B68F82293432269D2001343DB +S315080023D00B6023681B0744D5E369002B2ED05D4AA2 +S315080023E0536A01210B43536200F05AFE0500594B0C +S315080023F05B6A9B0735D400F053FE401B0228F6D9CA +S31508002400032062E153490B68F82293432269D200FC +S3150800241013430B60DDE74F4A136801218B431360B2 +S3150800242000F03EFE05004B4B1B689B07D1D500F01C +S3150800243037FE401B0228F6D9032046E1454A536A6F +S3150800244001218B43536200F02BFE0500414B5B6A6A +S315080024509B0706D500F024FE401B0228F6D9032068 +S3150800246033E123685B0700D480E03A4BDB69DB0085 +S315080024701DD4384AD169802040050143D161D3690A +S3150800248003400193019B0125354B1B68DB0510D5DD +S31508002490A368012B21D0002B36D12E4B1A6A0121B5 +S315080024A08A431A621A6A03318A431A621AE00025B5 +S315080024B0EAE72B4A116880235B000B43136000F0A0 +S315080024C0EFFD0600264B1B68DB05E1D400F0E8FDAE +S315080024D0801B6428F6D90320F7E01E4A136A0121F7 +S315080024E00B431362A368002B24D000F0D9FD060025 +S315080024F0184B1B6A9B0737D400F0D2FD801B194B7B +S315080025009842F5D90320E0E0052B09D0114B1A6A49 +S3150800251001218A431A621A6A03318A431A62E1E779 +S315080025200C4B1A6A04210A431A621A6A03390A43C7 +S315080025301A62D7E700F0B4FD0600064B1B6A9B0734 +S3150800254012D500F0ADFD801B064B9842F5D9032045 +S31508002550BBE0C04600100240FFFFFEFFFFFFFBFF87 +S315080025600070004088130000012D33D02368DB0675 +S3150800257010D56369012B33D0053351D1554A536BB6 +S3150800258004218B435363536BF4318B43A169C90010 +S315080025900B435363236A002B00D195E04D4A5168DB +S315080025A00C220A40082A00D191E0022B4FD0494A52 +S315080025B0136849490B40136000F072FD0400454B4F +S315080025C01B689B017AD500F06BFD001B0228F6D923 +S315080025D003207AE03F4AD36940490B40D361C5E7F7 +S315080025E03C4B5A6B04210A435A635A6B03390A4314 +S315080025F05A6300F055FD0500364B5B6B9B0706D406 +S3150800260000F04EFD401B0228F6D903205DE0314953 +S315080026104B6BF8229343A269D20013434B63B9E785 +S315080026202C4B5A6B04210A435A635A6B03398A4363 +S315080026305A6300F035FD0500264B5B6B9B07A9D551 +S3150800264000F02EFD401B0228F6D903203DE0214A62 +S31508002650136821490B40136000F022FD05001D4B4D +S315080026601B689B0106D500F01BFD401B0228F6D906 +S3150800267003202AE0174BDA6A0F218A43E16A0A43E4 +S31508002680DA625A6816490A40A16A606A01430A432F +S315080026905A601968802252040A431A6000F000FD45 +S315080026A004000C4B1B689B0106D400F0F9FC001BC8 +S315080026B00228F6D9032008E0002006E0002004E0FE +S315080026C0012002E0012000E0002002B070BD0120D8 +S315080026D0FBE7C04600100240FFFFFFFEFFFFFFEFCB +S315080026E0FFFFC2FF30B589B004AA174B180032C8DD +S315080026F032C2110002680A606A46103313CB13C24D +S315080027001B681360114B5A680C231340082B02D020 +S315080027100F4809B030BD910C0733194004A8445C32 +S315080027200A49C96A0B406946C95CD30304D50848F7 +S3150800273000F026FE6043ECE763011B1B9801C01AF4 +S31508002740C00004192002E4E74C35000800100240D6 +S3150800275000127A0070B504000D004E4B1A6801236A +S3150800276013408B420AD24B490B68012293432B43F1 +S315080027700B600B681A40AA4200D084E023689B07C6 +S3150800278006D5454A5368F0218B43A1680B4353602D +S315080027902368DB074CD56368012B21D0022B25D093 +S315080027A03D4A1268920700D46FE03B494A68032005 +S315080027B0824313434B6000F073FC06006368012BE9 +S315080027C01AD0022B26D0344B5B680C221A422FD023 +S315080027D000F066FC801B314B9842F4D9032051E087 +S315080027E02D4A12689203E0D401204BE02A4A126867 +S315080027F09201DAD4012045E0274B5A680C2313408E +S31508002800042B15D000F04CFC801B244B9842F3D9BE +S31508002810032037E0204B5A680C231340082B07D0B7 +S3150800282000F03EFC801B1D4B9842F3D9032029E09B +S31508002830184B1A6801231340AB4209D915490B688E +S31508002840012293432B430B600B681A40AA421ED100 +S3150800285023685B0706D5104A536811490B40E1689F +S315080028600B435360FFF73EFF0B4B5A6812090F23C1 +S3150800287013400C4AD35CD8400B4B1860002000F07C +S31508002880E5FB002070BD0120FCE70120FAE70120E6 +S31508002890F8E7C046002002400010024088130000F6 +S315080028A0FFF8FFFF34350008C0000020014B186808 +S315080028B07047C046C000002010B5FFF7F7FF044B6D +S315080028C05A68120A07231340024AD35CD84010BD3F +S315080028D0001002404435000870B5002811DB830853 +S315080028E0144DC0339B005C5903221040C000FC32D3 +S315080028F016008640B44389010A40824014435C515D +S3150800290070BDC0B20F230340083B9B0806339B00EB +S31508002910094A944663445D6803242040C000FF22A8 +S3150800292014008440A54389010A4082402A435A601C +S31508002930E6E7C04600E100E000ED00E001380A4B9A +S3150800294098420FD8094A50600948036A1B021B0AB5 +S31508002950C02109060B430362002393600733136003 +S31508002960002070470120FCE7FFFFFF0010E000E0B1 +S3150800297000ED00E0042805D0054A136804218B43BE +S3150800298013607047024A136804210B431360F8E783 +S3150800299010E000E0704710B5FFF7FCFF10BD00001F +S315080029A0F0B5C64600B582B0002338E0032600E03D +S315080029B00026AE4035003D430234A400554EA551CD +S315080029C0554C25684246D4432E0026404A68D20311 +S315080029D002D5424615432E004F4D2E606D682E00D7 +S315080029E026404A68920302D5424615432E004A4DB0 +S315080029F06E60AD682E0026404A68D20202D542466D +S31508002A0015432E00444DAE60ED682C404A6892028C +S31508002A1002D542462A4314003F4AD46001330A6865 +S31508002A201400DC4071D001259D402A409046F5D01F +S31508002A304C68022C01D0122C0ED1DC080834A400F4 +S31508002A40275807261E40B6000F22B24097430A6948 +S31508002A50B24016003E43265002685F000324260053 +S31508002A60BE40F643324094464A681440BC4062462B +S31508002A70144304604C68621E012A03D9112C01D044 +S31508002A80122C10D184683440A446CC68BC406246F7 +S31508002A90144384604468AC434A681209012515400A +S31508002AA09D4025434560C46826408C68BC40344335 +S31508002AB0C4604A68D200B1D5184DAE6901242643D0 +S31508002AC0AE61AD692C400194019C9C08A51CAD0023 +S31508002AD0104EAF5903251D40AD000F26AE40B74333 +S31508002AE09026F605B04200D162E70D4EB04208D0F6 +S31508002AF00C4EB04207D00C4EB04200D156E7052620 +S31508002B0057E7012655E7022653E702B004BC90466C +S31508002B10F0BDC0460000014000040140001002401C +S31508002B200004004800080048000C0048002A01D0AC +S31508002B30816170478162FCE77047000070B5040048 +S31508002B4083680269134342691343C26913430168E0 +S31508002B500A686348024013430B6022685368614958 +S31508002B600B40E1680B435360A269236A1A43216844 +S31508002B708B685D48034013438B6025685B4B9D4219 +S31508002B8020D05B4B9D422BD0102380221202E16994 +S31508002B9091422FD0022B00D187E000D871E0042B98 +S31508002BA000D18EE0082B00D07DE0616848088023BC +S31508002BB01B029C46604400F0E3FB0004000CE8603E +S31508002BC0002043E04B4B1A6B03231340012B09D01B +S31508002BD0002B09D0022B09D0032B09D01023D4E7E8 +S31508002BE00023D2E70423D0E70023CEE70823CCE767 +S31508002BF00223CAE7022B2DD00FD9042B35D0082B78 +S31508002C0025D16368580880235B029C466044616846 +S31508002C1000F0B6FB83B200200FE0002B0BD1FFF7C4 +S31508002C204BFE400063685B08C018616800F0A8FBAB +S31508002C3083B2002001E0012000230F2219009143EE +S31508002C405B10083A13400B432268D36070BD01201D +S31508002C500023F2E763685808274B9C46604461687E +S31508002C6000F08EFB83B20020E7E7FFF73BFD40004C +S31508002C7063685B08C018616800F082FB83B20020B5 +S31508002C80DBE7002B0DD1FFF717FE63685B08C0185A +S31508002C90616800F075FB23680004000CD86000200A +S31508002CA0D4E70120D2E70120D0E761684808134B32 +S31508002CB09C46604400F064FB0004000CE8600020B9 +S31508002CC0C4E7FFF70FFD63685B08C018616800F08A +S31508002CD057FB23680004000CD8600020B6E7C046FE +S31508002CE0F369FFFFFFCFFFFFFFF4FFFF0038014046 +S31508002CF000440040001002400024F40000127A004C +S31508002D00436ADB0706D5026853682C490B40816A7B +S31508002D100B435360436A9B0706D5026853682849E4 +S31508002D200B40C16A0B435360436A5B0706D50268CA +S31508002D30536824490B40016B0B435360436A1B07D6 +S31508002D4006D50268536820490B40416B0B43536014 +S31508002D50436ADB0606D5026893681C490B40816BFB +S31508002D600B439360436A9B0606D502689368184925 +S31508002D700B40C16B0B439360436A5B060BD5026835 +S31508002D80536814490B40016C0B43536080235B0363 +S31508002D90026C9A420AD0436A1B0606D50268536833 +S31508002DA00D490B40816C0B435360704702685368AA +S31508002DB00A490B40416C0B435360ECE7FFFFFDFFEC +S31508002DC0FFFFFEFFFFFFFBFFFF7FFFFFFFEFFFFF9A +S31508002DD0FFDFFFFFFFFFEFFFFFFFF7FFFFFF9FFF8D +S31508002DE0F0B5C64600B506000C0017009846069DC5 +S31508002DF03368DB6923401B1B5A425341BB421ED131 +S31508002E006B1CF5D0002D05D000F04AF94346C01AD0 +S31508002E10A842EDD9326813680B490B401360326833 +S31508002E209368A331FF318B43936020236922B354FF +S31508002E300132B35448330022F254032000E0002044 +S31508002E4004BC9046F0BDC0465FFEFFFFF0B585B0F6 +S31508002E5004000F0016001D006A23C35C202B73D1E3 +S31508002E60002900D173E0002A00D172E080235B01BB +S31508002E7082689A4221D06823E35C012B00D16AE07C +S31508002E8068230122E2540023E3666A332132E254BE +S31508002E9000F006F903905823E6520233E652A36877 +S31508002EA08022520193420FD0002B13D12369002BA5 +S31508002EB017D15C33FF22E2520CE00369002BDAD10A +S31508002EC0CB07D8D5012040E02369002B05D15C3318 +S31508002ED0234AE2525C23E65A0DE05C23FF22E252C3 +S31508002EE0F8E75C237F22E252F4E723689B8CF2B270 +S31508002EF013403B7001375A23E35A9BB2002B1BD071 +S31508002F005A22A35A013B9BB2A3520095039B002267 +S31508002F1020212000FFF764FF00281ED180235B01D3 +S31508002F20A2689A42E1D12369002BDED123689B8CE3 +S31508002F3033403B800237DEE76A332022E254023B05 +S31508002F400022E254002000E0022005B0F0BD012076 +S31508002F50FBE70120F9E70220F7E70320F5E7C0467B +S31508002F60FF01000030B583B004000023C36600F0FB +S31508002F7097F805002368174A93420AD02023692246 +S31508002F80A3540132A35448330022E254002003B06C +S31508002F9030BD1B681B0710D423681B685B07EDD57B +S31508002FA080210D4B00932B000022C9032000FFF758 +S31508002FB017FF0028E2D00320E9E78021064B00939B +S31508002FC00300002289032000FFF70AFF0028E3D048 +S31508002FD00320DCE700380140FFFFFF0110B5041E9F +S31508002FE030D06923C35C002B22D069232422E25403 +S31508002FF02268136801218B4313602000FFF79EFDAA +S31508003000012814D0636A002B18D1226853680E4928 +S315080030100B405360226893682A218B439360226889 +S31508003020136829390B4313602000FFF79BFF10BD77 +S3150800303068330022C254FFF77FFDD6E72000FFF76A +S315080030405FFEE2E70120F2E7FFB7FFFF10B50400D5 +S31508003050FFF72CFCFA21890000F092F9FFF76EFCC5 +S315080030600120002221004042FFF736FC002010BD57 +S3150800307010B5064A136810210B4313600020FFF7AA +S31508003080E5FF00F09FF8002010BDC0460020024072 +S31508003090024A1368013313607047C04608020020CD +S315080030A0014B18687047C04608020020FEE710B5B5 +S315080030B0FFF7FCFBFA21890000F062F9FFF73EFCF6 +S315080030C00420FFF757FC0120002200214042FFF7A9 +S315080030D003FC10BD10B5FFF7E3FF10BD10B5FFF7F1 +S315080030E0D7FFFFF758FC10BD10B5802100228900D4 +S315080030F00148FFF71BFD10BD0008004810B5FFF793 +S31508003100E9FF04000F4B1B68C31AF422FF329342EF +S315080031100ED90D4B1B78002B0BD10B4BF33AFF3A0C +S315080031201A70802189000948FFF700FD054B1C60CD +S3150800313010BD054B00221A70802189000348FFF74D +S31508003140F5FCF3E74C010020480100200008004880 +S3150800315000B591B00123049304330593033B0C9304 +S3150800316080235B020D9380235B030E9300230F934A +S3150800317004A8FFF78BF8002800D0FEE70723009382 +S31508003180053B019300230293039301216846FFF749 +S31508003190E1FA002800D0FEE711B000BD10B5FFF730 +S315080031A067FFFFF7D5FFFFF79FFFFFF780FF10BD0B +S315080031B010B5FFF7F3FF00F081F8FFF79FFF00F067 +S315080031C0DBF8FAE730B58BB0264B9A69012422431F +S315080031D09A619A6922400192019A5969802292025B +S315080031E0114359615969114002910299586980251C +S315080031F02D03284358615969294003910399D969D0 +S315080032001143D961DB691A400492049B0520002208 +S3150800321000214042FFF760FB0220002200214042C5 +S31508003220FFF75AFB0120002200214042FFF754FB1A +S3150800323080239B000593069400250795089505A904 +S315080032400948FFF7ADFB0C2305930A3B0693079540 +S31508003250013308930994902005A9C005FFF7A0FB40 +S315080032600BB030BD001002400008004810B50948F0 +S31508003270094B0360E1231B02436000238360C3609C +S3150800328003610C2242618361C36103624362FFF7F3 +S31508003290A5FE10BD500100200044004010B50100F5 +S315080032A0002301220448FFF7D1FD002801D00020A1 +S315080032B010BD0120FCE7C0465001002010B5FFF7FD +S315080032C0D5FF10BDBFF34F8F034B044ADA60BFF337 +S315080032D04F8FC046FDE7C04600ED00E00400FA0542 +S315080032E010B5214B1B78002B16D12048FFF7D6FFC7 +S315080032F0012800D010BD1D4B1B78013BDBB23F2BCC +S31508003300F8D8FFF7E7FE1A4B1860174B01221A7018 +S31508003310184B00221A70EDE7164B1B780133134839 +S31508003320C018FFF7BBFF012813D1124A13780133DF +S31508003330DBB213700D4A12789342DBD10A4A002198 +S3150800334011700A4A5278FF2AD4D1022BD2D1FFF73C +S31508003350B9FFFFF7BFFE064B1B6864339842C9D90D +S31508003360014B00221A70C5E701020020C0010020A7 +S31508003370040200200202002010B5FFF7B1FF10BDBD +S31508003380002243088B4274D303098B425FD3030A96 +S315080033908B4244D3030B8B4228D3030C8B420DD3A9 +S315080033A0FF22090212BA030C8B4202D31212090237 +S315080033B065D0030B8B4219D300E0090AC30B8B4275 +S315080033C001D3CB03C01A5241830B8B4201D38B0323 +S315080033D0C01A5241430B8B4201D34B03C01A5241C8 +S315080033E0030B8B4201D30B03C01A5241C30A8B420B +S315080033F001D3CB02C01A5241830A8B4201D38B02F6 +S31508003400C01A5241430A8B4201D34B02C01A524199 +S31508003410030A8B4201D30B02C01A5241CDD2C3090B +S315080034208B4201D3CB01C01A524183098B4201D387 +S315080034308B01C01A524143098B4201D34B01C01A72 +S31508003440524103098B4201D30B01C01A5241C308EA +S315080034508B4201D3CB00C01A524183088B4201D359 +S315080034608B00C01A524143088B4201D34B00C01A45 +S315080034705241411A00D20146524110467047FFE7B1 +S3150800348001B5002000F006F802BDC0460029F7D0B5 +S3150800349076E770477047C046084B10B50400002B06 +S315080034A002D0002100E000BF054B1868836A002B94 +S315080034B000D098472000FFF7F9FDC046000000003D +S315080034C06C35000870B500260C4D0D4C641BA41015 +S315080034D0A64209D1002600F021F80A4D0A4C641BC1 +S315080034E0A410A64205D170BDB300EB589847013623 +S315080034F0EEE7B300EB5898470136F2E724010020BF +S3150800350024010020240100202801002003001218AD +S31508003510934200D1704719700133F9E7F8B5C046F0 +S31508003520F8BC08BC9E467047F8B5C046F8BC08BC4F +S315080035309E467047000000000000000001020304D8 +S315080035400607080900000000010203040203040537 +S31508003550060708090A0B0C0D0E0F101001020304CA +S3150800356005060708090A0B0C0D0E0F10C4000020EB +S309080035700000000049 +S30D0800357498EBFF7F010000003F +S3150800357C00127A00000000000000000000000000A5 +S3150800358C0000000000000000000000000000000021 +S3150800359C0000000000000000000000000000000011 +S315080035AC0000000000000000000000000000000001 +S315080035BC00000000000000000000000000000000F1 +S315080035CC00000000000000000000000000000000E1 +S311080035DC00000000ED200008C5200008D3 S70508002000D2 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/boot.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/boot.c index e302da6c..3bd306b6 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/boot.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/boot.c @@ -117,10 +117,13 @@ static void BootComRs232Init(void) rs232Handle.Instance = USART2; rs232Handle.Init.BaudRate = BOOT_COM_RS232_BAUDRATE; rs232Handle.Init.WordLength = UART_WORDLENGTH_8B; - rs232Handle.Init.StopBits = UART_STOPBITS_1; - rs232Handle.Init.Parity = UART_PARITY_NONE; - rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.StopBits = UART_STOPBITS_1; + rs232Handle.Init.Parity = UART_PARITY_NONE; + rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + rs232Handle.Init.OverSampling = UART_OVERSAMPLING_16; + rs232Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + rs232Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; /* Initialize the UART peripheral. */ HAL_UART_Init(&rs232Handle); } /*** end of BootComRs232Init ***/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2016 STMicroelectronics

+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/stm32f0xx_hal_conf.h index 2a508432..1908c7bc 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_GCC/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/bin/openblt_stm32f051.out b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/bin/openblt_stm32f051.out index 03826364e98049a0c2200db669caaef5cbff0c08..b9d9aa1df567d7740e70780422d3a2516fe4ee87 100644 GIT binary patch literal 293168 zcmdpf3tUuX`v3c$IWr8y00VeILmfaA)D+OXWF;`jMNtXJY;ywy6bfMkG_1C;tn9LB zZ5QpTyIZ@Jm05PTtlY}3pjOt_M!RjbUH;2<6HT4}_j%8G&kW9F&A2P_)6W^sd7tw< z=Xsv@d7t-r@0Uz3%Hy0f`A=b~jGlfwgjv@wRoOON_-CHLoJdb)1Mu4!&YZsid~`Uo zmfDzA;s*NroDclRC}uq!&)@cA)|rEGfySA*9>(|b$_$fjc-J;^9t4^X3x7ZscoKB zd|`?Hg@NJ=>-L%1dO`ojeQ9jRW>1=_or}NpEpsQ`r?PFES=X3-?yYTGkQr;{7Vuh@ zw9|Ec4)5U3)K0c8r}nCNc0F5nss8r`{jXA|rRV5>FV+8UtFy+lHEiwkE?}+AN?>cw z%~KPz3s~*8bkE);9%U=r!V*s{P-kx3`&TrfDs(EK58^zn1 zGon+ey;{g@>Esn{NjESygmvAyk2{sEled_eokbU1o@4EZoRtWB_3ZuF!&0O1ji^pr zp{@4D9Hj&A)OLNAikvOOx4s07b*8e+tuPVx3S-XK73O>t_DR+e35y@bYW2KkYn-(# zaffSFPFM$9=LGf5piUBu?gV7rsvK*(mj09nF#9-ixVyx%Eo;L&3&_#IS+i+y(NtCl*zTM z>$2``n>8C8-pRVI+{cEioop?u-IO!1qdK8&O#hveYt_U`R~GVCbym10$L9end0!@D z$!wkCWL=5-Sn5C9Sqkzbg>_x9k1Xq(tzBC#-xQ5+jA1O1Uq6K@u(_R^ug_sS+3+(9 z6&7*9&ds;xn0KvBx@!K(OhOXz7EhbdLAF`mZDEszmHw)mGj_dp-_*_4k%~SGxJV%AZ-+ z&EWXU_EVs}Q%#+SgFug&@U&aXGy6KA=y2C)lRr^lJ;M==Hzuk4QZQj8D3AW2C6b%&077KdGL zbNS=O0=KR^{7ATivTCVRWNsx}Td~Os>r`B}itt)%7L`iA$(^qv&6Iqr%i$t#74J~8 z7~@$e|6Qy1aVkw+w?Q*QQIa0P-@*9%@jliyVL$7t-p`$$y}LcE>$-j0k~o9SnORpv zw@FXEY#$qSi#f`I;+)!fVgXx&)OA*OMgi-pf;H^e%+f}8@G)w;f>NO% z-_#T~oOMT3bBp%IF>nYNvE(Ln|Cw zu~levKWK-$y*0+YZSx`0iL)(n%8a<$h%7cbynXV_DMbktbj8-jWU(~X&YjyfJGQ37 z-?Sy!TuKFVy7L)ZZ)VOXa5)}jNn>ZeUzrLDe0YMZUj=V-JmbzUevvU@ab16euTBE? zjxhV%l=mxh_O>&~#ky|UmvzF*oUWZFr=!!EsMOlBAX+=Gz`GV@H>=GGGri5a)NU@k zVdmC!@ajm4E{v#+1FvE2j+r0SDJdzg4=YW~!Qx$NvaNP7XoR)fX6&xxfV^F)uy{t+ zkPdI?)zG(XWSN;19lH<^pNX8TGjEy{*jhzvDF&{;_QqalPj49x2_*(8J zf5B5@I?`s5hx{FU*hw9%Yf3jgT?$iR4w*Su5Du z>9E}g2DOd&fw8r1wQd(%S6G`Be|b*KPUL&nsP0%`Edr$&P*MaXDz_~4lXhjTxq`0^ zbJO!7_%=)7E0tF9J<1JUn=91u7-Er-A!L(UAyr2&}Ve#>1JK~_cLcoq1DZ| zCTtmARF~(3mQsJ@si;Ss!;oH^$6G1Qyf1DmaXolOY%3e3bfDaHeT(w^J*crQ{R>zt zLoA}ChPA7^OsSUku+A)}rIR^P2M{N)tSl$WEZ(*K;&-<*=ByywNA1kI9!H%Bs~t}H z;}DYAyB!4%#7lSszvjf~88H>nxC2K{yNIL2*J`(!OmBxHCkqpJ1!>B&_gjw{^*1!h zE_s@ZXYU%1r7(O| zR=l%M-4T~Voc&jIE07~Z7-S-r^oX+_?Rq1fR#xCg2bvn<1_577PU5OQC zxz5CMI^nZRx*c0@FAQ(xX)`-`>yEU{_Se& zwCMKl(`@ZOq(!ywPm66okQUc|Fs)zvp|t+(X`NJ){^c{)^?LUU_}$R`9De`R{S1Du z?tT)#mv%pf-zD9T;CDgyCj5H3AHZ+IzWea|&+b3rH+SD3@msoY1AfohcjsqL@IAEq z*3TY5USGA@v-h`$_*N~#8pzlPwbR);F}^y%v-iydsciaCmij}-51UV`(Bhv(g`}yP z!b3@~x~)qTXKvD}5_kS&5I((c%K;*jiBFNqpXo z++UK@nzLlZlINH3CQD*&(h7VZWgE5Wqsa4V;;rVw71i`+Hr@+M+?J4Cv2CbTe|KV` z2fSz1uBrxQoqIF9ZGZ5SHMFjERgUTXBvAXU$I*Fi>*ylqkQ+8{sQ2v6JV4y6udi#( zieFz{+nSX?JZGTBChQ*$_QY=R^y^G08o>%C*4Cz1oZBj?MEg)luaH#SklIn?N&MLT z_aWJ}>+!Wo9_JGHf+g#hXu5GACbAX@-KL~0se%5s9$dfVpG#7pzc8Vp4A^_S%A6E= zd-gtfaD36Z32mFRhZ42v2U)7ABLh+;c_I*Dbway$9NbV(JX;}+rsIsQaVRGm{&kS2 z%|{y+&#=y6;``dWweWsn9iF|ZpsWbW-ye$Vyf2}ymA)5geD8}xrcS9d%G;-E#Ny6kW(+ZMJh+MU0x z?s?ad-T8=$FGs|-<;qPTI}u8+VNSkASz}sbPgJirud%Etl6Am-ivD+dteYqb zqxJ?xv)QSpzphBkMYL17pPpIQx!r6;Sf^+2v>(%1+h*r{K)RPDq$8l&vAJ#YRfw0n zcDYfW!qC>7B>c&Mj)_H1)F`KP^VCTlPH1jIyR$VrHRFBH-i(9k!k^<8mOdK4BRWqk z8a2z=ni`LGU{?}w;((Kt;B-4%(_ozgIwrHE)*Ck0p@e>px@;(LoQM^<(*~}>4<;0b z*H&k&$WhR09tapiyM^RoDY3KDAz>|QOSPTu8a+-o#f;Drtcx?-ENa_&_AZ21{pSId z*(T7_T)b~aPQSe0v-kZ2D|5cv2}{dmS*ZzV+rwTGaJ`Oe4=x9Nr>lM6ezeC~*G@#h zSMO&@iKx}KA(FfV+&Z@2gxaMoX{SOlhCBZT@l>KeU57d<+b;9++8#0YD!gfTT2XIY zf%GmT7QYlvm(GmKiWiaj#Tq?TqkaL=i<0ylkDiZMvb887t1bC##gvuo8sv(pSPJ}T zP-9^%n<%F;{F_g4Dy?0QK}G5#g-ZbZ!86jSsvk0Q?*SJ|A}!H*2klv%s_Dk!nMV zRLm5qK!29~2jHbWdnX)VU0lR7)SCDRIrNE#r<&RqCC-3t#_jX$Ek)WqT)#&8j~%E7 zO>NFB#j|%M(pqpW7wP0D%RTg40z6&O=M=RLG1y0=`hiN0}%r)~Hj(Ma{| zZS}M{nTe>-(+W@9$V(Wzg%9U9vJ~Ye(@pA4qi5IUr6b1|?w`WQvTpaV8#&U~jQGK< zLC)H5M^A}@vS)Il^Z{nRQG*oi4?`Q0T2SBaA5=v3H+|(oe2aDcxQ`+{*0pz^T$sLF$dyrT%K+Z{=MKCgZqBC5^#z3np4SYKLJrd{Raxg0$!cx)Q*S! z402_|9xtuU5cex^pAKubvOy?0qgh+>3CgWGQ5{NBv1^8v+CWv^ZJS3H@~kXtR#;Xv zcYR!8?$jW20qI1$;1GNOV*iw}Xp5u#pd5|um|QyqI2E;4*T=Qo<*c*1Hq>#~l!^_t z^v+YB$~yY{j3>6>${dyAkgoOn&CJpnjb~FwZ61{<sK*W^U(G=*Q2 zGiayFdQHyQo!NugPM%ki?Z|WIdy>MHY3;F=YtZ8m8yl`%lf%Vd@%}D!LE2sfCg1fM z-!`};`!aEVjktG-`}qA5*ieBQJ6-%KKB+v#zW7j?GGz)tTeEJ}bj@*6D*ghs`i0tE_r6a8l}B{m$~F z3}qHzTu5txnhdD5N&1;ZA&Uq(eJm5qgN|yXe4~O zDUrOLXYc(eWi~vAiC-;#&O)?x7orr(hfc)X316e%;S<*B8;`ebIka~dN@YYh+Dq`c zRVdpV;0ea<*YHe8wNV+j%Z|MMHPD zyS!=PwwbO{SF+0`-p_|G)coLd!#|=n8onlRhZ%iO9c?KOC{z!9>7n1RJ?WjN6l&>T zi}a5~`p2H(os;zR6HWByE|LDWC%!XNPhTw3Ul!>*Joe5LB^{Cev`F9TL5_$PSEi`L zBT+&uY;@mYT)J3~fKRR!h(E)S?})wAa=uscOf4dg@HiC>^g1 za3$5!;TiMZ9!YDSXIVmOZC4gceY?XK`-|E%;SEN>yM42j+EGkp1)}|8$KQUe;Bt7c z%V*fKs0O_h_c9W?gz7u1tV=F}KD$xNY!m$y?)(eHo79)!&OaabTEBujzvZy^mh_;~ zfH$>zw;p$0q6V(RU8i#!quO{8;tf;MrCI1>u{d04>jN8JTp?Jwz-Tkk{W(adI+j`s zq+#l5bvQkHH+rb=+`-O-Uo4%KRx!80ku?i8P5mEZD(H=eP#QMiy4y3WK&_aG>p3S= zXX$ohui)sp(;|zRJJAkzqsI@@Qmo;CCwdARi))WA za<+2x-5=Wfo+lFd9XW%>9rh=cu&d(HUfME)$mv&LuU zrI+W{HCHt*t7%#;Q%=e#FU&5PpVQdbGJkPpUBlQa_H%Sg8<#d!)f`57ep7Si_)K6! zb&v97HaxDA*RmmlV41V>77r~PWUmMx5<5&CwI2gQH;3`J?QIVvpqI3Lj9bBbY}98R zZc!ibq^M3)?Thibwbt~0I(GG-A+;$LCkz=rBz)Mu4x-D_zUrX*!?7i-aCvTghNbAD z+yN8RPU{dGY;9FOXB%?5I~-fd4pMO~h8Fw5a9&}sDEwQ8XM){`Ynz_Nx+2ks#@j{z z`*Z9$yoq1W-r4BKQ_xeW#oD+-ToINx8PS!}{o`k%uMqDkGh$f0^ZsXl{A>goj`AN@ zOsXZ!8qN#a@_7NvKOHe8jnNWijrw+qx){BuXCI^TM)rOPw1fN4n8nOY){~>BMo)?U zVs>;P%v6nLg>m>m3^!R*tZ@;Jfv$n2gT9^(>sMr243D)q27Wqw;AgWPIxK7e2o?4> zNHJy_j+BV#(|~9m%Xys7cc$6127(3$(}y#lpqD7nx78zj+v@ji<(GUr%#W)=hvdsN zfy8kb;!LwE@t@D8QXh!9BPqt@_Z9gKX6H}~Dch#fP5+2!<9m!*56c-+jQOYY#&iVz zMEU6_GLemgds4k>ib#dP2}ra2B){Q)5U;+%NM8o`g%09YITkt$3rG_EZ6+ds&4dR~h9eR@WJZ{*lj9kS!9#!fVEJilG9SU3 zqT`^Z2v|z2pQ55Pv+^l@>Ik6$yRmSe~g$Q|^M z0ydc`fdq;2wb97`LJrww4n_OrP=sF&`R9YoA%A(jITRkiCS|Vq86Lc0i1n&}-R5Ik zKV7f-%jD&pMajI-e2Ak*y%UIcKfi*46ziL3J^V_DrOF}mEY2^_qW$vBa47zQ%FOdG zcwQ9*aww5MRb9zk)oXqVTpX5Cy9kMXan&6tY&epawfiZ-ryLrUwZDN%>HYQMl|G>9 z{*?44y#Sj7)He}_)i;5o7TaNODX^YE>Nt|i_4l-zf}BRo(Ic9%i24Q%v!7Pbk)jz> zwtw);0#&$&i-r##E-Z?Ev~N)%UuRUofz)s$tB90k#NlTiK5oG%9R4!?67vWc$^4Xg zD7txs2QZI7u|3sUMmQ3pPdq}M<)a0gj5+)rfz*P(|MV7;KoKpAmYy>*fVlRH}D!|`ac(+0vONXQ3ttM!?PZtsd%K|m71z>@rE4naSv$|?Z!_7+PSwhGt+zy|o?U5idjm9+vk#t(KjB4m|;qX4i`7|KxD z9>Dx%KZp7b*>~nZx;`ji2Li%giXpr*!2J1q80t{jxqyi=6rEQskFG$soXXk)(wqSH zRJIDR8GiCb_9xg*!2I=j4_JWg7{Q^wbNNsEUKNUu%KjV>b~CbDWzV3g{-0r;!ImJKJ^=YU=72YV@nU@azQUEl|^k0jVT zfNk=FJqQ+5b_FKG`0HhD8o~AehBYC^KaH2GMiC5SGy!1YClc&)S=tGQnO52)k%1!P*1D=0g1{`&&TR^iv7;6=424ONI%l z?1zAO{ihL3jS0l3HH%=e0bw5sm@^>k@od5y3mA;U_@~*+HmFf$^8oYrJukZm)&Q8l z3{T|}tTiCs^V11-T|m4?^9Z&!Al}pY1bZ+b-h%}Mdjc?j|8iR)!Qe%$G!iBM>1A^U z!FB@XZ-W=iB-lHEVSvy0r{QH65$w}|G_A7;_6=bEW%@$_D~n~;Wd=oAR$iS=c&`GM zR?UD1ZLtDDQNFJsJ=;7VZIlHy|vmlwjKf!nO<8>j7a`l@Z=;}%Upc{2Q8ttOU~4J}HUlvK@3mAC>>`Xw``glU0yYXhQt_i{ zg9)ju1pdq)c7}jG8xXc$!1f~_{PDgNux}9a`NJk+Y5`W++uvY@YJ{7Q61Hv+D>3gpSgk2o(FRKQgLO9% z>_Nb6ez4pYf;|D4fBkU(a)PNA%q{c7n{*+;ZU-#Y4_15;!L|by*^@3(Vyd5_XtSlf*xshOQ!2E3@=O%*P z2$+AqUv@LWwgcv$?|0rpur~w3oQ)(x1y?0>z3 zU}}6I*n4*p%mJ9cy?k&N!G;3nFgTHU+r6G(V*}FMw}D_M2ZWjaK(M@kG!y?wu(^Qw z^D_Kyf>i_Nug}r<5Ue2}Eb~tUYX!_-FDL(*U@HOhmv7#^1iLXHUgdoRTOSa%_x0gRaFx#L&c76AQ1RDX^Yy(T?!)Ff>tOYQCUtoEdV7CKC z-;n>b?~U3_utx#&j|XQxLa1tr*iHdk1z3?E&1>E!yxo9Np2>e&{^h?zu&)41kO2JEV9L7$vqlDz;Yk6*P-K9* z-wk!BYyx1hel%0xBUm0_r}@FG?-Oh#V0nJ9uLbPYfZyBrSHk-$Ane=^2-XknfK&Wv zj`)yZWq{51gMB1mn*j5#tM2$4;q3;@-*(Ubh+tiS`TDF>(8p9@kBKQ4ML}s{ER2UK zVJ53;HCrv#Fss!XZnaq>!tB*bYz(!5y1RxqdPq$0;@nk_PGa5fYi7H1Z2m2cHBk5s*(Jk z9nMVl-v?_31;Ca4`$6+hS#T8y$U%VYxJ!aJf>%L6juZqSj{A}B1_3!# z5<(sf1c{v>AxBiGAgGs{t_aenkQxS=VNPi1fLhQhJOj9Y4iWcy;69@d-UOrmLE!TZ z;38@fgFD%A7pyd2u3llfGDzV`hXW9r$&sKCbx7v$YmkwHMnRhc5x5fsp(ybSO#Mbg!?vd<$z|exG@n}RELHg97j-opK7mJz?B1{5IU3yVhu>hanq3W)&T-? za5Y%jBcVJw_!=y3A#mm3Y_PbO16K~-28;VVaOL1`u($_-D+hmr#hns~<`)JYsnaW1 z+@-*kgU7+*J`7wrxEu^FdAP5EI~F{T!ae-TN?sbrwg*FmBFs!kEJvwBi!fV2p#f~5 zlm?|b`a0Ul##nb~U;hRat_$(&W23RnAaH4fKD4j9LE*s=z79)e8-Xjw-Gj+B!u=e$ za$G)G+~Md1lH>Nl;8I0W0bDt*AGALs0vkX;4*rKk;O`(HX9xsMU>G<^1{-o3L64{> zJFcZQxLAcMi6)SfGY`N|D3!z(kdPA;f)OhQ?dQyoGg&K%V804<@Av3xZjY`Bh)X8yEqs^)H2-!LUJw%#n&OU?unnhAS0)p^eEH8 z@{@&nHC3OZ5+XlTGhc}xIh`fsX2a_sBFE2zwrFw-Sj1)wvIk87mc?d+fE5y*sfR3EU5{zyMw;z-$=eY!fOQowAxN;s$NJSKO z$!-D>IbkN`+LSI*uE78kP$joCfH z;@U7>LC*dO7B>&La&}O#xR(M~&K?RD_gUb|*+s$P?gy@%eH1M2M6?U#?4)3En}924 zF9nPHAaLdEreJZu0Ir<<6fEutCmNjk?5JRH$s;TPuADs;l1HHE&MZ$T?0* zV#ai`U<`tAn}I8*n+1#e5OC#mv|w<_5WfVjoURsf;Fq3^QAvGX+ffC6%Rxv^f(u3x z(%=^0%1Ls;;F1mh2e@()UC=g6AI}_)qNvY`3-;p;z?C!c&yk85&_$2)DBVFsASLt(4EX?fh{p3^~tKW27E2iU;iLVBY^{8FYHt`!8#e@)URel=xHQ*NL%L#)i9`xO? zF_=AyWm#%~@BZ8rVi$08fNKSA(266?uLOa4AV5kCngE&4UqE0t4rC#zK_J*}XLOY? z>xro0K;jfZLi7q=!RJ%Y%S*xNlDcq8LF$hnl`grtoQp0T_AnAi!T9CBa8K&W=H{BF z7VJWeJ*}PDvr7w|u5qr>qn)nC#qPTLnkMJm$zvy^kIfjHnUOi}%<-Adg^f*4Y>`bT zZ)pEarmEV?CdRGm?~q_x+R$9LsG+9XS=Z3Q)UdDx^)2P%g=NaPK~C`q$oR~q>@u#L zG$@H}1D4LT@;_%<&P3n9HRdCTW%G;p%@&HttE{VE+El~%7>n4PS!|~wx-l0*8%Q3S zcrjkK)Ymo8)40sv3p$VES7j^c_m?VuL1oo>)s2l!p{Sk~g-pT6Ov+)}_CD)*VkPx2 zXl$%!tGF_DkW)PC`fnBLzrB}OH%SFdZ*8f8%``TY)h({U$#>9UQQSyoHqnmuoRLxW zhH4G|Xp?akOKfGuB!Dg2Y@f4Rjt9298q0}G0&Cj@Yj=BDQ-5KBl6et|G0IJaHkueK z$ER1KXqn7^#$66fJQpTj*ihHP_!*WM?nElRPs=eFy9ZBt)*cH+!YHO;_WBekN{VXIC0&RVSQ93*wLr&#>OLu|OdZ<(5l)Ss-w4|oFrLw7o3;?co zC$|jZ6#x_BJ%ZyUg5yje|8kFn6AeN!fG9KOoZxdNc8B+)ztok(H-+?3xtQhw3uEs> zN}5n^GOY&#bTETvajBL_-i8!D^Zl@P|*+(M*l&W#wyMU(q2$`t;Ol;T+oT$Gh+b!yN7Cnw)aKg8rWU4zsXEy9 zJ+N-$JnVeVBV2Q4l^5ofmz3ft3ruj0h?GJAR%Gs%ZJWd+kqATGAd z#1X!@BB!ya7DOI}4J|cI3oEN?3ai;4c-U`DF;PZ6)=bryctkZec`0jFG6p5e=ZuL< z*;QN_kFerKaCwY1sURz|t6J)o)ffV>7m=x!3Gr!EpJ84lXSaFzGW|mD9AXa3)n1ds z8S4+{{04H|WVsXH7b+&7e5%FHw;_RErL|p{N_WiIlWWOnJGkE(?7gS4rqvv8=4o_wdfk=_i)PqoOZ4)zN7VX*6K>^fP?hp5qV&{03d5UY5N{NVd6fd)ChGS zJ8|TqzRw}f+ftlxU7Y-ymcxqVtjgAsR$(5yxjmH=$Cra+qC%_t!kTKDm)4_fyu+j7 z2zd7~7Dp~IJR5D38dR;qdX6YgnI_JDDbCa2n5eY-igQ30=dVJXXO5Y%?Ew?i?tT;E zd~b;JoMvo=&926VhMKCDnrg=HQfveH`_TA*z#^g1D1wn48x(sC0b@{?qL&Ys%9c@7 z{!1HNRgLaY>d9$n=zfl`nRL%BzWGaohY-IhS9pGi>GahIY`%}8;70S@ZY{RSfd3c? z@#$4s&xt`JuS)*M?8)_`IbiEWgS`#-zN^t)TGO)lKY= zJSBaQlYIs{x|)7zM*eryB$xGGioRP~lz1N|wwo+pfSsbE^6cWAjPm@F;>_~t4V4S( zYh3k>)Kb{m(^)Bhtm*swIdB^ua7nMyGHBG8y~V9uh24UI zk11e8v$j1Nx24p&Jp)~n#Z8TinkpAFUSf&o!w@DC8m+#zx(S4Ka7{}=WkWT(Dj6@c z4L%LoFb%JvKzhB+u`Nb&ZMYqMwG9YvHNos)2iX9Vfs=$a{gJ~z&IhOTI(hN1YP9Jo zeee)kesK{%Va-idl#(`@Qr1z5h_wF5r%e4FQXWH!bzxH@)N>Dyia8%i?^9AsBPH}7 zKnY(X0b0YQvW2++#r5T3K84Oag!?T=V@i=u*BX5^QR!>)tGvOZRH#0YxvUC#TT%(=ZFyQqB5Ol&zqH`7Z>=9DlkG3SiZvzQ{1 z%L->rpK}H}Bv|AKpjLr8#>gVaFQ8;fu(IeU1^!8d-;6l7v8h~i+zAqKzNvK=5M9+lUzV>nEM2To z=|tj6)gj0%00-qFUH}_0_b6Pn$AHRWjZTuA_;B=+h-WPrK>~sinLxqFU-)nYBQk}? zWA5R@F&-0ZgePeEAv_Uph|jI$!x5gu<`rd^7L*G`P@O_r$*oz)9#IA@GsVZYYq1q_7^3me&!rsPGY7`-#Dcg@kXz~Jg;O!!XT!{eO@4_^^oH5)`( z?`;Oro#|DbVDfVwKO9WHu26rH7WVftlfo|)RW5H_+QQz3qqirWkOB@LMOQRu4|&yS z{)IhWht)kHyB)Z6v3}Z~jJ|RB%2D9W6t)=*2{YAVqAqTU;;HbI^!BT`sFE~1<*{a& z7^nt=mxJZ6B+J$?FeF$$v#G8H71L_P7RNnK(LZQu6!bLF!Y-nN`jCnpl;UZpG zt&GdaM9Ml!(YkL|E7Nk`hc@0plFjQ<`1OjtA0ZD#Qyng__w*olhlw1{*e&Qg5Lsu9 zk$TV^G2bHfFctg~N}E>?TXa2~4UndXExH~qLyB!-T~l*Qx#pA^e_V--kA~d$69_KM z3wc6`97vGY0AY;Uh&XKnZU*X%ZF+2_NY_3FS^fe}IHJ=-kn=@G&W2ZX?Yqc*10h z6>=>ByM#fT17QwI@3Ad+CmJ&X8Dp@GN>Z~t^s&mOS`LB}84&SzOt#^ioXPbNglN!C zMQA1Wo*=|PDn7pff(${Ykf#5CN4)l_O&HG<<&eNUT9Nr2H3Bgrg`uzpkaKR+n>yIw+Nq zEFN%8hBvz<1OG(mGk&e!x-m4_!rc+Nr(y7>hLd(xNvXX!$ zmNn{vZc$@~i41jvX~Ls}T4aW9Q8Oo!ple7_szpVHZc%dzNX$Kys#Tkhsbj`bwMllY z)hUmur%og9IUXsts-;a$H4T_?W5nqE2{mdc5jmaU)zrd&QjLxw8a0$6TKG@tDOhWX ze>uIUPkDIF!c@kb=>605IbG^g1RuIS4@iAp1EvX&w%d~WJfQ3IeiBg*s2ozG;;2OJ zphUefL@gZdQKLi+`w;=$=+)7hH@wXpHGov-G19e6Sb=m>c^aDTw(}dCs>`d;QskGK zqxw_w=}1O*c<*UZZafyAh9PZq!Dw2fDQBYmiO@xBA;D`rXO2k}c3BO!36r)N3-1}6 zJZC;}GKC2nD33?PQ0pEqlY{(=%4n#vm&mJ7#)uf1T78sx2n(Jbc_Y}29T(7(Wx$RSi{dJC2xG{+8O zq~UA9GojH2ZeAC0&^#)g^stfS)oi-3x)mmEj_glZuL?=O2H{?+3*>%tr;Wnuc0z+v*kj3j2s&2BWL ze!g!t7h?(Yd$w-N(c4(nxU8mWd3kBstnrz7=_h5BQx7LiWSU>w*mz!ZC_QckqtQx0 zSD(o{T&4G?Ehc{7fNQ+c}PSivgBvGn2%kSe2!jN z8Vc`^sZv{Dnk$e+CW{HYVth@=QP^DA;9lBNT-SiXC&sU^3?9q=F@~|tFf_uZEf>S+ zO}LmVET`p+1B@4k;r&@+LfI9T*=6)TKb5@I??qmTM-!W z5d%O4Fn-8qbMjpfYA2LH=<%2qAg9Y5Z&^&dk;`8+9%C+2JnNezUZWVf*FN#z#e9o(=`hMLs<&iafEr-V(iW{YVEkRnfHang z@8qv zQITQQG)s59C5FEVDd>IL{nv_8ER4N;F`9Jaho+Ln|6Pd5p+B5KL_YVpF?G3NamA_F zhXo_;nyJ$eixg9v?K=%(D(GFL_i2Y>D%*1!*pJ9r?BzEQ#ra(-&ZdT%R`k-L%uip2 zz7{qF!tSWPXm zv<`;yKd43*SJpLzQjh)?{fm349`!aKv|3YrjMx=FFF-i+OL(+V{6k3*oY{-`(WoiuL9Z#rYg$c7x3Z?Bds$OPK4H|9;uXE7v=b-sQS{5U=lO0@L#z60s)O44FefA%hPrZSQ3|NSORsM#*}{eFKsV{}A#=Ok*uyiZnK zR9@n8l^2vw*XIZ3EO%pVDdW$Z2aFM89fV7Jf6G~a$C+qyTk@Oo7<<|fZFeBi7=PP5 zU<8|sVoF%FDY;xYahwSy_e(F%XDkj~&LY3U-s>q;VRK1MWi_Ux{mVRfG`nUBCOASe zLZvO!5%?dEmMC{~w-%tWB_*@`Kd)p6pGucEyXwy?ZCu(^g|42zS`j{649N(UHgvao zArq&P*f#)(8Fa^^xN-yf7a{I*Qrs{ajMfVtby@Zh_e<;GaUwGxf>eY~`_MB+8anRW zirgaq!a|rSMhG;w@*l5s$jt15oMMb5R8@+Zo*v4~7a9sGQGUKF^7G%v zqr`G!|A{lOZHpoCH$5fBjB6jMR)@opeg}~Vmp1qJ6?t{|q-i9wc0^{!@hCE}OcBt3 zAo7cb$UY9X7^W;IFMbmN2b+S|35!l6I8Gg`JSbt~Ol0Hv|kYrfBv#@SaZX?AL<(M|l_*eD;>1-Cn zBYZl=!SJ$Q*{5cai7p4w3glT!>*@8P(<$+0BqEeJ9u*;vqHxY)>~%vCv|t1ZfL9W$ zA~JfeiujgeslX$UiI5ve3&yI5Z~0{5oIV0HT&{}vp2rNhY_izx9cnl(Jr+q}19Klj z4XGzcAFX>VuNw5J)B5U==ad0s+2Cl5pa8qIhaR3&rU;KkCte(XVX&flUU=Ql$r!d}}$54WgV&c7r?J}%2VF-$q{D8`0h3DVdP%lSYnq5c7x z2>HPt64Od3@^aCbQeosgt%Ra7KL&}%X_+S}DCggR8rB$UI4tKgX#mq_McDUdQ(L)d4o3)%jM~JKq5+7$RCSsWCqE)A3#LW=-E2O~NYg6A5j25Ap-%y1n(`8Wu zQrU$Nhw$k58>%p)q%Nio17is_*!lGSaNVGa?@EFmg*a(pb zcPB2qd_30L#2Wgi7%xS?uoSJwSZl!U*pzve^)d zu;^?kIj810bC>eis%y@`k^!g88*-Pl?rK)EzFPe{jsfomh(qtw*;L`$bO)cgVQcun zluam4_uwtmIJl0x@+1${%AAWx-6@4_2dlcUxni~(`aC(-4Q_`Zgki&G&W!C70?oxt z(x30e*ZQRnnL!BSd;ky zurqrZb{V1pm#J70{Ry&)UZoSuaGGszaVrl@>jJkaNjkTd&oplJg+B{zF}$o8Rurop zutsO3g$Z5rg$cv11Y|fM+A`sVCyrZ+gltOCX3j1=HERx1&OwS?`7KQH*yalH3_Y`& zvoNL7kaLeFr0lhu6>A&3GUc!yoodrJs;-rfrk;!lPUn>8V{UGc@{aLc9~Z3;rd|oAylz>}R8nh@Y`&!jOn2Gl@sz4RMA76W zN{G&4jw=zRkBPaFb5}_QMktwfn~7UhyB&{PE8S{SitKcoUsg;rG97eZQie6u7}^x~ zr_*gb-4>S8ZGyOU(XBJ)e!MJ(W{1ZTr@Ul(>GYDh({t&&BM4e1ps78fnShRBj$~jY z#FF4Vr*dg^i8i3hw3J+IJ#}VXbxSSYRkftjmPU6@U5i+5t)&!KVvXc-ykXa##g0}B zYnpQFny@Sx8;t_w&_D&1P1WaDHr3?SH=d8ktECAWr9wmvI0tibODh+=PC^kR96G5oObCRDty|TTPW}prg#cm@ z2bW$hkF_-N{LHP8rd3K~)tkq<`kS@g#W1&gQF+O{+0z-nqyOOX?8P$~TL}J%1RbRr zE`__Je{LZO$Kf;I={?cp@t)^b!EGC&y$6Pjj4JdMt!y47d!+y1Od;6?kc=qML7#?X zkMwsHNXd5go@Day(Tr-CV2W;n*0+5nE2*if!6uF5OeQnFCt=WutPS~f9i$>`I)c=Y zYEQyxE-BSNdrvBPEb5n#szpj=`P^5kGJWGdU95j6V1)Gd5Q$LfWK^Sk{X5~5Y!c}) z0K?{1)-T22_`eg1ib)5%kcL6k-V;=w;rizq7^WfUJ}^{5)vFe>&%=WKZ^0?OOlP&) z^up-VocvY%$bUf|I#M>G8`xoJ260|)GTF5q&&z9Q!BTl+Lpj`gO?gIoCUs-6Z+lO2 zdFbq@h3M)SA$=!hg^*lkuiTgMBJ77W4bl-B9W<*)_!p(5DiF0C5Umk#(MgjUp@`og z!A6Y$>`qo)1221V)WFq9-+**&xkoQKS$RnABM|$56x-@XW(cwMvMQxs%dx7x9DF|x zz6q6%#??h%%Tq^_?C%<~uf;w|lw#|Tg?NYW9U2V)zm<#4LlbD?pnQXNQ(S})gVe@v z7?8efQ+Swh)-fjB^MwO z9VEDV$*hRcvH1K>NI5T6mZpCorAKMf#Qcs&4q$c!HCNAq3{6;fo_o}!_9INBQ1OYQC-n`^P@xl`i_bf1 zu4Z6|8`{wR^Zx=V7(x-Qw)&&y3a5iw>AaKp#YatQ6Uc1Fwdv?d5t&DE6*L?*S48G9 zT%AWxipV^HtF`f{xgs)8;c~c-niP?F2G^gDo)nRJ7FX7iqvndpY{RwZ=t&Wo7jU_o zj+!eXvmKYU`KU<|nU`>_KYCI`<`rC%TaKD5BJ(P)_M<07WM0QryY#5JA~HA**vgh2 zH7O#~j%)4FlOi%ZaiyPs)Lapn-MC&kdQwE@9b6TyN6i(H*@LV5=t&Wo_i?RRe$-qM znGbNKUU1Z;h|J$`Z995WM5YthybF(-DU(qzbw5e)-bIaoKnG4easI9CIrMG$2MOe%lhM?8EqE#RNI|&UFMejSt z)>@3c$9Wt!(~KY%XfsW5qi?1u?zPP{#jSTUO|iEoT0bpIo8`Lvk9piQQ=Hvc6SH0P zZL)7f`#@;%XE#$j&a_AY@?fw(`cee`X^bsJ0BEv&j}%gt)=hC6j~mRdKsfgwv=j)T z0T;Gx@4Hfy07+o~pOE?jL+ZV{)N=Uy5gwNyiqr9mT$)R} z>-_w@fd63;z_!j!Ej6v7_>*}nG1Nx>#Cv3r=1=T}C8sxtkqb8JvVG|d*G@AD=3q#^lw=Oa(s;qZoS@Z3$D@D456WxrHv;NZy2ad>T{$~J&OV69gT{ZaaQh~X{n%*^KpFPspkM5l zvOf;T z%Y0Lcv-77BDamD~06+my0|0X8oRL#B zU4YFj@+olWjCvI-+?yJ!YO1j<@0^DGMs2zQi~5Lj8q1?INa`B2M3oY;t0fjfiU|)< z`?YsyMnm*2P~$~(Dhnnn(2HVEK9{ztJ%Kq$J3YhlmlO)i1%U8mw7$X=S73^9=sJ_E zN$7p10q2PfD^dcgv~iH0<;QNtjpM&O`r0R{RkcDv=$k) z@&;_BI|gwNdX!9-YakZcnUTHP;VqBzxMV&AN_YTHlrV3{6-E{%2GT0A3FzZ|?BuKQ z#(Q`pOqw`Sb7xR0k4Gw%26}PsS+^p|i6kq=ThPqJo~pe6V4`0@iTViVQ#>O2Jfzi9 zTEhbDo8DAO(|_>#(>!7TfmQ*8{n+|?UXV6ZA;@oj2Q8f_^CG@SUYyZD^UE>PZ;DG2 zS@CDcPKeua8G8JWNz>yiLNSLxvrii-$wsSr@@`~oiJ=(UB*$x{!ejC))i|e6%ikb5 zq3y(l=6zo`jSnCO<)v~HV=qe$gkz_C)}x4)7gW|SJQG{#GXA9+nZ&*U4xxUB%Uc@1 zR8JgFrE%yWqcnc0PRqFfNmG%;*yO&hu5QR%3_)Ikx{@(|ta-JmhPuwItZT_@Y%0P5 z0XP?2^CyfSP~*l3<2f5zAQA;(Fb2<=)Czp zUD!xyYzxFT+>CidQg`9xTs2ceGuRuE@IRTc!et{QC$uYYSy2@&f^WXpYkI(!HMN_>L?Xq)aWyaBXt zicbLTo9q)n`zHGZ&;fv20386(BY=+hH8`}}Nr632XVQ`mJDo{O^gW#^0{g(TcrAU7 zn_>eBNf16WE$z&bVhWfkMKw~0DiW-APMCidYN<|#2=ljNo>cAVhDS=f8KO{IE0DjvDM->R7h`}nzv~M)^4N6-$MDX z?{@wWFFkt;(o>NhCPUGO5sDJE`IJa2bHqZ4&DLC}6Z#yn^i_^sX{5hr-V|;BFj{aTUz&AB5!C?t zbIJ7F!nx%CSgy|U;-9Qjv~=u{C%>T+Eb^x4BnwIl&g@oAUy6lj_$znc$3_4-4B)KR1bT)3$ zOnv7xLnqk(1*y4p%j&9Yn!Ku^GlP4iLq%ipF`Y+!_eG5(x%;B_RIF{SsOv-S#i%R8 zcc(=Mi$fR7B9b2c09PyaN4Uuz=Ud;#WWGr(gEz&WGADH9kC^0nKQx@@Ftz<(i;*&9U zWr62&-HoU-1G8+eM47eHmae3E(jpcN79i{MnrfCX{;d_$3DU1Y9RdGFxToP_>?~NC z%8JoI?>#?PUthk+UDp_jpF05Ir()2?-_IqGU^F^x9)mk`Hh!c>vr+O_=#k!vUhxRc zQ(-LT43}$qX(_}0sOTGHgdfRS)bDXWCVG$0Ua9op-78f*dG|`CM`N#4deHYu6|ZS~ zrP8h3E0yl$Ua8R^8hfRRSMgFRPD*P z1ovYxBAn8T@ORw4jhiB4jJYCO(TwS_f9iTAg7#01!D1!9683vjBJH0_lUa1*>a`Mf z6vpKkz^vGQhP{73mTRMgJ%wQ#lZEeA2LE$2_F}UO*5w|Oo zre6PB^w?nECORg9Ud=Cj?K)U4rAX{E=1~$Ihs@aYzO6Wt9=!$ZX2k!G8H%G3;+~50 zF;d=1C%Z3&^n^UwM}3{jsoA8yt912gr)+d8vr0){_fTq2I_0$lcu^>FQr}i2>47Y; zQyLio1wUAJ#8*K54tE%FQ0_ILKUYXdC|p zo^cZ6pQ-~!u{wxOnA?36_^EpGX{5lL39VHrmc1%9f|tDy9^gaQZlZ3U7F zXdX_^CdSS;6i5flqxSIba)}{;sv5C@7~}6N*q8S!2v4|gk_wHzKHpa+ol2@<)Jwny z^=;LVXr!8hP|aJ0YG|5p57m^^)YqWPLs!oCv;pW4h)>vidMM|6Yye8i$q>p(>f6d8 z(XN1Uo_LtCkrVWSXHC(RBSKU;Ikqu!Fn=6k&xY89b`8+qy&($e#Q zi7;2pww6asZsfToHv{@F(xJPq!QF@B>+Tb+br)r{?p_uhFHy*U>NOA@PR4Ygm5OsQrUPkxB_dmT zvn3Z|wsgaEsXbEsBo6bQh$Y6iAv4V4^c(My8Tt;Y^306a%xI5P!X^n>jiC@7a3{jBaB}o5;l-{Br zb)}t}Qs~_zezgUg#NT^68l6x9p$-))&<0HUYAGNY98kfql?5>V9-2L?_g0T&R2dw1JQe)Cfy@ z4qF2oD$qBk*T-D~oC8D_FcoSb^oIWfY9JX%4evt@c~kUqV(F;{wAOu2&-r~gjzc0f z%z+vRy;Z1z;;_E!E=UG)oHuO4W=Mt_!o2PRqi{3^>!XKMlQ zl7ZajjOS5-7<%w=o3wo??V~8#7xLJzcWme)Ba=8Esvr_K;cK_ zecDP$EV2^i1q|4pEDOtFC;31_v#`uW>gJGraE8#$HP8(aSdR;{SNpUgNCr~GQ&7Y$ zh9Yn%r3|#_NF!3j()yMg0(1MwReT002Jic{N=UK zn4miVl}mK{Y7|exr$UPBUt;Xfr^-S{%X7W)t2_=v)8EG?+c2TO4A z+53@t4hZ$o44S?h(~)fPP|w*fW7ERZqY=_@5yxoCxl*+a5y}~qg!NoNeiT=j zU)L=bIHd{$n}XM{Ho8yih(zoMDdJv%2^l(~Atc>|L_f5Tl5S9KLxqygg!F{{3MuKZ zUTl7Ynl_Ql=zO7~DScW+Bp{YVv)7=a@M+SFXnFvtNUz+t5PI1rGa|s`i2O$`-srpl1De-80WNlFYdLi`RP{QnqS;% zTk}VC8C&y56URNb<|nAWHGfa2wl#mGTS0UaO$z9-HNTcZD_M-K`L!h9t@*VS@7Da< za~bVfefZY=8t5ms=GTCJTk}Wm1aA%vD9XJyEek4SK8eMR_3~^0)i=48=ICQWx0XhW z`*5OwAcGk?0%T{A!y&g_d&AGW8lO4Lr6312j6efp4&Q;XYZWo=(YucRZ(@0mcOCr> zZ5_Rc8jRxrHYyQx9DoDiss`|#gS^|6gyR6bFd>ld3tei`?c8(%z2Oblhw08Z@`Zn3$0*k$5S+Zx`ho#tW-00GM@sKe zLjY8ME`cUva$&gl8z0&yOr_*AkZcn!M)Y-jWbdCq$v05)f+lQ?w%E;hr@j9Pl=>u6 z8C%xJvx79+3OR1x2}hSL{o-=p?9k@otW?nV@gU^>7;+QV0Ic0Giv3Du)HvZ1Q=nLH z6(ncltW*llT#2ko1K1{KG+m)Y_alO*Qz918*STw}DF3ch?EOf=izwY&Au)cH5}!En z3B*tU;AlXh`2{h(9a^^3)i;L{T3)*g(+lB6{6otXkj#8N{cOUI5k5Nb@VP!?Cs6oE z^USSLgiH(A=vZ}xBl@$}dxtQDMK1QfcKC8F{cXSHS}Ke7jZwO^$ve@;tlGP)tlS~&pU{m7x?x_B)|RpoMlh%BQ+ve`{9FqU{VkEX4l>an3P?{nf5YvZb# zIJc5G*J$Fb72>?nw{qw3()kVvw2Ir}kw4oQZPf+Kmge@q*{bWmQT~cgKtK*gFZqbE z`{9H>ex97rhe*)`)GG5oa7#4b0k1-@{~i}(m^BLNqT_yvchNel4?mce4n}DT#b=D` zWNd9@51*kqhA=v454YN}c*!^xFU+WOv}5tuJ;wptro~v{UDsSw)!0yt4Rn__V23gG z3c9tEM#a%tKka5Rp9j61sz0|?_pF6xy4pNwbMe z9H#XlOoCpviH(}Ecto1SvF4Z?F(>uMybO9J3+jtyIZ!nlfgF!4h2hX%=E92*5iS_&7 z`*iS4D8+(rG(vidZ(=~f=g0gDKhtF?M0>{A^0=U~p&I8zp{0X>hc5x+gi|6I|C@;Z zHU{ILane~R?)Wb7w*>R+{6jcJ@8&ii9>FQib&DEms-0S>XHlu{7kfZjo&($7w`DiE zox;HL0E!G__J87@dNm@au_#I_il!$HZ`y!!T5GCB=dDO`H#N2xN4IkAwdV4M^7G2E zxsKePLvf(XyQ-y8-%`n>Q)_7~u4$;&woi3M-zL7$(ufW%kk5@KHu>U~N<0*>7`@t= z+|2IaO6H(Mk+7fAam zsw}2uUX{DBVPPZtCy&f9+1S<4gUXI+4x3;if`z-0W0BYMn1NJXsZ?F9?j3Gu^*{FC zDy(L0uY;wld3-WhS}!6>j4DY5{cHfH*PtO5f%FKi!aVIu^w^=OeuSomDeNwMU*s9B zO~S#wc78dED7`xy7k0ltX8h6j&<I9wNP2-PtlI%Pl8!OtQE{+1pFA~JAH2t zzIGv)tumN>)t6cQAWCqG4JiijH^3=jW!cdih8i9l)4sx!M_dl${Td)!Jsb>D#-CJ9 zK2dMui8B5_Heq7OhA)o#nz70PsrNTEQKZJ@ahh)^IQVeGNXGs@dshNjMRm1jc{9m- z$$Qxs5+Dm9BrG8;h8=+f1X+X-7Bw0}5+IO`ED&UKtF~&j?$%v#*SagH*s7%{Dk_Nk zR%_jDUD{f0ZU6r}_so57CV7yDCYbzx1~M~m?wxbKd+xdCp1aJw^w!aVr0mfK52K_! zfgra?${uaPqYfjNS}rWn0A0a%V>9ThEfv3!7c2s$fj8`L+`*7NC4~jQOyXySX6_6d7bV} zQ*Ho8dao6KaF`AoR^o>-f29FfFZW}8gt5|B3(fVSLs3zm)V(RnLx4%I{2YJoD%y~j z0Uo zTq-l3T)d;ui-!j|K}ZI-#a}4OJx5FZz;{*_aC}>6xm1dJtIOM083cgz(&qu}x4LqN z68576_QR(y1fegGJ^}1Wvn6&*Um$dvY-oK4{Uog+SP6XePPo@E_9tCALkN1SfX=-c zhr=)t1hTWkzf_demGODPW`cqXV$NwqU<0U~^;ea7ddVkmF;Zi@0cxR1{KFE}gI~bEyu# z$nYjBe*rjpVMYM=MaIA!61O@SuPATf@9-2(f`AEXN*!=t<;RUaIt%xrhMM|v$Q!F6 zCoBB{j$Sw;fcq8;_hbY`h>G|&!xw!j?BjBJQd!m1Jii%M^LE1*Pw6{Tr0>1MmOg?C ze@XcW>6<)P=F6Y`>07uG`%1|~eqzAe*b0R7)-!=beqyk<@q2$FKeH0~nIn;(TZxPq z0{RMBxWki)1eMB6`PYi_p+Aur<*_nxT1$0JrEo$Pk`wZsi5fTu80o#w1Ihf(96Frx zXr_QqM(*&yCkO=pIlw<*p3EbBVQ9g()&hp1rA5gfbYoraDnO*yeAsZ=s@@)S56L6+ zKNIK=U-cFb2or&I(%-ONh97;Pdb7~aEyp)I@3~RE-2i~}64n)z*xz$=_4cH|e)xQf z50AewN4bDTacIa`;q+AYiy(8U1&(gXc@& z?Np`^OTEDOJnn(Yj08k_ZGQm$;~rL-;=_!dAjAXxO+f$hfzex?$?p^TdO)PtJ`SLN z-$H-BK!5lY{!2jc0Da6q&?Z?RW#3NW@nKFwc_TWO&y4VS&@Vx1P(?!v{kVM3hi@1|msi(R`GZ!}trc%E z%Z8frmZs`u)iu@4>;1IOa`7OUq?X%?E?WFJ?b}=5F+R|g3S@?+97X3t${~@Vv@MJDATcpf*OT#I>i;UCe4WYeOJ=u|R6nK-H`=^V zQ*P|ly=73^XL33exSdeTl}b{DEXUG)hbwVlpm8S}V- zOuFu|YL%#dvMkqkI>T0G_#!ckGs2FHjwUsnRGtO8=2)dL0Ot$+4*99jago) z`LOpEB&%AIHQ8+>hfz~5?loG$j27xrTXR9SJZ2oewnMp4dd!FUf%PRJg^>~s2Xy5b z+TRUfqlS@DgYK+ci_Io|5z#Xm~ZH=d_M3$Ss{UwK$z8 zH#U_{uU%GES&5k_*u!x3GAvfPGJR~`sM7Mr+S2N}iqeV>o1C5A)IC&!rC9i`(@_%9 z(!#me?4`7*YHf8zRq4VK{GU5&o$l!ZSfWwh-`QDgPm zszypwhY9*|{SZZSs+U>&hnLN(Z>%k^fkUBg|JV5+8D0^Fjb6&Jh75H~@Z(oq;yJXq zvZaFh8~AZ!MQu}cQ(1L6bx81|@AT@53aD+_GIT08SJ(LiUeKGGF^wtk@*65WsP{*> zNn0;Qul)~(tZ%A5xhn8N>iV_i_+&+L+Ns<6Q#7kT#rg)|h!L%05z%$k-fvzt&N?FS zWq^G4wc2jdvJ6^ZfiE4(Dr)mVz_^A8Tw_{~X0+5*_@6GZ9?q(3YNqsa+$DZqWh;eT z%{#6=_Y>njm*Y9Qf$&vUE8gPZOCXEdQ6rZ_sp++{$|~w4;;@I>hSiq)!+zg}Y-MdZ z?Kmf2ebjW4<;{|1=vP{hQ2XmIBFpTk#6~mn?d@&era=44_q5?%J(5JnN!n>R2_ww@ z>W(%kZdgb1+qSeIh*ifQ z`kXKDB4wV{#ixJq$@5e|^Z6^be^;0tUXV zSyTdo_UDi)%GcYdbPcV9E9ILEs+H4I3^iK#xHRsdDOYtX@O~X){LlFa|0>4+3H(?+ z!ccQH1D-^aKwomm=(&z)*9pz)s9NesTu))HlfjfcXRBZB;;v@tUIO zPJO*}MGGt`F)>wF3v{)gu4Ym@(})wE+$mj+Yaipfj@mED(Ey|+Q{Uf)cwo@E@wpSz zp*7{VIR77T^nR2t(UIpBR0+xRrD+hI<%Piips#HjtLvJoE1F<`YisKRjz{AG9g@I1 zu;uK&TxW*hWS|HU6KZxC!iqacUX0P)w1fk!>V(TW!3pd zTdU5r0#==4Syo+_R(-uFOEkiZqIC%4Y6rCt4m}Zv#%a zwY?3vAJ~8k(hlRsFIr-vTH0mGI=hFp#9Bn1y|{DgY)r$fDQ{Xy{il{xsJ7mL*}kZ) zKPL}3GEFuJ&ggo^&oJY2sQr^^7=>`a4WkI>EW_w)=tDFbJ~*}Oapb8&0QV9OG(Z?h zTDoD3HuNMd3?RC$YLv|O9HIXY100qs57;J=5yG(^x(#37E0J5g*fz&XNeFP*zOibcQC|z18 z8=2`Jt<)pwNup3BMQ4e0U)c5OzJekAhaiYzfikJbpzS``2-oZ4F*hcfvLkFD9)~4s zZm7krU61NxMs=TyP-%m*4I|qKqk=-3k&$JDCDMJrG{cBXG{T1Dis!M3(J_WQ#?TWn zmuF49kRW{~sVQBWiOsrD;ctP}mjGCLT#8|&;wBnH>4xr3HjdVt`Wx|4hLM<+4!ENs z(Kr-2U!u^n+q)j(D-7{b^r87uNLFNnAx@OISt$AtY1*8D3DGeCN0Xq2>&*j7&SJSe4+Mlm@ z=VRkOt){9HosXJm{O0sFe(eKty^Y@=*!acRm}98+(Xha{S&)Wt4{Zq3XHc4Q1)UG6 z^ZEyMY#z`MI)@}JvGbVTqhZvT{+N58Por8nTKL452;icf(xt$$z=LIMRLj^9p6?mY zb8^^C9RYVOQ8-HH|D?c@c@p2}3`|WCg9I1+q>wTh(tpGZRD1+r4UO&+Zq(zwZd9)u z)$2z6H1oX3ZGsae+@`8tAIdg!tak>O)7k0up|H5AoFvwES{Hp4+yi{5$FY(i1|(i0 z9}4rLc>X{S!M>BRf9b$}j*xpDox9itWJ9U4p(OwBX~r`gqKuRdjhNS`{3LLmXE+l8 zM|`$11YP+FLldYIR~;-|z;k~(Sw&-kH0a$MxVRk zI-H&ULx}dy@^3!{r+4beM@H`~|4)qGS^oF}z}_=>SZ4VjunP^{Yj&q{Z%n}9Jov`} z2<3gie)1B6jeQf!DVAz@p7(1-01inwmhDo_Fon#+yC$y8>DPO;ftpcLkie z+=sU}hJ2<6qJzQDdHJ;PM9+Z!Btzfpfc`*_kot=Z{R07A%)03rB7cW*zZ!1W zmYyN<&l&nh0=oG6q-Tiy8^--_hsb*dbXSb9E$6uH+R`(i$1?Q4Vp*JkS?n2#p3cxu zk0j{Aws3bscdv=^82877J9?6#juHbm4|hX*&fibkzs_6A*uS7@rM9p0x}&bQ2VckF zAGJQsOA}oaJwxuT4E+uXZc1K!2x&+!p@G3UL9^mXrJ;Lg5oo>kC5Ra6)Ebz4nh z)oKz`%k33LG>WR6L`<0WipiKiDWne>($k_-86P(DGKM#bD*Pvs($@^>O#vwt6KFm7 z{vsg}A71AsW~QXzJM2uunvk*er^HzjD}3d%#i!YQvoiaoBqT&fXJtf3M-NS)+h{{g z7akGMvH6L_`3%E+OgK78LsBvarS&EGrJ&c~|Ly{Ma&Zw}%61qnDqCT#Yx|AAd&;@a zZTt02ohv)ym;D22`$ARn)vjIFwv*RhV43izR^O;(pYG(@SYu$Hu)u*d2K)_6$swD} zpx(^Om{NV`vp^tQ_5@Jb)k5lW2S!~ zrqQCtSuf0H7qZ;XEcc6a`mFWuus*F0oAa2MuePmszFO~mwchz^Kh1nKYn-R|v-aN4 z+QkBI_5s90TbJy>BZxt!_Va4N_~!jf+7aL!t%pwa=YF;;57{63K@(9zoa!(0fqOVV z>qp+)_t?Dx^MxLEbXL)pTAI@R!JAP6{I3(>v~aIOPeC5b$nWlX$on(${e6YZ$ye(s zs-DHjKNHAhyJfRb^-lYOT3RpFvR+ig23rynEtiPo6g2wrF>)3)ue)Fwf?x=iG6JzP zM8EzS8CV1%(HN|67+@qvq44V?L}#PuX6(F=$%6s8f`MEtTz(y^RA6h0!G?QiI(l$) zte+7!zOUiV9+*mBLu<+S&YeE>!I$ttP#d~Ft8#cy_I2Qk#K-RVbbJU_Er=COl1*LD z{%B_ZC5b0_Al9nLh9IzshF9~Voc&q=Acbu=i<6dM?zEPIf)B*7FIh`NncW4%KBqU( z%CcZ@XdAIfw2p6#(1VrKUwo&1arXf?7@t7tKf{9fRJytmF4|mPM@L|H!}VLjb$<85 zMH_4BFcsZRUSDIEC;gi4hwEr;zN2sLhPcRB+}izcEhb#Q>3+EGAzb%$KV0__u5H~9 z*8_xWNB6_^5aD{F`{CM7xOR0vT#pd0XS*M+9fS+p(R8K{@nd=?IK*CbU$2A6Ry8@KU~icuD^9ZT+b1%Z@V9^=Ly$;x*x6=3D;>_ zx3l;A2-jKN57&Oeb#C{=^$Ov-p!?x^jc{Gs{cycOxUeBzck^@JB3##XKV0t+uA90a zu0Im4+bvwzqQeeftKrh4`#>TK&HX7kc-S zPUAf#yyVGcG%yvbtAqOT3hF$^zgr`(W8`-e@|d*5gqVa_#(uvTuf5pRr9~1V( zBZdgS>}FA)U)Nio_wKLS37a1s*c$ZK=csyn>+`0Syod?caR0CCbGZR7s`Wc*f7}m( zFLvUu)_LQDGY?O-&Kpk4ou3uke!!~bfl@X8cZ^(PzR#WXg(UVpNY~XT4fSF%`R5K% z9d;|Un-c`u|5#|TMMqLf7Iu)KX&u<_2hG~6507vUY$Y8&Q$RsfOF>BHcX2Ajl&2Vc z4$O-Lv**+k@NZ}Q&%+6E@rNNd2^WMq7J9oBdiM>q?HkzJr9k`9x7+i*w@bn9L-ckj z@P`yXq)VYpZhgld$gVbf(zoqc_=l(@f6CPZ+IKAYlfZT4F4Q81<}yW1PhUJHWEl|& zv|(HS_yOJseEn|dm>Z1U(vl2MB+k4QmN7KmNW>0Km^*wzU)sIPP5Y{8zCMw{JNQFS zN%&Qq@XxT$2_+gERt-r>5>2ww_~u>yp0Te))g$&U?KT5m?3Z#X*fsrF?1gn5*FJZUYnmWF z3QOwWr@t4jXeKrfO~R*ix;`|*2=n1rhT%=sw?r8cNA}GaXm~TkcB#JjNb&jD6Fn%= zb9iNrQ-n7Mj|kr?@@i^N_Mk+xaw48X)?nKRBqD)QK?@pf6~4mNy}m-Puh8o&^!f_4 z2t{RWxqqrn@0=L_-UaL(b>5s9u?vB86CUui9X_dBj!f{o2|xXAnL)a*$WOxD7%{-} zfQLG-#`2)r7rX$uiTdRYQNQf(tzUZUm)`oNw|?oZUk=ZlOYBv{i=cC@^|l$PUJzvM zjbpX=>ATI{)%IhiJk%d zd4~R#1NwWShwG=bkZl?rf$E7H9hYg;=y;8>e}*;1qG+_-i!t&nBOFUcr3NnOoTOhm zx+-x)E23LVS^c$VB=W>0QH5dY7$Y(TovGf4hzKJ>ABd%b_3|8=6M%vLAzmYF5Uzc_ zMnob4T!YXfdt8)05Q#>Zo-GQ~W1>m6t+z?m+a&94lJz#pdYfd2tx0AdSZuTJDEFoD zT((zTfz}%3PTRR`-O;7sq}g}f{FZC1r>rfAxZ%<>pu3VqW&2MD^aq5aAQqndiAHMi zNdv7%SvzXv^8D7;GI&Gnr5?@D&k_68_n=)j`!nvF1a3pk6V2S7p)Gj~{l6CUo}}pG z8Ty4ZE{yLndJ^;*4E=TsIx9@iD5HxR`sF-I5{6Ndo`JiPaoe_+?HRc1822?|k5;iQ zZqLBo%D8{SxM?)4XW%}AaqshxRnfwG4DO2=_rG{o*`6cs>lpV%V!K4K;b70ulRFvr zU5wj+p6vO_eXRC9PVAX;htsPr>Tr69asL|~PBaTUDXDKtLQ+IRQj#7Phr1-qF;C2h z5q&MZAHYxPG=`EOPaom$V*N}kuFy9_&TxCVN90B}ga4d*#;E%b^V^aP_xO}pBLY+Y zWB8I7mxr#fClp@LYgdm*STiT=ZHz#OgkeX3=-BAk1ne}2bb5t{{L>foQ1t66PKo#; zCQz|Z!mB90I(cy_G2Kk^xj{7TW+BYW6-3ix6M|6Bx#U4q{!T%hhR z`4buZ>uAjE+hu1){Zi4X5K2OwEW&5no;5 z<9>|()8WG)zcEM;J6hK=X--2}s^Q6|{lfaCAY@XU5ta>SZzzWT;Q)$Hul^;Ry}$Q5 zd%ezHud~&q@K;d7q0q&&5;vun`Q^+iHTSut$rkE3dce`u|pS^)9I1isIk90Bi38 ztUU22$eb{)LF6X2t+f7xCbp>EqbYZahR!K;?(&ICn4cu-G6xdgEEh;Hb~Zm%wB)ZP z%kCYd>w_{fGW5tnx@Qm;no1RR{yLM^Gra=m?!Ts{(iK}vbP3T?UKY1^kxttpoeS$* z8Y`+g6gNjJomxD%aBhB?wF2({oozmr)inF3n11l@FTXObRW1MXh!L%0QS-Qh?EJyc zg6{mmLH3%PC9SfA_p`wgQOifLd&7kJ4XYJvQLVk}4F4X+uWx5YTl4F_g3&a>)%9zMgMGl*E5~ZOn;{OB87CXRLS4E1m|}C z){^?h)um1K%bVAgH&&G%^W%C9L#$^*jMlC?wpC-QRgFpGqKje`FfLj<IuKu)UX9i7kY4vz z?6YM5he?9A-+ELW4b^CILjF~qE|n>fBCmJThrPNQXQ+JzqlQjrbTl)17mU1Vl%nKB znq#y+UNR$TFBL)>p-=x^SR%vjdqO9w5hVecw4a86nM|Kubb|&SMrt08$YNvB7 zVUDNM2O)x^P@ukjsqPG;l^Mi(?BbzRrp}l1Jq%(8gTT58f}g+GbiSLlpBcVO4B3{G zgy}Pf&Ub#kWL~GyOdUNuj!h2o5k40EZ4%dTzNd@-u!qOuDdHY5d~^rl@g0Qs?I66P z_dCLu$@HUf5eKD>pIt!yj{lHp_CLUld`8zq@!KhfNIX-O`E;RR=Rr?h%7Uw-mEhra z;zJP^LdGyBAIZ4TGnXtBSQcA9N^$r;>gqIyT=)p4}qYDK)4-9W0Z~4EuqU&{PFojTp>KV(Cf~FUtSP+c}cLB zmmKWnVtSdf24bKKgD4J0r?@>GdSi}wc|Kj*BeW-$^;~zE>wV#Qo2w~=fUwr zPIJ7)?c?R(l{xrxDT`1t>CQ4?CTa2m&2H3W`Zc+A5^|otz-=q~jSRO&1Dw9_jcA zV0398Xs0|GF%FW46l^O`_$9DfWi(cVme8d?1&K4iQX+m^Cp*J)@eB+dWrm8WWfR7W z+Y-7=!5^O~W1vZNX`pA~OoZ@I{I*U^X8~PEQvjSU6w!Hbykfc>jXziix)3R#pv!?? zSxB!i<0ZHgM?B8-NK-CY$xoO&NAueqNw$qN?V?#Gs5nJKS_V*bpSA4CvZ?cW#f;~(zQSY(V4ji(ja3(IuwzzmCuaBpD>EYk0^=$L&F`Z zG+hZj?&Ilt7vJa5^&aavF8*T*?if7XQ4Hrn$tJfVTqq);a4Adhi|(AUDX-{>vtnOm zJ%s?+DC76Z{+Nqw^~nr8ZNMJ{Ko=+RlkkK{A#Wr_{IU+JHz+!Ilm>Zrl6*#2yPQZ{ z+ZINf0L{Kp5EN$XLF`UvO9;6)1gYGDf^XLp7V?mO6 z(A~j#P=P}_2(bUKW9W;g2q)l78`M3=b7#(hV!t?V;X|mrq>=$+T1qWdgdVdW1f-Of-LDmWSobUVUCBvm>rZz zr@Ro1h+R}Uzz9*f=sKA19jLSM3(2Gl1v`&K{6xh{m-c~nF0ug7m14Ke{AfYw2el=F ziJHm-K+}bSokuUOcH%#%yn<=aLG_jb+h%a*+7EjclIpZA>-KO94JFZk*u$6M>A~K& zkSEi%nd9cubuHhMMvH^O>+pvfbUs}v+WdcaF1MPvce9mNkER2|ZjHZr#}AYg#+ z&t-bq9!?Ms7M>L(+?IUuKEa(X6w`Uw`J9a)@bQ~GiurT=aYE^iVmJ?a3cC|L&`vxb z5!)t$WP?1S3k5q5`^zNOwl7l(omt>~pCzz>F7&$duoDkQP+Q^@4rFwpVCP|fnaJbi zzI45u@6&PdAH*7j=tAvPh(MgEc+3<(=*;2v4(3=q9WTP^%;D6{Wk2jm&q07)ZUls$Il0o? zgbXq1)_>S3kpdtbpA#ucGT-~-(G6)Ngh&?(b{_PU3SYE{);`?MXg=bC5lO;-5Nr^q z3kBQCDG8b%`MYoN1OzxWbfwG$L8?T=K~$)%2!eE>VCP|f`A!7k<#c-tvITgVE*yNp zN%mj{E0p>;5pxk;ZonUPpU{=w3LKPs^u*bQj>MCdA`+eHE%X7kf0<$s5MZQR|Ir_J zZJ*h)h=QF5+1a))Xx1~jT1>*}N@l8UT*_1kg)S8AJUDQ{!2*ke2a*`tvf^?m$}0ss z4-OQC^gw~43$J}(H%M(agOCZ)Lipiy&Ek89u+#Aic}^D!b{^^YiCTv)2MR0>9%z>W znMr~`*L=RmIdBZcEg;Z^f}IBkE;v|VaqvLWqPA*B`K0`V5Lk4NdHH{tuy zD|FDKNc@2XU8t&pp{7eZ{`h<%u6Rh7_I&BBwn7i~ELc@VvTOS;#RC|+I7ExzjI`|w z!I&K~;b7>3X-BYUp#lgNFW9qSJnULh0zudnkFuO9cs`SL6jMx z1Du^+4x-rU(JNez=uDwNh_nB&zf4i=FHI3IU04Yg&}9n#oQH;=l)H3o<@w_C z_62*|`*U~z7Jk!@gS}&wT;l6L>@+RCcF?qkTl9m5`w8O4!e)OY@=NAhEJASaz|j%* z*Z3U=Z~B3}rb_|-_kIzK7y==`*}qcfp)9(H+>CP5B_-+z!$0G}=t>^$fxH&KI!+lgl* zE{G@FDG(=1U=-ZOOmnC(AROvwt#W8FT{6YHOXxxo0|!;h^pp!s`*4a$1V|C=M=<|| z;&BfE-BAqZq2VXdq3ayJcSNG+NUIFSFWX^%nIzOU7i=#(1Sm*YK7ox~u;!$lMX-#v zv1p&snT*N7f}S}Ks~kBV5-lW~E)?uM?3gAa2+4NH%%*%35sbz>T_|SYpwwsKkLRn= zoijY$3I~Yxfd~^BCNpk^_~u;IbPzhnAsBS% zLNT3(oepIf=r|-nKad!@P_Xl`ziibmj+ZIik^}`i5Btk)ONg%Mdb+8P(p>szmrEb3 zy7cjpE`5UArB4iZ>60Q{`ed(5KhkjNQ#>wxYM4I2=fa`rip&3^erPWmA-xDRZ8@4c zzH<{$55&<2sJ0iQfK(so6>!5ke3{ZIUp52j%+k|y^icyLplqZQ0vVqN0S$qG217u@ zAfVxRaS-4Rg@AJP0r|u=!>eDQM(U@kQTk9*_du2r9(}N;4}ye8>Lfyas~V$Eb?FbP z2K~BGjmG&j72?(3QDgPI0s0eanm#OE&jYZLVS+}aTaO4AFMkr5j)=R}KKf}|3hwr( z3HlRyBJTF8aW4HYYLb4VmW-cYsj2!IuD-bYnbuD~SM5))yY$Qqmp&j-v33q!{B=Rq6GNjfAKfhA@LTdeR_cN_O zq?Sg>a_KwONRhh8AE*j8Z+QYfJS2L`J-(h zmFBLqfshncWa;|o7(FiotorN2U_v5MLL*Q@eFrI_(T);I*5@=8^$ctf*`pw(5(WgN zG8v_k%*!4WTTEpJ{zjDq(?e2#^&$0c2%Q06C#2 zfIO!AgUr;kQ4#&f;=+!ORq{H&=)nG=WEG=={YRf0eV(vNVbas56nb$$Ob<{FaFVbklv-@g&Jh)>Dl@y)aRqKEC&Tn^8`37 z6LU~s!!el*hx$m=?^EEwOdX^T$m<*jh3dgBt8z)dz3m!ea5yHQ*)cH;34=p28P14k zh`}+L>TifCV&qU$9z^4IC;m>u-&C=z)r|7$nwCad2tZNN@TV!JOHppa-5L0shNZ5G zu+-J8y6R^9lw|Hkl-u#k9;I+)RmEx%XAsVsa;%{!_qB;rT-DTE-q>71>urgssUqqr zrlMSryHoHt4NGbHxp8ntm@~Mfyonj5h_`QaE6TOF+k(Hs`da_X99oD*`x}AKHt+U} zP?YNep)(q*SQ1%yrYVmh^o2lZNn?3kQ*Cwgda za$=NS91VVP^g|3y`42*Gz#WrlSXkA#wi>Gq(lG>onzAcKQ9i@ndH9<%r)=u{X(P&x zDxN>GY(XxT?0iVQy7zeIqSMBEg** z$6p{3^}>c0KRD_t)0ENZet8{tR_H>~l|@*4ZGL0@ipFyK`d(2u8Qug%@v8oq;8R%N zz>LxnNmFh{FYjZxy9|HCsBukEbrU53zonvAByrDpAP%QdMCpsOrd*24{kZ!T{$|va zH?8y|W*oC{2?q{;_>#uzX6C^WXrMRN9$|W8c@sw%C^%H4Daw0x4uXOxOieAEWEM_Q zx}yBa9&vG1WA*a&j+hKOJ3~>n*<%*f*D=dHJk^x95x(0V4uzFso(6PND=QnTnwk(p zQ4p1+nW-or;?AE;62mmVDhv>j&c)?Zd!&Wys+%iT2BLuoXst!rny=bufn7;`+gQ6G zof-C6LM(w;TtFjXYHqN{64G6WB2nLH$A4E&8)!%|#{wip$rZpZ$K@;B`4j1nB!xn8 z70$L_3|5rC1dY6~`eYV1cp|y(Vdww`#5?c{<>{#TvyLg7)ikTFp{03#bsY){p39F_ zyvUz-@r&X@X=R>3^+i#bSzo`JB3naOpCdL|ClR||6m)-#3_RDAM~5rQOMw_xVfRO3 zJDoHNy`KPh8zM@8fOSkuGeg8tyX1(JOHET#wp61xVs&HNI-F6VcE=u(=B^7 zZG8ilZ$t=p3~S0Q3HMO#FOZ{hl; z!kX1`xibWF(va(G?R8Y&SR}|IPmRHx6 zp>hBzSwx|lDF!y1Cf7Xx|6&= z`T@v4Fe51W_SGb#fApxJh zpJPI&>@ivQ)*j84$f7AMQIOJ$N)h5ddA6cFg*%E&nTLy_aM08_fgpc@W_1al8&E4K zHTI7X*;2-8AZVaI1o^iSk<2HNpE-3-+1#dpqmnLSJTp&G_Bvw}!J)EBKKpi;&kuML z^VSADKXw~uEKrn>LE$|7Av91kb8ud9z}Y}>pkC$@5(Zs;Ebw-a%9e9>C*u7f5D$`< zW?R-8vMOcFzbIjk!b0V*nz?c`m$JE|Itb-#(ZZ?4CH7K@$^_Eek62{!9I<9KvC|1R zWkp%>(s@v591QaAW4Ra~_=S?C9G@$#UmT|>ue4=QTvbs8r?#lPxqPgk&1zM4yrO*4 zHm-D)1CiM^nOUkR|FR+%H;o)M(x0QO&C^a$lz-a8B_W&7&8jx;L`7Kx^Fc`xlq`6* zi0qc!UKa3O>=CD}w;VOj?_ZsyD1Q#d*&mP9=AIfw`3CV`#2;y{KLPCT-CV0E-`aw0 zI?EN>H7H66z-@oOq}uYS8Sz66u#t%JD(K8xJgblj{`|)3dbpNc@-q;iDetX8iL|1j zun`e^LF3x}TeP$0Sdj>BPSOtqWDavpwl7nB_ z%<`J$STDAc@F`q)PTh=wYDeTH<<-qI>Ko^jH#K85*~aqb>Uv}n4wlPfTQG^!@dEN= zdShdKV_|(|m59hHH2n;G?S+W12^$tQ zD^cYussgdNz}$WgyHNWrp5*<&2F)y-GaHRrXb28YM&$X5G7j`8CQOSk|D;&eb#rAh zh9C&*pQ1?33L24p!V;{GO=PWgEY7b9zObRnYMC;E-4`AR!TgpQ6e}F8wA#gr zGNnDqsWSk!EWd1wh{~2~+9l}7I8fBFWh3B(;uwrSO*#EiMM(|B4Y&}<{E8}36^htw zGq1S}jm==Oi>qp?&`Ju#&k)ofy&Mt=#24~ySNh-kwW6HZCX(NRu=roOigWZOP(?mT zch+(g+WE6@UactqMN~)hS@t@Eh5!0B?7O##*WQzR>sr>kHW8sJh2=HX%SsxnYiq0P zRtQO1Hs(5RK{($SF!EeTeWrMI!eZ6i;fIbNCzcg+?(PYAvoo>rt&h%$OhO>=caO?5>%8qFfB zI9F@$Xs3tP8^B*#y;ej`7sMOyRFpU;ahv9I0)O@!bRIh6u%M-r*yOiYoWPszLT6yR z7XlLTN9TV$gflLi zjJfwK$|PG{OI}2=O%sT3r%6MVsk{LDi>k6A2xqz`W-g;C~&JRL;T6s%lF&Z3#ZaU7I zvidQs*3&ks-+-~i9(tT}+Tu+xxhYWJXzM=Ys_>>E5Twh*N>j$o(_s7OIwM* zGmqmu^m|*J`P@Vf#9`-b@gKPL4dGba{LtAwz2qtGvqlZ5h)!yMI1@PP=|Fd&2oF>O z{qc&X{0k8tz@4AKqJ~N-LG~Z-+O3FQcz+C(0=ytQbt>RgK`R6S@*xoF_YPTPsn043 z)Ir3MZr{xEx=Ps{kb*ExdG+}~$M({SK;tSygsyvmyN%%4C=}YJBbn7A^F>8Lp%q=l zh{TSy^v7kNbC#g@0-^$zGpgl~vmSH2EA|FDy+KkEv-#{?Fsk<<4Nx-+AA0rC7ggox z>SXt4HHtfokBkU6vl*R#$Q7}PP7^|87iJRt9_YD@Np(kaz3}2hq;#A$WgjAuY$e~? zN~?!m#9_zv9O(59M;uhm72FXoqH#7I1qay1udud~%w2PNa|@$lebM0KZ*ve^xW2A} zOESlJxLpj;nZ-g)!<(AY@EWU305lRex4B$^;V3z;E6N`oY!)@t)R)_{Cj1RW`M?on z;mUe+zX#&6#Q%bLzjMT!)>2(lDe`8a)nUz@qts}&$RGZ6s8ia$+R^;TPn zS`jg9BBG^>XxVSK%^Z8Hf_c7+I6-+9!e`^!jU!(D&H*9@N;H>(xk^ zpCijg@lR9y9F3L${|+-t7FsWcn?-Y{jwmZ!S&mV(8tZkp#z9^VlCXXBb0h~v(Y*yYn(hnAil$m9W5jEt zIbxjnVKI*vKMFV`LHroQKN8JZBLPc@CyDMYKFQ|7`LnF&edykLo?;5W$_h#4UshOO zvv7K0S>e=qOpdJ5@%U4f{CFiC+MsA-V5!yr7~-P|Wr3=^jCQ@MDMo8dO|Flc1~?F( zE-w$z6c_f|c-gC(G2yyP)%SW62J70OyB~*^YSHI=HWK5ZOFZFvMCvMY_=2yz zx>@9#=rQQ|^<(w$;lJ~`B&bGRHCuhI6$03W048KjauAsCxFb0X*A$PYx&G}_!x+v# z0mtJqJ-I1!W_vXwBK}%p?Dm{&tTCH&C!&b}8SGC`!cp>JmvL54MatEG(CIHEjo*ah zG>q=%0#OJUj@1+&@?x)7O=b*xkQdqgWG*BOkhzesMNK{CY8pB%qE1%k*QJjn13P?&f5?+uv zOg*&`TB}EzYYM)jDpFM@OTJGM-z&jVtp;<1b)+Q|G$jT~yUnK#X1@26(ngx2NomI| zXXP|E=N@19cdtHa9&5}xJ;pr2mpo7KK8a+FJMF3n;@2U^RP42*Y1$_~)ntwzfFsJj zuEoDd%}P~SCQ~yp5Ms0AOpdr5v{G{_G)6!Pjv ze)8{wd`^Rnd{o*}A*>QIN4V3(+6^58A1IVpIcK{nE%sU4)r7%jWNym5i_O+C3ZVCU zq(snOC21cShu=6l5K0E@Ig0sjcBrb(Qn_sh(auiY==N+fk1N|#1|q6*iWEtFJbvB; zdmjSvL84aI?s(b{{FbLdT-S2^Rus^qnnsYPp!^&x$Wmxe5{o}jmGU1tm6NVVkoB&| zNeE5dg8=Qy1VpBEs<%-*yt*-_!vsGC7i1tz!J`0m6sLHb0HvC-qCOta^|2l{c$Ly23Y0f2X&qlK%_t;xN zMpd2xWl^oa4$9hObUA9~K*6FT9;-BEBm{EKgR0u6K-3UtJqR8i4VjR<;A<*-8@K+= z1*I&w(W{xwsqc7nQjBod+#}f}B0Gls$4n`>(c>x}KMfyvO_ogR9O^uNo8*)Dtu%7X{{CK#gapzpI7T8}2bf*BFFzA0n&xA(Oq@#m;TB<2W zppxAOVB=>B89q9Cz`5`tKOAF|8I|+#oKJ21 z-3vbOXy&YMb-h#!J09dGK8xgPf3pD~`S)+!Y9D8L9zG-rV^DMh#$y^w(zMH;xXnqo1be znijSX2(*Em9fSZLoEe?EaXkpAN~26#!2tYx3C1e~!c#RRUem(=2*S~vw6{dkG_y}` z3aQ_QqFX)M==rEi#(74550}p8)uciu5zh^8hAz%clLYxJ;TTi+7^KL$Y2&Lktk010ZSX8jseZ8J2@bMH1)ok)Vx^xtel z4(Kj(T-o{1gtf&JPxzGpDV!>RG&kfP=Rr+mss&ffgCj3XEZk10Wz+DuaF2d60x#9W zvK}|}klRx}{8P8* zBz?`ub)SetHtR~bi8~>CVTjbLO=y~Eq#1Pg2b>V0BYnFH$sM6-5#J)YW7&cHJ0%z8 z-&3$(*NshsK7~y(*e1aWZHT=ENgflSN9SY0y!7(*_$*|K+l(pLt~VKzOm}gl$7>Y# zpKh$r8&fvSJf`RxnPf8$wYzcDZ#*Kw=JMR*+#bDuA6?DKIs8v1={w3;WE-7DL>=3t1&9NNV0lDR7P zc*sVBT>S0xW8>DG0cohpnJ&x3QJop8e$NpVk@q{KKCZtgh5w+`yQ$JF*lr9%Ww_5{ z8Y_Tntyy2R&hNf#aB1Y2kprWKE&8?Fv-YGvY!NtKlQ<}ALd9{Eru5e|-=z<$YE+uQ zapA+E;ea7Tt-S8G%K@SIrBeljceP8itca z?~wYpN02%;_+LB%0mDpXl8Zj!VOf)Hz@ygO(!4tY#d%#qE4NsZWs~%>;o!U*O@|QD zg%*nex9p-v(T~lZ@%fJm&N;he9|39^-)?4+DOoJf2a6X%W`V9w{YJ0|XBO897W$y4 zq{338=xJ`xJx=W&0M{NLMesY!m<;x_|AdUO+H>zv#+Y9AiJMY)Fx{P!?h~UAfv);L z0lNPdbR(H=v!wg9q`UKoQ0c;H&|X1SyI30gD67%(+C(*bWA3pxf{v;@54xgiyrTd= zsrOY#L<V(EkKBiOl95p-~!l!ul@octss%%=_c4Z%wlR3N>jST0-;?T`#-M zFg$XxPm!<_meg%-_RXhIIN3&%xwdF+xxg6>4Hu5=J!6n*A)?C_4G!0-Pzg&2{}Dn+ z$xR73G8@blzBJCf2cj*dSUWycAyb29D-5Tl6xWIl1gR8ddzkK%lJ0^Dhd@_F9VF@A z&m9w%Qk3ms>++(cn>{fky09+5t33<4+L6M#J;jE8Gpd-4jP)H!Q<)SJO%x2!)E|S4 zEg3va#m-D-tScqf&n4Y2LZb_;uo$jApsS4$Sa%a$@_I8R)^8-uJ(CXstMOg{>)Qfr zKgL=i^UD=u>A~-gJOsMtR{^?z2}(Cs(!FoWA+jL3ytf?W< zWjzT01avJu_<-n=Y@r9of`+Q(Nt)%;LZX?CZzABzKmR*_S$pPpg!Ne^w~x8;(%IBr zoVy{6d+L@-;;RZnBF;T^o?CYLJG{2;BH|IEr*6HYr>;)YUQ-kjZ747lE#hyWZ7J{< zg0?KgMHeyVR!O&VdPsB`bL9I^`7yuyl*qgwy^H5b+N)=TM4K^tpG9Arh50G!YlC$c zy^D$g8257sa zyL48lbYXy^FL~Wh_k!1nZaT~2Bw0xCr6t$+(~k~`E((dMX))J>t~N;+psR^46_Olj zfc8n6>9a$k2^qlt#=d)sCiCshQ#6t^p}vy1Wil)LSkx;N* zN+lkHqn6i}8E(lV;bgCikwu+yN}aWcoat z=gz-(#6A6X4v5cKEvdOZOU*i8`c9F$XOKG4+;2Vx$=Q}{B}aW7`K*!6)X3OtAzGp) zO-a|Zq{orMBu?QDN?{I~K%76OC$-6|Tlu!xH$;hSCpEPAb8wPiHI`etl=}O zZ*fE3B6J2)M;mfR44`qn`8~FOhb>jKOUYls(Lp7_^|5jtdig9L;wtLpqdsM7AvP3U z#ElG-rUQVSR!NQ_jt=N@y{Vo8-$a`(((yg{JydVzr*34Lv6AMI#~lJq?NXvyC}>_t z{tnU1lQjEFntdpradeCmEoA-C7eI5Ipt*oTtM6>WMs?n3M-TP|Au<}Cmc z%Rshb(LT&~LPgQ1XwmFTyc(N(RPsa60WPXcwvNCyM3}Ckqs_Ro^JGVcx!gB+{H<=!syq+IG14*6sGFsjcP0w3u9juHJyqyg{a~X= zTMinrLKi4mqL67JYVeU_xH6NSpM}xlsBpT(uMvBheKvXnCRfck*mF{bSB#xEgNXNb2uZbEQa8K7IWUUrl>&O8n39W^D ztUenWLrlVVKY{ChKM^6%}3-cLDR(h`62se;|FkSr>g zoW61JfYpb|`M*0f=O0=T3mf!%Fm^NJ-wDS33bvttEh2UfNgFxQGIurIC1N5Vdpgu{ zUFRFJLV)-?v86Qsat+QnIPp7S3Mg*N6CRGS?MPM{na+ zl+2k@{mg1#u1hPLNy%&-qg4prcS+taG=cNm*>5*oJPOALM1Bje4~Q<3rJ$+?SZbQZT6J|oSHz(|tEXiO`@ z)P>}lZ@v0UqJP+TM1UF$*JhvYS-0?w8UMy8*WI47N#D9XC&p$k7b(4pMlx}ydC7d@ z=s=1nhZy8GcHN<>F`T?7@8IOoWCp`nn|*P`5tDAjIJaS*Tm-A#npO(e7Bbx_Ic0AW zj5^|ksW|9}Fy8?ugE_rHoXjZE6cvSl=m9fpBJ?TCp>KlKp#W0;M&->R*Hs7**t@E~>nbmX9d;rAMFo`LUB1zCU>e zmG+j@9kf=8s$2(t!sY4zGyMDx($Y>l6YS48D-Qm>rHjR_g)PHxT&J1Tb+Bnl!)0MElqzxa(m*DhL+Up z;Aa@MzCKNHXNJ4_zv77!uQe8+9B9W}JYl&fLf>Mh<$BE%E-jR8Q_KXiQDQQlbtU6w z|8qzroT<%;3p`8nk9T{P#AdT1&Ot*(2%khiM+XH7iijH2d=u(zjjz2b)H@+{)5Nf2 zN0B1d7tu-<5Ok}g9in70JQ$^EQMcTUI?Hk&VLY4f=Pct^<5 zBB2R1&)fq;+D91DUH5=GwH{p3(~m|^f{?}^&ku=a22Zqq{T9Ec|MD$__(-mQrfz+Q zTV+Ef-98tDN*BG3>eZ-QtQN$txo+VW#M0t?o_jY|(p`38NOaMF#fJgf`vJP|3c9<{ zJx>+pBU>cm5=r^$i$bEzlF)BKp|B8d71dNg5{$S((tYLPkmv$2`7s}Yt~Ge~C!z~i zVgN%v;f;knRB^GSoOo$SlrdBR-@({=yPxv4w=?D6The%JOIXpxoPj$f@g%J4 zaDw>~RM`^83qqA;7jMx;O!s+7xAF2rpd0qr0Nqao-9VSWDQw(ppesCq^M4J?MxeD2 zIXn&XRtTT!8qCie!P5h-p!u1G38!_8u`&A+Os3!D8)Etvd?}r(gy*Pj>Gt#|3x(jd zsjpz-*7&x;Ne2&(_6NTj>}@gg%M+#(`PYI)uo_loed=y>8)kZGku!Wo$pQlDY&P>V0rw?G3y5M88q3r#XW^WkBaeIz87x*$*)xL!w zgl)U+>QGe;Hc0t7EWM?|XIPGm=owm5oX>P!=!X?_@4Ds?=&IWTbRQ6OWzi_kXZs#4 z>E3y5NOXBPQ+p0{t>Mh4i7wf9|FCv{N%QXOLZXRcj3E^L!vNMl39RUDB6C?>yNYFy zC+R+WeW-LHTi5U4!dS9>RJe1oOt((TcD$tf+zp37*B}Q@njJwmj_KA)x-%r*SGI;q z7jiH^3();Y&@EuPN7t_6JX?`<`inz;OJPO$oS|lh~`9r^D{|vQ0m4v zK|oa=0!>jHO#cmxK3Ob{Oo2u=QKQ13Q3=*UEN;I*Z7>+4!ynNcS^l#2eKAK?H+9sN zTZWI39Xl!L%i`YG=$FjFMKjH^+=^k5@YdIu4Y?J=%Vb|@(sO#)fF!SB#oZ`J6q7Nc z$X!HBC;nL}xXZj~OK#=dOWmHbzI}fwlIQ7THEovOg;YFp4^FS&i_?GZLokjG zB#2q=a1Udjz|0`4mHC*MaWqhL8YNlXpw(s=x)gOIiQD}~b!L&*C4b>F1Y?C+n0n1W zz)n@N0Z7QZ^=`l*EoM|?(={>@hlFn{XJq+XNrC`4|3{x;%!x5tNhXpiBcVSng0H|8E^PR@-1 zfg||SAun3K@!wHp?hP{<`3@A3V9ZO_pHPyIy;3B+83`8-n8*Y&U0V7Blm#7T!il1* zB5^k+)AeT$;}0}l4QVtejRU8O)X~R|!Xs)7$A^ynQU>k7M~?kcFySs5V6A34<`o+o z%_g6!8-pI}mx3=al6>gqN4{JIc%rvWs7HuakUJrgFk4jB=W+oP6Y0j1dicAdn85>* z0jZuAqDce;%zI7#SAfAcK^TxOtIE@0AX@PxR*g)VMs`9A(Ev4QN~WguIUSR=avMcj z{>PGXIHVkL#AbXWSrb=c>+*oajg3A{*Vk{s)J3SvQ@W7@sq1}HQ662nG2)SG?o(1v zqG36qBd+Bqqo;#zx#F3KK_1~OVr&!O}~WfI=UvKilc_#N4Hy!7V)K#Mjun) zlcc+-<7Z~sPFg2RRjvVJVT`8y7K%bSppnQlN}oCi`lLpX)`ke{2^gb^_#Whew^j8* zm0L>pyiLGNGrVXGKI^y&9cNo&?m+j#nuK-n1LD^AX-ZfZx87{@4fSg2gFVTl7uYw) zFb5ResE6JAb2&hU4$oFOzeEhBRr-dSNkt32hT+Pb==PZOBGSDDBTtibZQ93PlPiq) zJ)SW1uTRR{Zf+``;nFc>%jd-&1=O|g($N6X;y1*<;PxDcF_|^KWXpk(RSHqKj|w@g-l} zSmD|R7J9s3aX+!h`Gc)q!HgzSDk+~kFs+4-4k+`o2gYuq%u4kKq6`BX{{lwcK`|e5 z%0(_NenAlIh$5zwlg>Qplbw{m#WWUtYrAPyVb)_4=TDiFcRx*P+nBmziJ(7E(*Gtj z`dMO03iTx{)WAmN1<*%+hKv5LnKvRs^Zut;kUmM0zW&9Kpkr(T3aGvBlYMFL5_A`r z+l>X^{7ab0m7p36dfL3bI4yV?r%U(a)Mp<~x4e$iS#RL<#cMd#you9Tx;yn%oOZo} zlZQ^9yoJ+EZ{swC?oNCMr@rsv^af6JbdYafLBuuCy03id2F|y?&}< zAP;Xb*ZFeYo_n|GTE=nZ$Q4zY5@~scl-+6ttZE3kg)#v*#q~{;EE8YTq$Q1KUP*2n zz${~}U~;r%@-Z<9ajprzTZ%)6?K#nEY@%=j&WfgjY#OcwRp4b5oN2DjtsJn*uNE8h z^@)$`<}A!4Sv%rhuIw7XS(NrqU!rt%sE4TRP-M*A(P|&de1Itp7{F#@b)$_1-!a`* zNtcRBXmrt|682fNoFV%W(ZzQ;6K+m>66Unv8*+}YYy;?uc^RS{5@>Zj@Fhc&`vU`baapmEH;JdC6QOg$|eB<}fU8b4(G<^(pv< zb#=7lLMA)}E+_+7+RM8mR`v>P2N%-SBag{_MCdB|QGk91=!zy8RT4r?Ma2>7hv=nZ zT-WzvtU8wSUyzxtMHf+jB>K}NLaM*mJd35+uhtDNvu zI6KZd!r3HnJ_DShc`oW#GLm$3pbWgGRP+t;Y80cpCZ4h>HwA-biM$Gf;ia$1X?YZU zRac&ReSR3}I7-nvkXMz@C0nYqg?K_>%k$4--bqw5ne7{i!n$xJU6Svn6_}8Le*0mr zPrXhSucm@;t`n@|F>h7q4ml2N;vR%`6ABap2y~j@qv6=IljQ1iXC@(M+~#DVJAKXd zJlzaNZRH7QIg#lyn=k-xP1L4l;znOCTJd2c!iBPlbz+S5C9&`v3cjHXz`QeH6tq@vpGE`ddL)wx$ z^JHJTIVjik8slO(oixor2Ctx04sv7Wp}Dc>qAem-_aIfGr;2Q1d%91_i{@4J(FJ>{5^=>Kn#;PO$L8v=nDRw}pYHZG{Cpeu?eHpgwtHeHrT}B_t=qlP3 z^|f6`x}nQRH?(vi=`skV%b+jE+PGbXeK~C+*j2<=VuQG*t|DGjRoPXfX@jY*qFq0yM%o*xt3=X7`)al{l-bva?jpNuv1n~ATUlPyb?K=cHF9}AGl6AjY_4iO zJiIDv%MTBuE;SpDOezzs$_|$VS2R@DA081_kE}Rsj1HUl8rF50OXJiEFgk3BYOFX+ zIR!?CEm6(YT~=8*a|(YA`&VfwHxaN(9!*Ok_zalZ_^d01BFh!J_< z3y9d>y=&U)?HLlQVZ*S;4)zl6e4f>nRi$}(a>o>Sk?d?$S1bq9rmFvK?`**1D$aX< z`~@a_#25%BxUf(c47NUYC4}r4g0zw>#gZ+wvJH83IjnY%t;PGr?n;(uZf?RuX=o@V zH)%@)wC1^x(q14Wg+LmTDyabzT*8MT(2|4_LP=vx!nJM&dlz+D;dk!i-EXU?9JN(^Q41-$VN>83J#(Woyh3`V2=w^(u*?@h+Q!1jhD^06T=K8#bz zac^+gZ-?DML& zI4=f#RZaQm#jmCcgTYjKDHR#3Tc7hV#ZNoq`ml{ZI~;SH@0k<>kmD!MF+iqa^=3Xwq9l9({j#!8J}XltoeZ*vF7JJY)o16b8xrf zgg*Cb1*$nDa~`qR3tRJZz#F-`e&1j7qqbhFYkF3!sNX-+!#r8DW6jQcyB|Uflhqy# zt=D6{o`Z7}k8ZSwir1s=%Bix|X$|g|)nS&b(XmFy8lA~+GZbdkH+y!et%_^5m4=|2 zGnvY3&D5o~SO!~&)ipXT9WDE5bh6gyaHGa9u-OGRy|yIpZMR0JxUpmx*nT4y*s!@= zZKKoLxMIJIPKAAE4z1&3ZIE?*tm9KVU^jWpZ|r8yJq8%z^-sR4>;1I0Hywx};x8JD zS+y3)S|n?ctVOaGsq{PWnPZXs9|>328im{UZv#l>$(kK&cC6X4X2+VH8EJO>=SNi6 z?zA;_9Eca>|9;BaA!~=M9kO=F+M$_fhxDU{s%wYZgW;*!q5Xd1n4f)XqO6IsCd!&9 zYocbNiBb=&tEz!oQQuZA1I5f+^JLAFHBZ(&S@Sd#&6EGo)9Tu%VB-{T=H71yO6A@f zC~KgsfwBh58mO6QpwyGIt81ScTBqng>BluOOV;REqhpPZH9FSl%t)idcPdoZ=$sSW zzvswR{Md+ZeXusj+8}F#tPQd@XeQbq{qmhETcOYaSs_1<)(%-aWbKf(L)H$>L_0L; zd)kau!s{|qgUN&PX3ys4;1qxLy5HMGlNBM4$HP|RLF9p&{IWnz&#LnSHCyo|=f4*r zAl{3>mm&oCQiN(f3cc)2Ox5;dn?h53DD8gN+FpM_AIZhUds6sHKRW}lGY~riu`>`m z1DTmKkjdVxYNjA-BY5LaU3l3t*w|DSFB8fIHZ<2Z*4GAWL%~qp#)eQ}QzjR{`l&PZ zcTBA~H+*iDZu+0PSu-z@wbspAH*4Ljb+guO=36)QGTZ8!w&tcOuK8BcV^c5fwRX+g zHEY+bU9)y==G!&@X&hC)r=}&;I{i+YeeQ^T*>G!j|3H7#+BR$3tZh3)Y@6$iR(q?h zwZ2*#r2DZZsmvP-YrQw?y;%!qEu6J*GvC5(&L%R|wr*`Jny24+Qw6n_&002V*{o%= zmTl%+wnQjaZNt_Poc=o`U6#|@HEY+bU9)!0+On%F_arZw=oAuhP*Jiyo>$Szbfm&yc6ZG$s9lG&>yUOG(yl|=b;udN4mn&%B=c3bY%4mZ-?FKKTFYiFo3(7# zvRTVEBQ4ulzTlt7m*Gx2C_{El2 z?MEE9o;%goWk)i@xtKRlvAXN$(b^$vhpZj4cF5YHnP`VbW7%r22R1i1PR(!9R)|@$ zM#mZ*Yjmv9u|{W_jZQ3Iz|9cDS+}P)vou#|>TwIn+UQv;9jB|MFVK?Dd#S;smkVrY zu5GNZ4c3N&p}LI?p}?k0E&zAJsi}!&hXdhEuHcQ<^wbAx+T6&+k^c4`w{?A2cN^JV zyUy)e+kR0?xZibEz`EXkx2L_WYkiLn=+t#q+`k9xEH921ZuYC0}~?@hK5svb)rD|Kuso~%Ot}yC|pCREiuxQiFZWvxE16# zyyR=!>Qv!_P*S0;yliDkC>KEw>zf)QL-12)lmc|2%1Uku>NqW}T`4aW%Z|;UQs)ct zSY4@LWhE~KqrPLQXd?X^UvS;iRawf)s*8vIoi3n%f09cuGp1?#I|y~9qLmfB6pU(4 zX12OXZ^TRDkrfG!Z}FrW+0$ZZUmL-5GwQ<2mSOZxWfS`~$k)U%BD=9ndQ)QadFf0p z73B@YIq&k}M9y=wxlAEb7|VLdU`;NQP2eMs3#1GDQphD@1vi?`Gk9cE77wJ2Ap_Au z0)_@bcz#DZk=~ql@f;7=%jGgTBvWZs)(uT!0CK}=E@{j;(Tb*ITE`i zo>?z=695LFuF?xj6=;5|(PBT}r z+9Bv-QvK->B)2u2C?6^IqSz@7AQKf@_b$rgC|W19qk4{+S&DF4*i3fJ>Tr_LS?N${ zr%Z<;96HP;J*7f7kJg&>Y-6l&gwPl(RaBdhN zHqVL8v#7B0rdbMx0^`v_R5eShz=;YhDW|Lsc|#=XJe&2DsXFz1aF zDHly|_VNZd<)SIiKq9>GQ@L(DV6q8e{3Qlbzn$s8elfeQ) z3d;+=AXi9b;$G6J#rkw@w1D-7!QlduaGWJ6XGz>yQo!HZh7kWY^G~qJ+1CR^_10w+ z>*4t6AaaZ4?n3iaPaDMaA)d+LRp5^K+CEzFumqAx_hZGP7|O?%mVuJ0iv@%JMcpR- zxk7)UI#mR>7$X>(a>g>5Vrkrlsh$OGqa;{0>W}8PtXzrx+;Ab&=Uv{5VtNI5K&h5k zAu-}%Ny^J@ipEgSRF}!{IXb`R>dz^w5l#ZHyN_qRPJXWwb}4XfcemTp+ZuFN_w|O{ z_H-00PT^!GwuJ(0TZB7SyAiL@=cS_A9xs(azw%Yv_#Ur{J(K}lS-GuK&-x~;l}$Z% z#Z6tClF|GS&c;ZQA8Lum`!lVogo@j9(YzP&Vg)R!`7u^|1)nRh6%lcEt|B;+xWe;; zy5JIvlp|Xch1ie?*qBQcJf8=dfiCv_L9{m&rbuPAJ35vbM$csnaf1!!OQZQ>S_?X< zj$_(Qu-Sx|mK8ExA!IsBD5T?rOv<5s*JT^3zT#dvw=I$1`|sn2GMO!Tzj>|h?ZR$X zzAK#_F7zhSXifWUI{SUOq!$+#>+|wnVcl@SzaU$($^)(}0=;-EM#?RIhsF8p(oT0- zSQ_eAQQAj1kRpmA)rCi*$)5bdFNRvak721kQBWPT)9;u;>bk6FwiG25UDovFNlwwd zJXqPw%_*S?SLx_(iFCT?58Y7=&9O1&$q$1nMOa@r%vdnL;p7&7uwhgNcShRv^(Kb2 zj%8szWO!G;&x^*@b$D_w67ko>+A>rP2P6}nGQaFHq#^-i6PoJHdHGlrtNA7-gQ1Pd z!pq9w&nMJysPkdEj_HCS(*;AO3x-S=44E$2V7g#~>4Gq{e#dPvU9iD)?go=`gGsr; zq}+g%a~aNlVBe-Vlan!b64Ish!}%6 zyL}g}ZD-v~BI>_LNcy~(2P4`B6*QOP_hWjMPbCU|a38O%BesqeJVyrj=6IrgewR3- zUFqIjW;2>l{@s!q?e@}}3q$W3CBpj()bvGN&*WR>($s9D^Kr9XkEvU_Fyh5@{hLV* zrZTGW1a*@M>K0?HLD0n44Kb+Op|J$U5EwgP%mA!_N;jm_GfmsHY}2q!yEe_*v})6+ zO`A4N+O%lXpiO&bbEbuB(D`fB-K0_XlE!^c+4kQ|BnAf}{XGq#4*Yn^?QH3G+j3}7 zxq(P7Hcfz@$M01V(o^mFehNWxkLujhcO3ZQhy@0#f(S$>e|)J zWIPp}W;Lnl67t|1CDl)(DYrA4+=O=@#C0&V*UmlDFkB#~b}*mc_w2fwT2pyeuddPg z>wytev(SBx)78wD{~XI{%|arCcZ^SW4*Z&#&Tf_6O0RgDb1?mCP*0%K^CZ}W>C}gL zL-4d_0{3xDbF)AWrngy`x1&s3Jrti~Kb<+yBQ@sBB`>fegCDagx0mzcQh1-2^ssDE zlo&s_r30S0TkoFB=;eXUE@qS>6cKS#s8JJS8Qqp3pBJDf~b1Vyr*7oSdz`9lfH zq#f1Cd_wrIllp`RS8j>&0w?;m+A*(mWxIln#+#-xd{3BxzRTLu7KUG2$YqqON>WT! z!cp9?(w|GDQrPGh=L!!>$H$sVnYY{->EcXr(geEUhF3(V1C7GW_h4L#QGW4DJy?p$3koB zDMSqn!M$6bO=hAdZ;`QdY)DIm05^eRpGFlq?-vy(U47B7@ z&5iY{b_NDnM*~|E=>ZI51NgDR0Di2XzUy022P$txJ+RdL`}VMC!Y}VFDRCR%fKKi` z6_B@k46xt$8@g%=zyE4dsfhdMV%WmO-kuw2_3P){_f|-ithlA@Kyqhp12Xrb9gMX6 zsqK4I7h2)Odyx(#S7iwvP}YjO{Rcx?#l(;$zg74{cYetd?C%aIJ%nPx5cb-|E;SIV ztN9_do1ng_4Jbd*UvMae7RMMBw86_IHjR~swPmn7t)!e1VbhnRoY@oO>S#DStS*I5 zHS(D_*zTqbyN6-i2#QToj7RLNnQX+%jU=!a%7wVHB^(j5KCSlZN>RGGIqApV7)=x~ z^X$Vmr`wG^hP&(J~N}a%k|7nWjlAd-bz?Il2Vz&r>`u0@lV2+ z3aubyFPeZvX$uz;N>EDa#J-qOf%&f0pm1$Z7uK)Raqd=NJ6UT=Z7Y*Ia-PS}iZLD` z$V$Z)GwfC$m!%nhQfa@DcICAh#WbDk(>Zln_02bH>g)O}1~<=-fb^82@yXT5;;N*{ zdS^6;-;rSkSu6}IP$jEYU9l04Cg8g2HVikJ%;%iQ2J9B;lADb<70Up3>WW)*?Hul5 z>{JYXiXs4e)xNvYQUT>E2I{?mxYO&U-wtvjIR{H?I{(~ zllSw)V&Z$7U((W~l;!4c2y=ywXd*d`X#`_x$D}jdy#`f$c~LXN3C^>Po)n>{I~zB) zt#-TmE;RaL5))R68OR?Vc7@lN)#6rcHmf4?i?2__Q9E~dt{8r@SlatnPGKqc3e~CF zohgZQ-o<8FUX?*dL=#aHYUMyF!Ne0}Fm*5?ZZ86Z<)PXY;i+PG(5Q-f!%aFH+N7FV z(JI<-(}}MF4QiBgj0o-B?9!k~s)@0R?GLvlyNo)aRW4an9Zi>1i=U3{dJWgMK zSn2_*IJkg6hKg3?`r*bqR{2IL@?NPI`=!ouLktV;N>vWrX0?;5<73}8+!v9TYrm+! ztKJP(28G;)%AiK9J;<>BNLjwydRl^Rcqob)ezGh%DX2(RiW=Rr)Zv9Axph6gWtZ&g z3A(L)Yuxp{Zhzlu$|s0XM4`6+uAWc@mlX{1CbzAn@*FG%lqXVAbmXI{GRC2C?I(XHKpY0r}+hmjeH`Hd}?Nx`@G+|iNl#Og@j=IM{ieSon=atL*1yepMnCE{+Fy*@rD?k5v z!IZxtnCHJGnDWmZUVi>I!ITfpFPD!Bru+uMO#fEFls|q%`T5TZro8b(F!lwU8H z>2DKEdEm(M^XmmuzTlX0`SF4&?-k7S`vp_}ieSoL6HNK&g7WmQ7fkt4$Cb-h38s9} z@#XS*!IWPhnAdL;O!@c;<>&7btgio&a`^(ml)rRhx%@4`lrQ*bxx7;_<+lr70DeF) z<>P`W-yxXtoq{RfC7AMO1ylZlV9H+-O!;oXl)omJ^0x$2zDF?Sb5Aanm-6|7DPJI% z^5X?lzF08j0l}0n6-@bZ!IU=&ro34&ZqFyjY)t8_l&4+-Y=l7bokQ-Yb^Re~wMRxr=MK``UrE|~G}7R>99 zBTM+eahSvNw+rU^JBoa`b26jpW3Kc1J8SUW^v5~QJg3hH@k#kr_}o6v2{4^m82!JD z&u7526Xd_d=eUsH5AN3Ojp>bpFA?nzd2#-?;K#wTe?14jL&#qQ-!1qTU~`!KoAH3x zI|&(kO^gqxF{Aom{I%dqk>3jt#{6#vQ(ufW3;MePUzY3fo9TTPe7+dZ#}V&R!Ph`O zDEJHDQNb+lt%6xzX)jpbT|&NV*1xgGCcVog@a z%tQT)@oyP;7Z{gS?Sc6l*Yi2%ZydZ`%_Um)gttbaKlWc@D@a@PM+ z!L0w~g3m|(%t3wr3HV=*b><(1K$iDLa0X1fLcSM#G1!bBkAeS4$X@}E3HhwU9OtV- z&hh8Zg#2X49|oK2)q%eWHscZX{}kBhKMeV+m~Wc=d=mWkU=u$HzE|*7;3owCDYy>l zovq9BH{j#M^&SMDCiq$Kuf+NP4xT6EhrM95D8|0m>wI(^pnJ&@zWVSTgxeNQv{ z2ixD{g2xf>$AZ}&b_-^EcvCRj!(3bsA2{YYY!3?svpoa^vpv)bW_!3uFvo+mV2%f) zf;k>sCz#{G4T3oy+$EUf!To|c9y}zNN&469PoENU_NUJXW`DX$F#FTz1hYR~EBG4d zW2yFESpF}9&B6M-*=MDXIjCXk%lIpd&-w7#+Fp{sg7|&Ho^d|&9l>`&{@+61-vIxI z_UC#2cfg;}^Lg?^WbMz89|La?{0!LmJCy$z{B!Jh{Iqu{H-&kMc|{A0m?0)9d8pM%Z8_QUqkFY2G;5Asm#Uu^$! zeT(h?OG2*fiD0(>n*_6cne`^t|KcOf)&2447Vt08zWxBgoUeQx{J-G;)obSX_J&wb zV*mcM@DJI)?-I=X-Y=N;My@~6-fS0g+LIlEX-{?vragIF@OLZnALc|zAJpf=;2&ZA zauLE>@5{^WWq$FFOJoa5E?f;nEnMi#G6`+tLA>iZ_azpBvJ zr;m1=9@wjoqFmJ18hmck@u?4v_uaytvHsU?EifgyyCcW`M1CiV*QoF1nc7|@DBvP3ceh?M9XKxk^5tCy=JTx zJI8_-YhDJf0khhf9@d7P^+LW8yh1SR->m<#{<$8s9C8HX@aN;rf;m6x7d(zwS;6c- zUlPprv|aEH#D7fi~56osk{WgLB3+bEq>%ev5{5beyg0BRx7UypR&lB>m zgO3Fpf9*l=sUrSAgEtEK8{j_{=N}En^A^Epf$s#H_Qm=(>-na>=R)r5#INrKf?40E z2p&hoTEVREm4aE{9fDck8w9hyqC|0G!X zPlA>IBv|=Rf|dUySou$a&qw=MC0LDrf>%S{Cb$=D4)&j?z~{jqGwthTunWEbk=Q?e z4UT|K|5$h;+P`47N3;LM_Q?5A2ju=WeE+{s@HhmQ2xfcvbHQvMa{r9&W3d?D***e- zS^rA}(_SqVO#8ZAa1HWr4wj$i&lTer^?Q`yyDQ=^!bD{pSzsD-oWt0+i~AoeKmA#= zpF!q)&g|Ea+27=T4g1^eV!wv{?GC~0Z+8o3f4fI8^>@Eu_O}NFbG#iF%<*=+VCs8^ zVCs9P;H8|H>4W;(1b$rjpPY~F7XA|J|3hLv%kgKS;Blk{AEMYks1LbcOno#9IrXth zF!gbPVCthyF!j+XnEL1yd__fh{u2D?(ItQUTi|Psa^`m<9k%~Rz)ypD8u=gb$z8~gnxcs=~V0UdwtNsjY1u(AIqf=>Xi((xN?-@G&UEs^XtPrO6J@6RV*vBWpEnt)0 zPr;ARbpq56*B^cX-Ufe(=X1TE{<7JxXM1P;uNCXD=w-aFdzECX*lLN><^8N+2AAtHc*H`-ig4Oz;VA`*{1=D`*5={H`ieTEW-GXVqmzTW zKF$6t>+c<~IoSV?hT|dcS2%%=h(0Li`R0BOp1-(4enth;ewh7b##i%K?SHdAmRH1Q z`kmUIF@Dn|^7DoNe$^!MRw2i|3&q3azgx&To~;%6`N1UdFB0)j6dTSayVH(o zVGEoW_4({ScY@9SJj;i%zIZUb$>QHC(*Jcu{M8(o^uhD5t>7P3@R@wDnTTJgV5}vf zpZf=0C#==*Q0@0vcuYS5e;dsC??UAN=io=dam{al>#(24{YlE-0b`7qf0^cmr#Q|p zz`dH!0DlboaUsq1;1n3sdUbv`__NqgV+NRBKlmE(Co~U%p8}t*IS>A&i2u9bw*_Af zo`>~;8+7~|z&C@JYW^!Q_E3uDyC3{tV3Xgcz_-93zeC6W8F&o-Fg{fNeu*zwBUbx8 z%OHsx6azE|*R;BN~)8~mW)Rp5URyaD_)nD&I%y9E3;nAJ`m0iOi> z&GDUlCHS|&=K5a%FVpt@bjWW8*MMn%82>i#$H7LwcY>o}bQ>kV7aRj~+R6A2gU7(j zHUA8Jo8UPCtbc<|eiwpY1snY>1|JD~Zt`~~_&BhM-vB-ne3au~Zxy&p#P0-O2sZh< z2pj<;y2J8a23`+lH)nqH;0)N5@6+I0bbQJ`5B@uG{-1&$0h{)DEBFWCR>x28Yv5yH z?@a&r4mb!l<$DOc4s7)MG&l-2<^5N10{pDwr?&_EYdyX*|3{vN`oemAt(Knvz8Gw- ze-`*g@O4_g3j77EpL2e~^Si)5#QxI)Enf>>kNu_*&7TB63cf(|5cn@Je;?I60uExn zZSs2+cm>$#;|6fMo{v+1U#Z~x!2hY`%+JH%uVOvXw9n_k-vpcV{~i1^*tF-jz^{W% zdzgian}_+lx&DdZ=fGF%{GI`J;r|MAH0ck3&jhd4@?r2Wc&X-V z!8e034OH#t7Vy1blb`#*kAT~>{0VTEwrAAGPrz$5v;6-C?g5+j@N2LOZq(-=@!O8` zMX*W#6!3+ZzxQeRS>Och!z#@y!MB0yHLn3b4L1270Gs>27U25X3cea_>^0>#R`A!s zr)hh}^89TDkArK3{88}71U~`(IC!qk-;3Zd*wpvGfY<2w)X$sX9&!F2@J1m&8V&nm zu+h));3Sys`&gWRI{1Hz`1RmF)Xe<1f$7ij`i$QP{+fvIf&WJEDEMB%p9kM3_%FcU z6nq!>TY?`3e_Qa2;J*|6Hu$@O7yb_J4-gy#KPb2j{IKAD@FRlb;70|Ig8xDAHQ*lz z{xbLp!T%Thl;8)zPYd1&{-NOK!Osca4gM#=d%!;ue9RfR|3Gj6{Lg|Lz~g9=s2+kexo~!sU=Th)C_^XU?Ec}(t;1~3M0=Eqd{k9(?eeSF#N}%#*qj7@9Hn(QBHeg;z2(DHSifIr#Vc#(-1&K zuq@-KhebG%Yz`CeOaz#CJ9IqU2UR>MT)02ud@mL3pZw|)W&Q2~4%3JYY z#(O@5{?EyXI4Hjm|7E<+F4)N$5lPE0sfhOy4C9F}OpJF~MZ7&5W;vt3oEVRGRbIEy zJ=@vI$&olH|1AE?co&S#cK-Sp5lPFhuZXw%_h&oO=inJkXPf@ShdR3d&ur%xvH>BK z@$S^0DiZ!Qe`U6F3za1f#``w@%ltk6tJ%)AXUY&?{!m4{A+&o`N!h`(p2B~$sjLy) Mgm_C0=ugJ`|KC(PB>(^b literal 305428 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 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/bin/openblt_stm32f051.srec b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/bin/openblt_stm32f051.srec index 285d4c72..607b068a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/bin/openblt_stm32f051.srec +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/bin/openblt_stm32f051.srec @@ -1,485 +1,481 @@ S01900006F70656E626C745F73746D3332663035312E7372656303 -S31508000000C8040020C91D000847090008670A000837 +S31508000000E00900207D1D00082B090008530A000896 S3150800001000000000000000000000000000000000D2 -S31508000020000000000000000000000000E70A0008C9 -S315080000300000000000000000BF0F0008650A000865 -S31508000040EF1500088B1A0008971D0008A31D000865 -S31508000050FD1D0008FF1D0008011E0008031E0008FC -S31508000060051E0008071E0008091E00080B1E0008CA -S315080000700D1E00080F1E0008111E0008131E00089A -S31508000080151E0008171E000800000000191E0008AB -S315080000901B1E00081D1E00081F1E0008211E000842 -S315080000A0231E0008251E0008271E0008291E000812 -S315080000B02B1E0008000000002D1E00080020C0436B -S315080000C08F4908600020C0438E490860704770B5A4 -S315080000D004000D0016008C4800688C490968401811 -S315080000E0401E001B691E884201D2002021E0200024 -S315080000F000F0DBF9FF2805D06019401E00F0D5F99D -S31508000100FF2801D1002014E0600A802189004843B5 -S315080001107F490968884206D12B00320021007948B8 -S3150800012000F0F8F805E02B0032002100744800F0D2 -S31508000130F1F870BD70B504000E0073480068734985 -S3150800014009684018401E001B711E884201D2002013 -S3150800015015E0200000F0A9F90500A019401E00F0DE -S31508000160A4F9EDB2FF2D02D0C0B2FF2801D10020BC -S3150800017005E00100C9B22800C0B200F043F970BD1D -S3150800018080B5002000905F4800680021C943884276 -S3150800019001D101202FE000985A494968401800907B -S315080001A00098584989684018009000985549C968C8 -S315080001B04018009000985349096940180090009823 -S315080001C0504949694018009000984E498969401875 -S315080001D0009000984B49C969401800900098C1439F -S315080001E000910098401C00906A460421484800681F -S315080001F0C030FFF76CFF02BD00B50020444909680E -S315080002000968401842490968091D096840184049A3 -S3150800021009680831096840183D4909680C310968B8 -S3150800022040183B4909681031096840183849096877 -S3150800023014310968401836490968183109684018A0 -S3150800024033490968C03109684018002801D10120DE -S3150800025000E0002000BD80B52A4800680021C94397 -S31508000260884206D0274800F09CF8002801D10020D3 -S315080002700DE0234800680021C943884206D020487B -S3150800028000F08FF8002801D1002000E0012002BD0F -S315080002901F480068704780B5CA05D20D002A01D0EC -S315080002A000200BE002688A4201D1012006E00160C5 -S315080002B080229200001D00F0A4F9012002BD38B585 -S315080002C005000C000F48854208D10D4D2100280075 -S315080002D0FFF7E1FF002810D100200FE00C48006866 -S315080002E0844203D1074D0A480468EFE7280000F066 -S315080002F058F80028EAD1002000E0280032BD0000A6 -S31508000300C8040020CC0600206C1B0008701B0008DF -S31508000310DC1A0008F4B582B004000D001F00680A54 -S31508000320802189004843009020680021C9438842FB -S3150800033007D100992000FFF7AEFF002801D1002061 -S315080003402EE020680099884208D000992000FFF71F -S31508000350B6FF0400002C01D1002021E02068281AED -S315080003602018061D029D00F061F9201D301A802113 -S31508000370890088420CD30098802189004118200002 -S31508000380FFF79DFF0400002C01D1002008E0261D80 -S3150800039028783070761C6D1C7F1E002FE3D1012053 -S315080003A0FEBDF8B507000125386800F07EF8C0B232 -S315080003B0FF2801D1002024E000F083F9002400E0A2 -S315080003C0641C802C19D238680421614340180090B7 -S315080003D0042060433818466800F028F932000023E4 -S315080003E00099022000F026F9002801D0002504E033 -S315080003F000980068B042E3D0002500F071F92800A3 -S31508000400C0B2F2BDF0B585B00E00012400210091FE -S3150800041031000200C9B2D2B2914200D200240100D2 -S31508000420364A127AC9B2914205D35249097832003E -S31508000430D2B2914200D20024E4B2012C31D1C0B22A -S3150800044000F05EF805003000C0B200F059F8070069 -S315080004503000C0B200F071F83818401E401B401C2E -S31508000460860A0020019002950120039000F029F9E0 -S31508000470002505E002988021C900401802906D1CED -S315080004802800310080B289B2884208D200F0CEF83E -S31508000490694601A800F094F90028EBD0002400F082 -S315080004A01FF92000C0B205B0F0BD38B5040000251C -S315080004B000E06D1CEDB20D2D1DD200F0B7F80F4807 -S315080004C0EDB20C21694340588442F2D30B48EDB291 -S315080004D00C21694340580949EDB20C226A43891830 -S315080004E0496840188442E4D20448EDB20C214D43D1 -S315080004F04019007A00E0FF2032BD0000DC1A00082F -S3150800050038B50400002500E06D1CEDB20D2D11D2A2 -S3150800051000F08CF81848EDB20C2169434018007AAF -S315080005202100C9B28842EFD11348EDB20C214D43E0 -S31508000530405901E00020C04332BD38B5040000250B -S3150800054000E06D1CEDB20D2D12D200F06FF80A48CE -S31508000550EDB20C2169434018007A2100C9B28842DD -S31508000560EFD10548EDB20C214D434019406800E033 -S31508000570002032BD741B0008DC1A000881B00A4945 -S3150800058009680143084A116007490968084000904C -S31508000590009801B07047054909680322914308434A -S315080005A00249086070470000181002400000014028 -S315080005B080B500F085F901BD10B500F091F9002865 -S315080005C01ED000F0A9F900281AD000F0D6F900F0DC -S315080005D025FA00F057FA0120FFF7D0FF00F084F95A -S315080005E0C02201008020800500F00BF80320FFF7E9 -S315080005F0D2FF00F079F9001D046800F063F9A047FE -S3150800060010BD70B514000D00060005E0287830709E -S315080006106D1C761C00F00AF82000441E80B20028E3 -S31508000620F4D170BD80B500F085F901BD80B500F044 -S3150800063086F901BDF8B50CB406000F0001200024A8 -S3150800064000253248007E012801D1022038E0012029 -S315080006502E490876264800F05BF8C0B200282BD150 -S31508000660012E01D1012504E0022E01D1022500E068 -S315080006700425002400E0641C21002A00C9B2D2B275 -S31508000680914219D2684603C81022624300F01CFA48 -S31508000690010089B2E4B202206043381800F02AF853 -S315080006A0134800F035F830490968012291432E4A6B -S315080006B01160C0B20028DED00021144A1176C0B2FB -S315080006C0FEBD00B528480068000607D539483A49EE -S315080006D008603A4838490860002000E0012000BD5B -S315080006E021480068802101431F48016000207047A7 -S315080006F050C300000022054BDA611B4A1268012329 -S315080007001343194A1360018070470000A0090020AE -S3150800071038B5040000F0A2F9050024480068C007AF -S315080007200CD50020C0438442F7D0002C04D000F03A -S3150800073095F9401B8442F0D2032013E01B48006859 -S31508000740800602D520201949086018480068C006A6 -S3150800075003D416480068400703D500F007F80120BF -S3150800076000E0002032BD00001020024000B5002045 -S315080007700E490968C90608D50D49C96902220A43FE -S315080007800B49CA610100102008430849096849074E -S3150800079008D50749C96901220A430549CA61010002 -S315080007A0042008430149086000BD00000C200240EF -S315080007B0A00900202301674504200240AB89EFCD3C -S315080007C0F8B504000F00012500262D48007E0128F3 -S315080007D001D1022042E00120294908762068012833 -S315080007E011D12848FFF794FF002832D100F037F8D6 -S315080007F02448FFF78DFF0500234800680421884335 -S315080008002149086025E01F48FFF782FF002820D10C -S315080008100020C0433860666802E08020C0003618B1 -S31508000820A0688021C900484361684018864210D2F2 -S31508000830300000F02BF81348FFF76AFF050012484E -S3150800084000680221884310490860EDB2002DE4D003 -S315080008503E6000200A4908762800C0B2F2BD002092 -S315080008600749C86108480068042101430648016031 -S3150800087005480068402101430348016070470000AD -S31508000880A009002050C300001020024000210A4A97 -S31508000890D1610849096802220A4306490A600749DC -S315080008A00860044800684021014302480160704717 -S315080008B00000000010200240A00900201420024079 -S315080008C072B6704762B6704780B5FFF7F7FB01BD91 -S315080008D080B5FFF7FCFB02BD80B5FFF72BFC02BD18 -S315080008E080B5FFF789FC02BD80B5FFF7D1FC02BDD4 -S315080008F080B5FFF745FC002801D1002001E0FFF78D -S31508000900AAFC02BD00B500690840884201D1012051 -S3150800091000E00020C0B200BD80B500F010F901214A -S315080009209020C005FFF7EEFF002801D0002000E068 -S31508000930012002BD80B5642000F0DAF801BD80B55B -S3150800094000F0D9F801BDFEE780B500F007F900F020 -S315080009504EFB00202549087001BD80B5694624482C -S3150800096000F07EFB012807D1002020490870684660 -S3150800097001781F4800F012F901BD704780B51B4A7F -S315080009801278002A02D1C9B200F04BFB00F002F936 -S3150800099001BD00B515480078002805D0022807D003 -S315080009A004D3032806D007E0402006E0002004E030 -S315080009B0002002E0002000E0402080B200BD00B523 -S315080009C00A480078002805D0022807D004D303284F -S315080009D006D007E0402006E0002004E0002002E000 -S315080009E0002000E0402080B200BD0000C4000020C6 -S315080009F06009002080B500F0C4F802BD80B500F09B -S31508000A000DF81148114908600020114908600520B1 -S31508000A101049086000201049086001BD00200D49F2 -S31508000A200860704700B50B480068C00304D50A483B -S31508000A300068401C0849086000BD80B5FFF7F2FF52 -S31508000A400548006802BD00007FBB000014E000E016 -S31508000A5018E000E010E000E0C809002080B5FFF7C4 -S31508000A60ECFF02BD7047FEE780B513480068102109 -S31508000A70014311480160002000F074FB00F064FC9B -S31508000A80002002BD80B50020C0430C490860002044 -S31508000A900A4908600020C04309490860002008493F -S31508000AA008600020C043074908600020054908601F -S31508000AB000F08DFC002002BD00200240101002400C -S31508000AC00C10024028100240D2B2203A03D3080084 -S31508000AD0D040002170472032D141D0404840914053 -S31508000AE0D14048407047FEE7816170478162704790 -S31508000AF016490880704780B5FFF79FFF14490968B3 -S31508000B0088421BD313480078002808D101201149D0 -S31508000B100870802149001048FFF7E6FF07E000202B -S31508000B200C490870802149000B48FFF7DFFFFFF7E3 -S31508000B3084FF0649098840180549086001BD80B543 -S31508000B40802149000448FFF7D1FF01BDD0090020E4 -S31508000B50C4090020D3090020000800480020BB492A -S31508000B6008700020B94988640020B9490870002037 -S31508000B70B84908800020B54988700020B3494870F4 -S31508000B80704700B5B1480078002801D1002000E080 -S31508000B90012000BD0020AE490870704780B5017875 -S31508000BA0FF2917D100F08CF8A9480078012802D14E -S31508000BB0102000F07CF8A5484421405E012808DB97 -S31508000BC00120A3490870A1484421415EBB4800F0B2 -S31508000BD052F801BD9D49097801294BD10178C929E7 -S31508000BE032D0CC293FD0CF293AD0D0292FD0D129FD -S31508000BF033D0D2292ED0F32917D0F4290FD0F529CE -S31508000C000AD0F6290ED0FA2912D0FC2913D0FD29CC -S31508000C1014D0FE2915D029E000F0D0F8C4E700F07A -S31508000C20EFF8C1E700F0C0F8BEE700F015F9BBE73A -S31508000C3000F0A2F8B8E700F09AF8B5E700F080F8F7 -S31508000C40B2E700F070F8AFE700F03AF9ACE700F069 -S31508000C5058F9A9E700F016F9A6E700F083F9A3E723 -S31508000C6000F093F9A0E700F0A5F99DE7202000F031 -S31508000C701EF899E7ADE780B589B2FFF77FFE01BD9B -S31508000C80F8B504000D001700002604E02078361891 -S31508000C90641CFFF7CBFC2800451E0028F6D1F6B2E7 -S31508000CA03E600120F2BD0020684948707047FE2169 -S31508000CB0664AD170654908710220664908807047FE -S31508000CC080B5FFF7F0FF012060490870FF205F49F3 -S31508000CD0C87000205D4908715C48007910210143FD -S31508000CE05A4801710020594948715848407957496E -S31508000CF04871FFF74EFE55498871FFF760FE534964 -S31508000D00C871FFF75CFE80B2000A504908720120DC -S31508000D104E49487201204D49887208204D4908807D -S31508000D20FFF7D2FD01BD80B5002048490870FFF7DE -S31508000D30BAFFFF204549C87001204649088001BD11 -S31508000D40FF204249C8700020404908713F48407852 -S31508000D503E49487100203D49887100203B49C871C9 -S31508000D6000203A49087206203A490880704780B53B -S31508000D700020FFF79CFF01BDFF203449C870884852 -S31508000D803249886400203149087100202F4948718A -S31508000D9000202E49887107202C49C91C4860C91EA5 -S31508000DA008202C4908807047FF21284AD1704068DE -S31508000DB026498864012027490880704710B5040031 -S31508000DC0FFF7E7FD80B2401E6178884203DA2220E9 -S31508000DD0FFF76DFF13E0627892B21C48816C714888 -S31508000DE0FFF70FFCFF201949C8701848806C617816 -S31508000DF04018164988646078401C1649088010BD5A -S31508000E0010B50400FFF7C5FD80B2401E6178884220 -S31508000E1003DA2220FFF74BFF16E060680B49886467 -S31508000E20627892B20948816C5E48FFF7EAFBFF20B8 -S31508000E300649C8700548806C61784018034988647B -S31508000E406078401C0349088010BD0000D0080020C7 -S31508000E50130900201409002080B5FF21524AD170D9 -S31508000E60524A41685048806CFFF70AFF4E4908719C -S31508000E7000204D49487100204B49887108204C498B -S31508000E80088001BD80B5FF204749C8700020464943 -S31508000E900871002044494871FFF77BFD4249887173 -S31508000EA000204149C87100203F49087200203E4988 -S31508000EB0487207203E49088001BD0000D30800207B -S31508000EC010B50400FFF765FD621C80B2411E364866 -S31508000ED0806CFFF7FDFC002803D13120FFF7E7FE01 -S31508000EE00EE0FF203049C870FFF753FD2E49896C84 -S31508000EF080B2401E08182C49886401202C490880B5 -S31508000F0010BD10B50400FFF744FD80B2801E61785D -S31508000F10884203DA2220FFF7CAFE22E0FF20224990 -S31508000F20C8700120224908806078002807D1FFF799 -S31508000F30DFFC002802D13120FFF7B9FE11E0A21C20 -S31508000F4061781948806CFFF7C3FC002803D131206B -S31508000F50FFF7ADFE05E01448806C61784018124929 -S31508000F60886410BD80B541680F48806CFFF7B4FCF3 -S31508000F70002803D13120FFF79AFE05E0FF200A4931 -S31508000F80C87001200A49088001BD80B5FFF714FB27 -S31508000F90FF200549C87001200549088001BD0000E9 -S31508000FA0EC1D0008D4080020D0080020D70800202F -S31508000FB01409002080B53120FFF779FE01BDFEE750 -S31508000FC0016801220A4302607047C06941090800A6 -S31508000FD0C007C00F7047C069C1090800C007C00F25 -S31508000FE07047808CC0B27047C9B20185704700B59A -S31508000FF087B0E120000200900020019000200290B6 -S31508001000002003900C2004900020059000200690F4 -S3150800101069464D4800F041FA4B48FFF7D1FF07B043 -S3150800102000BD70B504000D00EDB2412D03DB812132 -S31508001030464800F07BFA2800C0B200F06FF8002698 -S3150800104006E0FFF7F3FAB6B2A05D00F067F8761C83 -S3150800105030002900C9B280B289B28842F1D370BD86 -S3150800106038B505000C003A480078002817D13948E9 -S3150800107000F044F801283FD13648007800283BD0D4 -S3150800108034480078412837DAFFF7D7FC3249086038 -S3150800109000203249087001202D4908702CE02D489F -S315080010A02E4909784018401C00F028F8012819D163 -S315080010B02A480078401C294908702848007825499C -S315080010C00978884218D12548027892B2244928001E -S315080010D0FFF797FA00201E4908702048007820700C -S315080010E001200AE0FFF7A9FC1B490968643181421F -S315080010F002D2002016490870002032BD38B5040017 -S3150800110000251148FFF761FF002804D00E48FFF7B5 -S3150800111068FF207001252800C0B232BD10B5010055 -S31508001120C9B20948FFF760FFFFF787FC04000A34D5 -S315080011300548FFF750FF002805D1FFF777FAFFF7B4 -S315080011407CFC8442F4D210BD00440040701C0008A8 -S31508001150D50900201C090020CC090020D40900204C -S315080011601D09002010B5040000F0E4F9FA218900F1 -S3150800117000F0E6F900F09BFA002221000020C043A7 -S3150800118000F090FA002010BD9F4800688021C9022F -S3150800119001439D48016070479B48006880214902C9 -S315080011A0014399480160704797480068410C080058 -S315080011B0C007C00F70479549096803229143084341 -S315080011C0924908607047914801680C2008407047AA -S315080011D08E490968F022914308438C490860704794 -S315080011E08A4909688A4A0A4010438849086070474C -S315080011F08548006880214904014383480160704797 -S3150800120081480068410E0800C007C00F70477F4A32 -S315080012101268804B13408022520202401A4311433F -S315080012207A4A11607C4909680F2291430007000F2A -S31508001230084379490860704781B0784909680143CD -S31508001240764A11607549096808400090009801B00F -S31508001250704772490968814370480160704781B0D8 -S315080012606F49096801436E4A11606D49096808406B -S315080012700090009801B07047694909688143684839 -S315080012800160704781B0674909680143654A116082 -S315080012906449096808400090009801B070476149A0 -S315080012A0096881435F48016070475F490968012200 -S315080012B0914308435C49086070475B480168080029 -S315080012C0C007C00F70478162704780B500F005F807 -S315080012D000F0FCF900F008FAFCE780B5FFF7C4FB5C -S315080012E000F001F801BD80B50120FFF7DEFFFFF72A -S315080012F0E4FF012803D067214C4800F017F9FFF7EF -S3150800130043FFFFF749FFFFF74FFF0128FBD1802175 -S31508001310490380204002FFF77AFFFFF769FFFFF7CE -S315080013206FFF0128FBD10020FFF752FF0020FFF7CF -S3150800133057FF0220FFF73FFFFFF745FF0828FBD1BD -S315080013403B4800F0DBF901BD00B587B00120FFF787 -S3150800135099FF80208002FFF76FFF80200003FFF7C8 -S315080013606BFF80208002FFF77AFF80204000009004 -S315080013700120019000200290002003900020049094 -S3150800138069462C4800F069FA802149002948FFF788 -S315080013909AFF0120009000200190002004906946E1 -S315080013A09020C00500F059FA0C2000900220019008 -S315080013B0032002900020039000200490012005904D -S315080013C069469020C00500F048FA07B000BD80B510 -S315080013D0802149001748FFF776FF164800F0FAF90A -S315080013E09020C00500F0F6F980208002FFF744FF40 -S315080013F080200003FFF72DFF80208002FFF729FFDA -S315080014000120FFF74CFF01BD001002400410024006 -S31508001410FFF8FFFFFFFFC2FF2C1002401410024026 -S315080014201C10024018100240002002400C1C000844 -S31508001430006CDC020008004801680800C007C00FFD -S3150800144070474268334B13401943416070478268BE -S31508001450314B134019438160704730B504000020B2 -S3150800146000258020000282420FD1022041435808FD -S315080014700818190000F064F880B2284D05404008A5 -S315080014804007400F0543E56006E0580808181900AC -S3150800149000F056F880B2E06030BDFEB507000C00DB -S315080014A0002600253800FFF7C7FF00282ED1386828 -S315080014B01D49014060680843E16801432069084303 -S315080014C0A16901433960A1683800FFF7BAFF61696D -S315080014D03800FFF7BCFF1248874204D1002000F00D -S315080014E04EFA050006E00F48874203D1684600F029 -S315080014F038FA029D002D09D02068002806D001265A -S315080015002368A26929003800FFF7A7FF3000C0B298 -S31508001510FEBD0000FFCFFFFFFFFCFFFFF0FF00004E -S315080015200038014000440040F369FFFF80B5FFF72B -S315080015307DF8FCE70148006870470000C0000020FD -S315080015400022030A8B420BD203098B4219D24308A5 -S315080015508B422ED2411A00D201465241104670479C -S31508001560FF2209023FD012068B4205D31212090246 -S315080015708B4201D31212090203098B4219D300E0E8 -S31508001580090AC3098B4201D3CB01C01A5241830908 -S315080015908B4201D38B01C01A524143098B4201D3B6 -S315080015A04B01C01A524103098B4201D30B01C01AE1 -S315080015B05241C3088B4201D3CB00C01A524183085B -S315080015C08B4201D38B00C01A524143088B4201D388 -S315080015D04B00C01A5241884200D3401A5241CFD21A -S315080015E001461046704708B500F04EFA08BDFEE7FA -S315080015F0F0B540B2002821D52F4B40B20207120F92 -S31508001600083A9208042462432B4C40B205072D0F72 -S31508001610083DAD08042675436459FF258607B60FAD -S3150800162008277E43B540AC438901C9B28007800FBD -S31508001630082568438140214399501AE01F4A40B261 -S31508001640830804246343D258FF238407A40F08257C -S315080016506C43A3409A438901C9B283079B0F0824A8 -S31508001660634399401143154A40B2800804235843FE -S315080016701150F0BD80B5411E80225204914201D31B -S3150800168001200EE0401E0E49086003210020C043D9 -S31508001690FFF7AEFF00200B49086007200A490860DB -S315080016A0002002BD80B540B2FFF7A2FF01BD80B59C -S315080016B0FFF7E0FF02BD00001CED00E000E400E0DB -S315080016C014E000E018E000E010E000E080B5FEF766 -S315080016D06FFFFEF7A7FFFFF791F9FFF7F5F8FFF79A -S315080016E033F900F0D3F901BD80B5FEF79FFFFFF788 -S315080016F099F9FFF732F900F0D4F901BD01490860FC -S3150800170070470000C000002030B403680C004C434A -S3150800171003256C43A3430C004C4354431C43046009 -S3150800172030BC704743688B43514319434160704747 -S3150800173030B483680C004C4303256C43A3430C0068 -S315080017404C4354431C43846030BC704730B4C36870 -S315080017500C004C4303256C43A3430C004C435443F1 -S315080017601C43C46030BC704730B4036A0C004C4359 -S315080017704C434C430F256C43A3430C004C434C434A -S315080017804C4354431C43046230BC704730B4446A2B -S315080017900B0A0D0A6B430D0A6B430D0A6B430F25A3 -S315080017A06B439C430B0A0D0A6B430D0A6B43090AEC -S315080017B04B4353432343436230BC70474849096847 -S315080017C008434749086070474549096881434448C2 -S315080017D00160704710B501249021C905884208D1D7 -S315080017E080208002FFF7EAFF80208002FFF7ECFFE7 -S315080017F030E03C49884208D18020C002FFF7DEFF6E -S315080018008020C002FFF7E0FF24E03749884208D16C -S3150800181080200003FFF7D2FF80200003FFF7D4FFE4 -S3150800182018E03249884208D180204003FFF7C6FFF6 -S3150800183080204003FFF7C8FF0CE02D49884208D1F5 -S315080018408020C003FFF7BAFF8020C003FFF7BCFF64 -S3150800185000E000242000C0B210BDF8B507000C0057 -S315080018600026002505E0626929003800FFF78EFF8B -S31508001870761C2068F040002825D020680125B54050 -S315080018800540002DF4D0626829003800FFF73CFFB8 -S315080018906068012802D06068022804D1A26829007D -S315080018A03800FFF745FF226929003800FFF74EFF89 -S315080018B060680228DCD1FF2DD5D862692900380076 -S315080018C0FFF752FFD4E76068012802D06068022853 -S315080018D004D1E26821683800FFF724FF0120F2BD31 -S315080018E0281002400004004800080048000C004880 -S315080018F0001400485B48006841080800C007C00F8C -S3150800190070475948006841080800C007C00F70476B -S31508001910564801680C200840704754480168F02072 -S315080019200840704751480168E020C00008407047E9 -S315080019304F490968032282400A400006104370474F -S315080019404A480068802149020840704747480168AC -S31508001950F020800308407047464800680007000FDB -S31508001960704710B5040000F031F82060206800F0D8 -S3150800197041F86060606800F049F8A06010BD10B5D5 -S315080019800024002820D1FFF7D3FF012804D014D360 -S31508001990032805D00AD310E000F018F8040013E075 -S315080019A0FFF7A8FF002800D0334C0DE0FFF7A9FF8A -S315080019B0002801D08024240206E000F007F800F091 -S315080019C019F800F023F80400200010BD80B50020A7 -S315080019D0FFF79EFF002804D0042804D0082804D066 -S315080019E006E0254805E0244803E000F019F800E081 -S315080019F0214802BD10B50400FFF78FFF1F490009F3 -S31508001A000007000F085CC440200010BD10B5040094 -S31508001A10FFF788FF1A49000A085CC440200010BD79 -S31508001A2010B500240020FFF78BFF002804D0802182 -S31508001A304902884202D003E0124C02E00E4C00E054 -S31508001A40104CFFF789FF01002000491CFFF778FDBD -S31508001A500400FFF77BFF800C0107090F891C200093 -S31508001A60484310BD001002402010024004100240F6 -S31508001A70301002402C10024000127A00B81D0008EF -S31508001A80E41D000800093D007047FEE780B5012007 -S31508001A9010490870FEF7D1FF0F49086000F001F8F9 -S31508001AA001BD80B5FEF7A6FF012811D009480078C8 -S31508001AB001280DD1FEF7C1FF07490968FA2252002D -S31508001AC08918884204D3002002490870FEF774FD7D -S31508001AD001BD0000D2090020C0090020002000082E -S31508001AE000080000040000000028000800080000A4 -S31508001AF0050000000030000800080000060000008D -S31508001B000038000800080000070000000040000830 -S31508001B10000800000800000000480008000800004F -S31508001B200900000000500008000800000A00000034 -S31508001B3000580008000800000B00000000600008BC -S31508001B40000800000C0000000068000800080000FB -S31508001B500D00000000700008000800000E000000DC -S31508001B6000780008000800000F0000000080000848 -S31508001B700080000010000000194800680121014398 -S31508001B801748016017480068174901401548016061 -S31508001B90134800681549014011480160104800685B -S31508001BA0134901400E4801600E480068114901407A -S31508001BB00C480160104800680F2188430E490860E8 -S31508001BC00E4800680E4901400C4801600D4800683F -S31508001BD0012188430B49086000200B4908607047BB -S31508001BE000100240041002400CB8FFF8FFFFF6FE92 -S31508001BF0FFFFFBFFFFFFC0FF2C1002403010024022 -S31508001C00ACFEFFFF3410024008100240433A5C570E -S31508001C106F726B5C736F6674776172655C4F706523 -S31508001C206E424C545F53504C746F48414C5C54613F -S31508001C30726765745C44656D6F5C41524D434D3007 -S31508001C405F53544D333246305F446973636F76652C -S31508001C5072795F53544D3332463035315F494152BC -S31508001C605C426F6F745C6D61696E2E6300000000E4 -S31508001C70433A5C576F726B5C736F66747761726513 -S31508001C805C4F70656E424C545F53504C746F4841BC -S31508001C904C5C5461726765745C536F757263655CFE -S31508001CA041524D434D305F53544D333246305C7587 -S31508001CB06172742E6300000070B40121002213E0E3 -S31508001CC00468001D0C4202D04D466D1E6419226040 -S31508001CD0241D1B1F042BFAD225009E0701D522803E -S31508001CE0AD1C0B4000D02A700368001D002BE7D1FD -S31508001CF070BC704730B401210268001D002A0FD05D -S31508001D000368C318446808300C4202D04D466D1E5D -S31508001D1064191D6825601B1D241D121FECD0F8E7E9 -S31508001D2030BC704710B5074979441831064C7C44D5 -S31508001D30163404E0081D0A68891888470100A1427C -S31508001D40F8D110BD08000000280000006DFFFFFF55 -S31508001D5010050000C80400200000000099FFFFFFDE -S31508001D600800000090000000C000002000000000ED -S31508001D7000F00BF8002801D0FFF7D4FF002000BFC1 -S31508001D8000BFFFF7A2FA00F002F80120704780B5FD -S31508001D9000F002F801BDFEE70746384600F002F8F3 -S31508001DA0FBE7FEE780B500BF00BF024A1100182016 -S31508001DB0ABBEFBE7260002000000000000000000A2 -S31508001DC0010203040607080901488047014800473D -S31508001DD0791B0008D91D000800BF00BF00BF00BF5F -S31508001DE0FFF7C6FF00000000010203044F70656E8E -S31508001DF0424C540000127A0004000000FEE7FEE799 -S31508001E00FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE79C -S31508001E10FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE78C -S31308001E20FEE7FEE7FEE7FEE7FEE7FEE7FEE763 -S70508001DD9FC +S31508000020000000000000000000000000BF0A0008F1 +S315080000300000000000000000FB0E0008510A00083E +S31508000040F31400084B1A00084B1D0008571D00083A +S31508000050B11D0008B31D0008B51D0008B71D00082E +S31508000060B91D0008BB1D0008BD1D0008BF1D0008FE +S31508000070C11D0008C31D0008C51D0008C71D0008CE +S31508000080C91D0008CB1D000800000000CD1D000892 +S31508000090CF1D0008D11D0008D31D0008D51D000876 +S315080000A0D71D0008D91D0008DB1D0008DD1D000846 +S315080000B0DF1D000800000000E11D00080020C04305 +S315080000C086490860864908607047F8B504000F003D +S315080000D01500844E90203058942171584018401EBF +S315080000E0001B791E884201D200201FE0200000F084 +S315080000F0CAF9FF2805D0E019401E00F0C4F9FF2808 +S3150800010001D1002012E0600A8021890048432A00B4 +S315080001103168884205D13B002100714800F0E4F8B7 +S3150800012004E03B0021006D4800F0DEF8F2BD70B532 +S3150800013004000E006B4890214158942280580818F4 +S31508000140401E001B711E884201D2002017E02000C5 +S3150800015000F099F90500A019401E00F094F929004D +S31508000160C9B2FF2903D00100C9B2FF2901D1002075 +S3150800017005E00100C9B22800C0B200F02CF970BD34 +S3150800018080B500200090564801680022D24391426B +S3150800019001D1012028E00099426889180091009948 +S315080001A08268891800910099C26889180091009997 +S315080001B00269891800910099426989180091009985 +S315080001C08269891800910099C069081800900098FA +S315080001D0C14300910098401C00906A46042141489A +S315080001E00068C030FFF771FF02BD00B500213D4829 +S315080001F00268126889180268121D1268891802684E +S3150800020008321268891802680C321268891802685E +S31508000210103212688918026814321268891802683E +S315080002201832126889180068C03000680818002853 +S3150800023001D1012000E0002000BD10B50024E443F0 +S3150800024027480168A14205D000F094F8002801D19A +S3150800025000200AE021480168A14205D000F08AF88A +S31508000260002801D1002000E0012010BD1D480068CB +S31508000270704780B5CA05D20D002A01D000200BE0D0 +S3150800028002688A4201D1012006E0016080229200BC +S31508000290001D00F09EF9012002BD38B505000C00CE +S315080002A00F48854208D10D4D21002800FFF7E1FFD0 +S315080002B000280FD100200EE00A490A68944202D1AC +S315080002C005000C68F0E7280000F054F80028EBD188 +S315080002D0002000E0280032BD00000000C800002011 +S315080002E0CC020020B41A0008F8B504000D00160068 +S315080002F01F00680A80218900484300902068002171 +S31508000300C943884207D100992000FFF7B2FF0028A9 +S3150800031001D100202BE020680099884208D0009976 +S315080003202000FFF7BAFF0400002C01D100201EE0D0 +S3150800033030002168691A61180E1D050000F05EF983 +S3150800034080208000211D711A814208D3009909185E +S315080003502000FFF7A2FF0400002C09D0261D2878EC +S315080003603070761C6D1C7F1E002FE7D10120F2BD70 +S315080003700020FCE7F8B507000125386800F083F887 +S31508000380C0B2FF2801D1002024E000F087F900243C +S3150800039004E000980068B04217D1641C802C15D27E +S315080003A038680421614340180090042060433818D7 +S315080003B0466800F023F9320000230099022000F075 +S315080003C021F90028E5D0002500E0002500F07AF99B +S315080003D02800C0B2F2BDF0B585B00F0001252C008B +S315080003E00021019139000200C9B2D2B2914200D26D +S315080003F00024574902000B7AD2B29A4205D39822B2 +S31508000400895C3A00D2B2914200D200242100C9B2D6 +S31508000410012934D1C0B200F05FF806003800C0B236 +S3150800042000F05AF8010000913800C0B200F072F8E6 +S3150800043000990818401E801B401C800A69460880DF +S31508000440002702970396049500F028F93D0005E079 +S3150800045003988021C900401803906D1C280069463E +S31508000460098880B2884208D200F0C8F801A902A813 +S3150800047000F096F90028EBD03C0000F023F92000A4 +S31508000480C0B205B0F0BD38B50400002500E06D1C0B +S315080004902800C0B20D281DD200F0B0F82C4829005B +S315080004A0C9B20C22514341588C42F0D32900C9B233 +S315080004B00C22514341582A00D2B20C235A438218BF +S315080004C0526889188C42E2D2EDB20C214D4340198C +S315080004D0007A00E0FF2032BD38B50400002500E0B0 +S315080004E06D1C2800C0B20D2811D200F087F81848F4 +S315080004F02900C9B20C2251434118097A2200D2B206 +S315080005009142EDD1EDB20C214D43405901E0002056 +S31508000510C04332BD38B50400002500E06D1C280034 +S31508000520C0B20D2812D200F069F809482900C9B2EC +S315080005300C2251434118097A2200D2B29142EDD1D8 +S31508000540EDB20C214D434019406800E0002032BD51 +S31508000550B41A000881B008490A6802430A600968A3 +S3150800056008400090009801B0704704490A680323C0 +S315080005709A43104308607047181002400000014073 +S3150800058080B500F08FF901BD10B500F09BF9002881 +S315080005901ED000F0B3F900281AD000F0E1F900F0F7 +S315080005A034FA00F064FA0120FFF7D4FF00F08EF960 +S315080005B0C02201008020800500F00BF80320FFF719 +S315080005C0D4FF00F083F9001D046800F06DF9A04718 +S315080005D010BD70B514000D00060005E028783070CF +S315080005E06D1C761C00F00AF82000441E80B2002814 +S315080005F0F4D170BD80B500F08FF901BD80B500F06B +S3150800060090F901BDF3B581B0040016001F0001255D +S315080006102800002000202F48007E012801D1022052 +S315080006203BE02D480090280000990870314800F0FA +S3150800063063F80100C9B200292BD1012C04D0022C81 +S3150800064001D1022500E00425002400E0641C2100F5 +S315080006502A00C9B2D2B291421BD230003900102208 +S31508000660624300F01DFA010089B202982200D2B254 +S3150800067002235A43801800F031F81E4800F03CF86F +S3150800068041490A6801239A430A600100C9B2002950 +S31508000690DCD00021009A1170C0B2FEBD10B5002052 +S315080006A08021394A13680B40002B09D0384B394C46 +S315080006B01C60394C1C6012681140002900D00120CA +S315080006C0C0B210BD3048016880220A43026000208B +S315080006D070470000A0050020B805002010B40022CD +S315080006E02E4BDA61284A136801241C4314600180E2 +S315080006F010BC704750C3000038B5040000F0A4F9D8 +S31508000700050022480168C9070CD50020C043844269 +S31508000710F7D0002C04D000F097F9401B8442F0D2A1 +S31508000720032010E0202102680A40002A00D0016058 +S315080007300168C90602D40068400703D500F004F82A +S31508000740012000E0002032BD30B5002010220F49FC +S315080007500B681340002B07D0104BDC690225254394 +S31508000760DD6103001000184304230A681A40002AB2 +S3150800077007D00A4AD46901252543D5610200180025 +S315080007801043086030BD0000102002400C200240D3 +S315080007900420024023016745AB89EFCDA005002060 +S315080007A0FEB50D0001210C0000273A002E4A127EE4 +S315080007B0012A01D1022048E000902C4801900198B6 +S315080007C0017000980068012811D1294D2800FFF70B +S315080007D093FF002835D100F039F82800FFF78CFF81 +S315080007E004002448016804229143016029E0204856 +S315080007F0FFF782FF002824D102950020C043029902 +S3150800080008600098456800E0AD198026F600009853 +S3150800081080687043009949684018854211D22800BB +S3150800082000F02AF81248FFF767FF0400114801682C +S315080008300222914301602000C0B20028E4D0029849 +S315080008400560019807702000C0B2FEBD0020064969 +S31508000850C8610848016804220A4302600168402208 +S315080008600A43026070470000A0050020B805002072 +S3150800087050C30000102002400021074AD1610749F1 +S315080008800A68022313430B60054A10600868402271 +S3150800089002430A6070470000A005002010200240AD +S315080008A01420024072B6704762B6704780B5FFF7EB +S315080008B005FC01BD80B5FFF708FC02BD80B5FFF752 +S315080008C036FC02BD80B5FFF790FC02BD80B5FFF788 +S315080008D0CDFC02BD80B5FFF753FC002801D10020EE +S315080008E001E0FFF7AAFC02BD00B50069084088428E +S315080008F001D1012000E00020C0B200BD80B5012171 +S315080009009020C005FFF7F0FF002801D0002002E084 +S3150800091000F0FEF8012002BD80B5642000F0D4F88E +S3150800092001BD80B500F0D3F801BDFEE780B500F043 +S31508000930FFF800F0FAFA00202549087001BD1CB539 +S31508000940244C6946200000F028FB012807D1002026 +S315080009501F49087068460178200000F005F913BDA4 +S31508000960704780B51A4A1278002A02D1C9B200F037 +S31508000970F3FA00F0F5F801BD00B51548007800282F +S3150800098005D0022807D004D3032806D007E0402064 +S3150800099006E0002004E0002002E0002000E04020FD +S315080009A080B200BD00B50A480078002805D00228A4 +S315080009B007D004D3032806D007E0402006E000202D +S315080009C004E0002002E0002000E0402080B200BDE4 +S315080009D0C40000206005002010B5002400F0B7F818 +S315080009E0002800D001242000C0B210BD80B500F058 +S315080009F00CF81048104908600020104908600521C5 +S31508000A000F4A11600F49086001BD00200C490860B3 +S31508000A10704700B50A480068C00303D5094801684D +S31508000A20491C016000BD80B5FFF7F3FF0548006863 +S31508000A3002BD00007FBB000014E000E018E000E003 +S31508000A4010E000E0D005002080B5FFF7ECFF02BDFE +S31508000A507047FEE780B50E48016810220A43026017 +S31508000A60002000F015FB00F0F5FB002002BD80B564 +S31508000A7008480021C9430160002202600648016057 +S31508000A80026006480160026000F01FFC002002BDFB +S31508000A9000200240101002400C10024028100240AC +S31508000AA0D2B2203A03D30800D04000217047203242 +S31508000AB0D141D04048409140D14048407047FEE778 +S31508000AC0816170478162704715490880704710B583 +S31508000AD0FFF7A9FF134C2168884218D312480178FA +S31508000AE0002907D101210170802149000F48FFF72D +S31508000AF0E7FF06E000210170802149000B48FFF757 +S31508000B00E1FFFFF790FF064909884018206010BDED +S31508000B1080B5802149000548FFF7D4FF01BD0000D4 +S31508000B20D4050020C8050020D70500200008004885 +S31508000B300020B74902000A70886402004323CA5499 +S31508000B4002004423CA5202008A704870704700B5F2 +S31508000B50AF480078002801D1002000E0012000BD40 +S31508000B600020BB490870704710B50178FF2916D1D7 +S31508000B7000F08AF8A64C4320205C012802D11020F8 +S31508000B8000F07AF84420205E012807DB0120432183 +S31508000B9060544420215EE01C00F052F810BD9C49C8 +S31508000BA0097801294BD10178C92932D0CC293FD0FF +S31508000BB0CF293AD0D0292FD0D12933D0D2292ED037 +S31508000BC0F32917D0F4290FD0F5290AD0F6290ED023 +S31508000BD0FA2912D0FC2913D0FD2914D0FE2915D0E4 +S31508000BE029E000F0B0F8C5E700F0CCF8C2E700F05D +S31508000BF0A1F8BFE700F0E9F8BCE700F08AF8B9E722 +S31508000C0000F082F8B6E700F071F8B3E700F062F892 +S31508000C10B0E700F0FFF8ADE700F01CF9AAE700F02E +S31508000C20E5F8A7E700F044F9A4E700F053F9A1E7CF +S31508000C3000F05EF99EE7202000F01EF89AE7ADE77F +S31508000C4080B589B2FFF78DFE01BDF8B504000D0029 +S31508000C501700002604E020783618641CFFF7CEFC3F +S31508000C602800451E0028F6D1F6B23E600120F2BDE6 +S31508000C7000206749487070476549FE22CA700871A6 +S31508000C80022044228852704738B5FFF7F1FF604CBE +S31508000C9001252570FF20E0700020211D08702279AB +S31508000CA0102313430B70611D087060790870FFF7F5 +S31508000CB063FEA071FFF776FEE071FFF773FE80B260 +S31508000CC0000A20726572A572082044216052FFF757 +S31508000CD0EDFD31BD10B54E4C00202070FFF7C8FF62 +S31508000CE0FF20E07001204421605210BD4848FF21D2 +S31508000CF0C17000210171427842718171C17101721E +S31508000D00062144228152704780B50020FFF7B4FFC0 +S31508000D1001BD3F48FF21C1707349816400210171FB +S31508000D20417181710721C01C4160C01E08214422FF +S31508000D30815270473649FF22CA704068886401208C +S31508000D4044228852704738B50500FFF715FE80B271 +S31508000D50401E6978884203DA2220FFF78DFF10E0EB +S31508000D606A782B4C201D92B2A16CFFF732FCFF204B +S31508000D70E070A06C69784018A0646878401C44212B +S31508000D80605231BD70B50500FFF7F6FD80B2401E12 +S31508000D906978884203DA2220FFF76EFF14E01C4CBC +S31508000DA026004836686830606A78201D92B2A16CC1 +S31508000DB0FFF70FFCFF20E070A06C697840183060E0 +S31508000DC06878401C4421605270BD10B5104CFF2154 +S31508000DD0E170E21D4168A06CFFF737FF2071002023 +S31508000DE06071A07108204421605210BD38B5084CC6 +S31508000DF0FF20E070002525716571FFF7BDFDA07124 +S31508000E00E5712572657207204421605231BD0000E4 +S31508000E10D004002038B50500FFF7AEFD334C6A1C38 +S31508000E2080B2411EA06CFFF745FD002803D1312092 +S31508000E30FFF722FF0BE0FF20E070FFF79DFDA16C96 +S31508000E4080B2401E0818A06401204421605231BDBA +S31508000E501305002038B50500FFF78EFD80B2801E09 +S31508000E606978884203DA2220FFF706FF1FE01F4C45 +S31508000E70FF20E0700120442160526878002807D1DD +S31508000E80FFF728FD002802D13120FFF7F5FE0EE016 +S31508000E90AA1C6978A06CFFF70DFD002803D1312044 +S31508000EA0FFF7EAFE03E0A06C69784018A06431BD3C +S31508000EB010B50E4C4168A06CFFF700FD002803D161 +S31508000EC03120FFF7D9FE04E0FF20E070012044211D +S31508000ED0605210BD80B5FFF757FB0448FF21C1706B +S31508000EE001214422815201BDA01D0008D004002022 +S31508000EF080B53120FFF7C0FE01BDFEE7016801227B +S31508000F000A4302607047C06941090800C007C00F5C +S31508000F107047C069C1090800C007C00F7047808CB8 +S31508000F20C0B27047C9B20185704718B587B0E120CD +S31508000F300002009000200190029003900C21049179 +S31508000F40059006904C4C6946200000F028FA2000CF +S31508000F50FFF7D4FF08B010BD70B504000D002800D7 +S31508000F60C0B2412803DB8121444800F061FA280019 +S31508000F70C0B200F06AF8002607E0FFF73FFB300032 +S31508000F8080B2205C00F061F8761C30002900C9B2F6 +S31508000F9080B289B28842F0D370BDF8B507000E005A +S31508000FA037480078002816D1364C200000F03CF867 +S31508000FB0012837D12078002834D02078412831DA22 +S31508000FC0FFF731FD304908600020304908700120DC +S31508000FD02B49087026E02D4C2A4D20782818401CED +S31508000FE000F022F8012813D12078401C20702078C0 +S31508000FF02978884216D13800227892B2691CFFF700 +S31508001000E8FA00201E4908702078307001200AE0AE +S31508001010FFF709FD1C4909686431814202D20020A4 +S31508001020174908700020F2BD70B504000025124E5D +S315080010303000FFF768FF002804D03000FFF76FFF85 +S31508001040207001252800C0B270BD38B501000A4DD0 +S31508001050C9B22800FFF766FFFFF7E5FC04000A346B +S315080010602800FFF756FF002805D1FFF7C7FAFFF754 +S31508001070DAFC8442F4D231BD00440040281C000842 +S31508001080D90500201C050020CC050020D805002025 +S3150800109010B5040000F0D0F9FA21890000F0D2F961 +S315080010A000F08AFA002221000020C04300F07FFAEF +S315080010B0002010BD954801688022D2020A430260CA +S315080010C0704792480168802252020A4302607047BC +S315080010D08E480068410C0800C007C00F70478C494D +S315080010E00A6803239A4310430860704788480168D2 +S315080010F00C200840704786490A68F0239A43104333 +S315080011000860704782490A68824B13401843086092 +S3150800111070477E480168802252040A43026070477D +S315080011207A480068410E0800C007C00F704710B41F +S31508001130774A1368784C1C4080235B02034023439C +S315080011401943116075490A680F239A430007000F6F +S315080011501043086010BC704781B071490A680243A1 +S315080011600A60096808400090009801B070476C4909 +S315080011700A6882430A60704781B06A490A6802436E +S315080011800A60096808400090009801B070476549F0 +S315080011900A6882430A60704781B063490A68024355 +S315080011A00A60096808400090009801B070475E49D7 +S315080011B00A6882430A6070475C490A6801239A43B1 +S315080011C0104308607047594801680800C007C00FF7 +S315080011D070478162704780B500F005F800F0FAF9AB +S315080011E000F006FAFCE780B5FFF734FC00F001F8DA +S315080011F001BD80B50120FFF7DFFFFFF7E4FF0128F7 +S3150800120003D067214A4800F013F9FFF753FFFFF7A9 +S3150800121058FFFFF75DFF0128FBD180214903802095 +S315080012204002FFF784FFFFF774FFFFF779FF0128F5 +S31508001230FBD10020FFF75FFF0020FFF763FF0220C6 +S31508001240FFF74DFFFFF752FF0828FBD1394800F09A +S31508001250D9F901BDF8B586B00120FFF79DFF8024B6 +S31508001260A4022000FFF778FF80200003FFF774FF31 +S315080012702000FFF781FF80277F0000970124019453 +S3150800128000250295039504952B4E6946300000F01B +S3150800129066FA39003000FFF79CFF00940195049523 +S315080012A09026F6056946300000F059FA0C200090A1 +S315080012B0022001900320029003950495059469463F +S315080012C0300000F04CFA07B0F0BD10B500F0F3FAA4 +S315080012D0194C802149002000FFF77BFF200000F011 +S315080012E0FBF99020C00500F0F7F98024A40220003D +S315080012F0FFF74DFF80200003FFF739FF2000FFF7B7 +S3150800130036FF0120FFF753FF10BD00000010024012 +S3150800131004100240FFF8FFFFFFFFC2FF2C10024037 +S31508001320141002401C10024018100240002002400F +S31508001330D01B0008006CDC020008004801680800A1 +S31508001340C007C00F70474268334B134019434160CA +S3150800135070478268314B134019438160704730B536 +S3150800136004000800190000252B0080231B029A425E +S315080013700ED1022250434A08801800F063F880B262 +S315080013802749014040084007400F0143E16005E056 +S315080013904A08801800F056F880B2E06030BDFEB505 +S315080013A007000C0000252E003800FFF7C7FF0028AD +S315080013B02ED138681D49014060680843E168014339 +S315080013C020690843A16901433960A1683800FFF71D +S315080013D0BAFF61693800FFF7BCFF1248874204D19B +S315080013E0002000F0A0FA050006E00F48874203D166 +S315080013F0684600F08AFA029D002D09D02068002868 +S3150800140006D001262368A26929003800FFF7A7FF3E +S315080014103000C0B2FEBD0000FFCFFFFFFFFCFFFF9C +S31508001420F0FF00000038014000440040F369FFFF68 +S3150800143080B5FFF7E3F8FCE701480068704700004D +S31508001440C00000200022030A8B420BD203098B42FC +S3150800145019D243088B422ED2411A00D20146524174 +S3150800146010467047FF2209023FD012068B4205D369 +S31508001470121209028B4201D31212090203098B4286 +S3150800148019D300E0090AC3098B4201D3CB01C01A5C +S31508001490524183098B4201D38B01C01A5241430939 +S315080014A08B4201D34B01C01A524103098B4201D327 +S315080014B00B01C01A5241C3088B4201D3CB00C01A94 +S315080014C0524183088B4201D38B00C01A524143080C +S315080014D08B4201D34B00C01A5241884200D3401AAE +S315080014E05241CFD201461046704708B500F0ACFA13 +S315080014F008BDFEE7F0B5020052B2002A23D5032242 +S315080015000F242F4B05006DB22540083DAD08042673 +S315080015107543060076B23440083CA4080426744392 +S315080015201E59FF27BC461400044008277C4367461B +S31508001530A740BE438901C9B20240082042439140F0 +S31508001540314359511AE01F4A0323040064B2A40820 +S3150800155004256C431459FF251E00064008277E43C0 +S31508001560B540AC438901C9B2034008256B4399408D +S31508001570214340B28008042358431150F0BD80B57A +S31508001580411E80225204914201D301200EE0401EE2 +S315080015900D49086003210020C043FFF7ABFF002078 +S315080015A00A49086007200A490860002002BD80B57C +S315080015B040B2FFF79FFF01BD80B5FFF7E0FF02BD10 +S315080015C01CED00E000E400E014E000E018E000E0B4 +S315080015D010E000E080B5FEF7D3FFFFF70BF8FFF742 +S315080015E005FAFFF763F9FFF7A1F900F02FFA01BD35 +S315080015F080B5FFF703F8FFF70CFAFFF7A0F900F03C +S315080016002EFA01BD0149086070470000C00000209D +S3150800161030B403680C004C4303256C43A3430C0009 +S315080016204C4354431C43046030BC704743688B43A7 +S31508001630514319434160704730B483680C004C43EA +S3150800164003256C43A3430C004C4354431C4384605A +S3150800165030BC704730B4C3680C004C4303256C4358 +S31508001660A3430C004C4354431C43C46030BC70472E +S3150800167030B4036A0C004C434C434C430F256C436F +S31508001680A3430C004C434C434C4354431C43046251 +S3150800169030BC704730B4446A0B0A0D0A6B430D0A16 +S315080016A06B430D0A6B430F256B439C430B0A0D0ACC +S315080016B06B430D0A6B43090A4B4353432343436267 +S315080016C030BC704747490A68104308607047454967 +S315080016D00A6882430A60704738B501249021C90513 +S315080016E0884208D18025AD022800FFF7EBFF2800C5 +S315080016F0FFF7EDFF30E03C49884208D18025ED022E +S315080017002800FFF7DFFF2800FFF7E1FF24E037494D +S31508001710884208D180252D032800FFF7D3FF28002B +S31508001720FFF7D5FF18E03249884208D180256D03B6 +S315080017302800FFF7C7FF2800FFF7C9FF0CE02D496F +S31508001740884208D18025ED032800FFF7BBFF280053 +S31508001750FFF7BDFF00E000242000C0B232BDF8B597 +S3150800176007000D00002006002BE06A6921003800FA +S31508001770FFF790FF24E028680124B4400440002CB9 +S315080017801ED06A6821003800FFF742FF6868012802 +S3150800179002D06868022804D1AA6821003800FFF739 +S315080017A04BFF2A6921003800FFF754FF68680228B2 +S315080017B006D1FF2CD9D86A6921003800FFF758FFEF +S315080017C0761C2868F0400028D5D16868012802D020 +S315080017D06868022804D1EA6829683800FFF726FFF6 +S315080017E00120F2BD28100240000400480008004805 +S315080017F0000C00480014004885480168854A0A40DC +S31508001800026070478248016801220A4302607047F5 +S315080018107F48006841080800C007C00F70477C4928 +S315080018200A68F8239A43C0001043086070477A484C +S3150800183001680122914301607047774801680422D4 +S3150800184091430160704774490A68F8239A43C000B7 +S315080018501043086070477148006841080800C007CF +S31508001860C00F70476E4801680C20084070476C48E6 +S315080018700168F0200840704769480168E020C00008 +S315080018800840704767490968032282400A400006F3 +S315080018901043704762480068802149020840704733 +S315080018A05F480168F0208003084070475E4800687A +S315080018B00007000F704738B500242000FFF7A2FF85 +S315080018C01020FFF7ACFF0022D24310005749014011 +S315080018D0534D2960564810404D490860FFF78CFF64 +S315080018E02C601020FFF7AFFFFFF7A1FFFFF7A5FF5A +S315080018F04D4804604B480460BF2000044D490A68FF +S31508001900104308600C60012032BD10B5040000F0D9 +S3150800191031F82060206800F041F86060606800F0E7 +S3150800192049F8A06010BD10B50024002820D1FFF7A3 +S31508001930A9FF012804D014D3032805D00AD310E040 +S3150800194000F018F8040013E0FFF762FF002800D043 +S31508001950394C0DE0FFF77FFF002801D080242402D0 +S3150800196006E000F007F800F019F800F023F8040084 +S31508001970200010BD80B50020FFF774FF002804D0B2 +S31508001980042804D0082804D006E02B4805E02A4895 +S3150800199003E000F019F800E0274802BD10B504007E +S315080019A0FFF765FF254900090007000F085CC440DA +S315080019B0200010BD10B50400FFF75EFF2049000A9D +S315080019C0085CC440200010BD10B500210800FFF7D0 +S315080019D061FF002804D080214902884202D003E032 +S315080019E0184C02E0144C00E0164CFFF75FFF0100AC +S315080019F02000491CFFF726FD0400FFF751FF800C65 +S31508001A000107090F891C2000484310BD000000008B +S31508001A1000100240FFFFFBFF341002402010024076 +S31508001A2004100240301002402C1002400CF8FFF05F +S31508001A30FFFFF6FE0810024000127A006C1D00082F +S31508001A40981D000800093D007047FEE780B5012093 +S31508001A501549087000F01DF800F001F801BD10B531 +S31508001A60FEF7BAFF012813D00F4C207801280FD1B2 +S31508001A70FEF7D9FF0D4909680D4A12688918FA2236 +S31508001A8052008918884203D300202070FEF77CFD97 +S31508001A9010BD80B504480078012803D1FEF7C3FFBE +S31508001AA00349086001BD0000D6050020C4050020D2 +S31508001AB0C0050020002000080008000004000000FF +S31508001AC00028000800080000050000000030000893 +S31508001AD000080000060000000038000800080000A2 +S31508001AE00700000000400008000800000800000089 +S31508001AF0004800080008000009000000005000081F +S31508001B00000800000A00000000580008000800004D +S31508001B100B00000000600008000800000C00000030 +S31508001B2000680008000800000D00000000700008AA +S31508001B30000800000E0000000078000800080000F9 +S31508001B400F00000000800008008000001000000060 +S31508001B501448016801220A43026013490A68134BB4 +S31508001B6013400B600268124B134003600268114B66 +S31508001B70134003600868104A02400A600F4801686B +S31508001B800F22914301600E4801680E4A0A4002601E +S31508001B900D48016801229143016000200B49086045 +S31508001BA07047000000100240041002400CB8FFF80D +S31508001BB0FFFFF6FEFFFFFBFFFFFFC0FF2C100240F2 +S31508001BC030100240ACFEFFFF3410024008100240FD +S31508001BD0433A5C576F726B5C736F667477617265B4 +S31508001BE05C4F70656E424C545C5461726765745CF8 +S31508001BF044656D6F5C41524D434D305F53544D33D0 +S31508001C003246305F446973636F766572795F535401 +S31508001C104D3332463035315F4941525C426F6F74FD +S31508001C205C6D61696E2E6300433A5C576F726B5C3C +S31508001C30736F6674776172655C4F70656E424C545B +S31508001C405C5461726765745C536F757263655C4159 +S31508001C50524D434D305F53544D333246305C7273A8 +S31508001C603233322E6300000070B40123002413E0DF +S31508001C700168001D194202D04D466D1E49190C60B7 +S31508001C80091D121F042AFAD20D00960701D50C80E9 +S31508001C90AD1C1A4000D02C700268001D002AE7D13E +S31508001CA070BC704730B401220EE00368C31844685C +S31508001CB00830144202D04D466D1E64191D68256011 +S31508001CC01B1D241D091FF9D10168001D0029ECD12F +S31508001CD030BC704710B5074979441831064C7C4426 +S31508001CE0163404E0081D0A68891888470100A142CD +S31508001CF0F8D110BD08000000280000006DFFFFFFA6 +S31508001D0014050000C80000200000000099FFFFFF2E +S31508001D100800000094000000C00000200000000039 +S31508001D2000F00DF8002801D0FFF7D4FF00BF00BF70 +S31508001D30002000BF00BFFFF74EFA00F002F80120AE +S31508001D40704780B500F002F801BDFEE70746384641 +S31508001D5000F002F8FBE7FEE780B500BF00BF024AC5 +S31508001D6011001820ABBEFBE72600020000000000A9 +S31508001D70000000000102030406070809014880471D +S31508001D8001480047511B00088D1D000800BF00BF11 +S31508001D9000BF00BFFFF7C4FF0000000001020304F4 +S31508001DA04F70656E424C540000127A000400000021 +S31508001DB0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7ED +S31508001DC0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7DD +S31508001DD0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7CD +S30708001DE0FEE70E +S70508001D8D48 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.dbgdt b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.dbgdt index b4547eb1..cd671306 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.dbgdt +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.dbgdt @@ -210,5 +210,856 @@ - + + + 34048 + 34049 + 34050 + 34051 + 34052 + 34053 + 34054 + 34055 + 34056 + 34057 + 34058 + 34059 + 34060 + 34061 + 34062 + 34063 + 34064 + 34065 + 34066 + 34067 + 34068 + 34069 + 34070 + 34071 + 34072 + 34073 + 34074 + 34075 + 34076 + 34077 + 34078 + 34079 + 34080 + 34081 + 34082 + 34083 + 34084 + 34085 + 34086 + 34087 + 34088 + 34089 + 34090 + 34091 + 34092 + 34093 + 34094 + 34095 + 34096 + + + + + 34001 + 0 + + + + + 34390 + 34323 + 34398 + 34400 + 34397 + 34320 + 34321 + 34324 + 0 + + + + + 57600 + 57601 + 57603 + 33024 + 0 + 57607 + 0 + 57635 + 57634 + 57637 + 0 + 57643 + 57644 + 0 + 33090 + 33057 + 57636 + 57640 + 57641 + 33026 + 33065 + 33063 + 33064 + 33053 + 33054 + 0 + 33035 + 33036 + 34399 + 0 + 33055 + 33056 + 33094 + 0 + + + + 1 + 1 + + Disassembly + _I0 + + + 500 + 20 + + + + + 14 + 20 + + + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 03000000030010860000010000000E810000010000004681000001000000 + + + 0000 + 0000 + + + 0 + 0A0000000A0000006E0000006E000000 + 00000000F00300008007000003040000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34051 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34052 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 4294967295 + 000000003500000022010000F6000000 + 000000007A020000800700003B030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34053 + 000000003500000022010000E6000000 + 04000000570300007C070000D6030000 + 32768 + 0 + 0 + 32767 + 0 + + + 1 + + + 34060 + 000000003500000022010000E6000000 + 04000000570300007C070000D6030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34063 + 000000003500000022010000E6000000 + 04000000570300007C070000D6030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34064 + 000000003500000022010000E6000000 + 04000000570300007C070000D6030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34065 + 000000003500000022010000E6000000 + 04000000570300007C070000D6030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34081 + 000000003500000022010000E6000000 + 04000000570300007C070000D6030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34091 + 000000003500000022010000E6000000 + 04000000570300007C070000D6030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34054 + 000000003500000080020000C6000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34055 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34056 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 8192 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34057 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34058 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34059 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34061 + 00000000350000000601000096010000 + 7A06000032000000800700003B030000 + 16384 + 0 + 0 + 32767 + 0 + + + 1 + + + 34062 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34066 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 8192 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34067 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34068 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34069 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34070 + 000000003500000022010000F6000000 + 04000000920200001E01000021030000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34071 + 000000003500000022010000F6000000 + 000000008E020000800700003B030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34072 + 000000003500000022010000F6000000 + 000000008E020000800700003B030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34073 + 000000003500000022010000F6000000 + 000000008E020000800700003B030000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34074 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34075 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34076 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34077 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34078 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34079 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34080 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34082 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34083 + 000000003500000080020000C6000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34084 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34085 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34086 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34087 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34088 + 000000003500000022010000E6000000 + 000000000000000022010000B1000000 + 8192 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34089 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34090 + 0000000035000000AE010000F6000000 + 0000000000000000AE010000C1000000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34092 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34093 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34094 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34095 + 00000000350000000601000096010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34096 + 00000000350000000601000096010000 + 0000000032000000060100003B030000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 000000004A000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A0100003B030000010000000200001004000000010000000000000000000000308500000000000000000000000000000000000001000000308500000100000030850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000002F85000000000000000000000000000000000000010000002F850000010000002F850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000002E85000000000000000000000000000000000000010000002E850000010000002E850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000002D85000000000000000000000000000000000000010000002D850000010000002D850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000002C85000000000000000000000000000000000000010000002C850000010000002C850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000002A85000000000000000000000000000000000000010000002A850000010000002A850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000298500000000000000000000000000000000000001000000298500000100000029850000000000000020000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000288500000000000000000000000000000000000001000000288500000100000028850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000278500000000000000000000000000000000000001000000278500000100000027850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000268500000000000000000000000000000000000001000000268500000100000026850000000000000010000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000258500000000000000000000000000000000000001000000258500000100000025850000000000000010000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000248500000000000000000000000000000000000001000000248500000100000024850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000238500000000000000000000000000000000000001000000238500000100000023850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000228500000000000000000000000000000000000001000000228500000100000022850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000208500000000000000000000000000000000000001000000208500000100000020850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000001F85000000000000000000000000000000000000010000001F850000010000001F850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000001E85000000000000000000000000000000000000010000001E850000010000001E850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000001D85000000000000000000000000000000000000010000001D850000010000001D850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000001C85000000000000000000000000000000000000010000001C850000010000001C850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000001B85000000000000000000000000000000000000010000001B850000010000001B850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000010040000000100000000000000000000001A85000000000000000000000000000000000000010000001A850000010000001A850000000000000080000000000000FFFFFFFFFFFFFFFF0000000076020000800700007A020000000000000100001004000000010000000000000000000000FFFFFFFF0400000016850000178500001885000019850000FFFF02000B004354616262656450616E650080000000000000000000003500000022010000F6000000000000007A020000800700003B030000000000004080004604000000FFFEFF084D0065006D006F007200790020003100000000001685000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003200000000001785000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003300000000001885000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003400000000001985000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF1685000001000000FFFFFFFF16850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000158500000000000000000000000000000000000001000000158500000100000015850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000148500000000000000000000000000000000000001000000148500000100000014850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000138500000000000000000000000000000000000001000000138500000100000013850000000000000020000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000128500000000000000000000000000000000000001000000128500000100000012850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000000E85000000000000000000000000000000000000010000000E850000010000000E850000000000000040000001000000FFFFFFFFFFFFFFFF76060000320000007A0600003B0300000100000002000010040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000000B85000000000000000000000000000000000000010000000B850000010000000B850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000010040000000100000000000000000000000A85000000000000000000000000000000000000010000000A850000010000000A850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000098500000000000000000000000000000000000001000000098500000100000009850000000000000020000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000088500000000000000000000000000000000000001000000088500000100000008850000000000000010000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000001000000FFFFFFFFFFFFFFFF000000003B030000800700003F030000010000000100001004000000010000000000000000000000FFFFFFFF07000000058500000C8500000F8500001085000011850000218500002B85000001800080000001000000000000003500000022010000E6000000000000003F03000080070000F0030000000000004080005607000000FFFEFF054200750069006C006400010000000585000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000F85000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000001085000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000001185000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000002185000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000002B85000001000000FFFFFFFFFFFFFFFF01000000000000000000000000000000000000000000000001000000FFFFFFFF0585000001000000FFFFFFFF05850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000048500000000000000000000000000000000000001000000048500000100000004850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200001004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 + + + CMSIS-Pack + 00200000010000000100FFFF01001100434D4643546F6F6C426172427574746F6ED1840000000000001C000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B00FF7F0000 + + + 34048 + 0A0000000A0000006E0000006E000000 + F1030000000000001F0400001A000000 + 8192 + 0 + 0 + 32767 + 0 + + + 1 + + + Debug + 00200000010000000800FFFF01001100434D4643546F6F6C426172427574746F6E568600000000040031000000FFFEFF000000000000000000000000000100000001000000018013860000000004002D000000FFFEFF00000000000000000000000000010000000100000001805E8600000000040033000000FFFEFF0000000000000000000000000001000000010000000180608600000000040035000000FFFEFF00000000000000000000000000010000000100000001805D8600000000040032000000FFFEFF000000000000000000000000000100000001000000018010860000000004002B000000FFFEFF000000000000000000000000000100000001000000018011860000000000002C000000FFFEFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E14860000000004002E000000FFFEFF205200650073006500740020007400680065002000640065006200750067006700650064002000700072006F006700720061006D000A00520065007300650074000000000000000000000000000100000001000000000000000000000001000000050009802087000000000000FFFFFFFFFFFEFF06530079007300740065006D000100000000000000000000000100000001000000000000000000000001000000000009802487000000000000FFFFFFFFFFFEFF0853006F006600740077006100720065000100000000000000000000000100000001000000000000000000000001000000000009802187000000000000FFFFFFFFFFFEFF12480061007200640077006100720065002000720065007300650074002000700069006E000100000000000000000000000100000001000000000000000000000001000000000009800000000000000400FFFFFFFFFFFEFF000000000000000000000000000100000001000000000000000000000001000000000009801986000000000000FFFFFFFFFFFEFF000100000000000000000000000100000001000000000000000000000001000000000000000000FFFEFF0544006500620075006700FF7F0000 + + + 34049 + 0A0000000A0000006E0000006E000000 + 1503000000000000F10300001A000000 + 8192 + 0 + 0 + 32767 + 0 + + + 1 + + + Main + 00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000062000000FFFEFF000000000000000000000000000100000001000000018001E100000000000063000000FFFEFF000000000000000000000000000100000001000000018003E100000000000065000000FFFEFF0000000000000000000000000001000000010000000180008100000000000046000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000000068000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004006A000000FFFEFF000000000000000000000000000100000001000000018022E100000000040069000000FFFEFF000000000000000000000000000100000001000000018025E10000000000006C000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE10000000004006F000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040070000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF00960000000000000000000180218100000000040059000000FFFEFF000000000000000000000000000100000001000000018024E10000000000006B000000FFFEFF000000000000000000000000000100000001000000018028E10000000004006D000000FFFEFF000000000000000000000000000100000001000000018029E10000000000006E000000FFFEFF0000000000000000000000000001000000010000000180028100000000000048000000FFFEFF000000000000000000000000000100000001000000018029810000000000005D000000FFFEFF000000000000000000000000000100000001000000018027810000000000005B000000FFFEFF000000000000000000000000000100000001000000018028810000000000005C000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040055000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040056000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000000004C000000FFFEFF00000000000000000000000000010000000100000001800C810000000000004D000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000061000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F8100000000000057000000FFFEFF0000000000000000000000000001000000010000000180208100000000000058000000FFFEFF000000000000000000000000000100000001000000018046810000000002005F000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF7F0000 + + + 34050 + 0A0000000A0000006E0000006E000000 + 0000000000000000150300001A000000 + 8192 + 0 + 0 + 32767 + 0 + + + 1 + + + diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.wsdt b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.wsdt index fcb5558c..d84894ba 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.wsdt +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/settings/stm32f0.wsdt @@ -161,10 +161,10 @@ - 24 - 1863 + 21 + 1874 2 - + 0 -1 @@ -213,7 +213,7 @@ - 172 + 231 30 30 30 @@ -236,7 +236,7 @@ 1 1 1 - 000000000000 + 01000000030010860000010000000E810000010000004681000001000000 08000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000 @@ -245,7 +245,7 @@ 0 0A0000000A0000006E0000006E000000 - 00000000E903000080070000FE030000 + 00000000F00300008007000003040000 4096 0 0 @@ -271,8 +271,8 @@ 4294967295 - 0000000079030000800700002A040000 - 000000003803000080070000E9030000 + 00000000740300008007000025040000 + 000000003F03000080070000F0030000 4096 0 0 @@ -285,7 +285,7 @@ 34052 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 32768 0 0 @@ -308,7 +308,7 @@ 34048 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -321,7 +321,7 @@ 34056 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -335,7 +335,7 @@ 34057 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -349,7 +349,7 @@ 34058 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -363,7 +363,7 @@ 34059 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -377,7 +377,7 @@ 34062 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -461,7 +461,7 @@ 34063 00000000350000000601000096010000 - 00000000320000000601000034030000 + 0000000032000000400100003B030000 4096 0 0 @@ -472,7 +472,7 @@ 1 - 0000000010000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A010000340300000100000002000010040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF00000000340300008007000038030000010000000100001004000000010000000000000000000000FFFFFFFF07000000048500000085000008850000098500000A8500000B8500000E850000FFFF02000B004354616262656450616E6500800000010000000000000079030000800700002A040000000000003803000080070000E9030000000000004080005607000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 + 0000000010000000000000000010000001000000FFFFFFFFFFFFFFFF4001000032000000440100003B0300000100000002000010040000000100000091FFFFFF710600000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF000000003B030000800700003F030000010000000100001004000000010000000000000000000000FFFFFFFF07000000048500000085000008850000098500000A8500000B8500000E850000FFFF02000B004354616262656450616E65008000000100000000000000740300008007000025040000000000003F03000080070000F0030000000000004080005607000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 CMSIS-Pack @@ -529,7 +529,7 @@ - 01000000030000000100000000000000000000000100000001000000FFFFFFFF00000000010000000100000000000000280000002800000000000000 + 01000000030000000100000000000000000000000100000001000000FFFFFFFF00000000010000000100000000000000280000002800000001000000010000000000000001000000FFFEFF122400570053005F0044004900520024005C002E002E005C006D00610069006E002E00630001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF27013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00330033003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0033003200310035003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0033003200310035003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066D00610069006E002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000010000000200000044010000670000008007000070030000 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.dep b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.dep index 3da955dc..0abbd076 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.dep +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.dep @@ -1,889 +1,542 @@ 4 - 1035164316 + 2033696051 stm32f0 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h - $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h - $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h - $PROJ_DIR$\..\lib\CMSIS\Include\core_cm0.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f051x8.h - $PROJ_DIR$\..\obj\uart.__cstat.et + $PROJ_DIR$\..\..\..\..\Source\assert.c + $PROJ_DIR$\..\..\..\..\Source\boot.c + $PROJ_DIR$\..\..\..\..\Source\rs232.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\types.h + $PROJ_DIR$\..\..\..\..\Source\assert.h + $PROJ_DIR$\..\..\..\..\Source\cop.c + $PROJ_DIR$\..\..\..\..\Source\net.h + $PROJ_DIR$\..\..\..\..\Source\plausibility.h + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c + $PROJ_DIR$\..\..\..\..\Source\file.c + $PROJ_DIR$\..\..\..\..\Source\cop.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c + $PROJ_DIR$\..\..\..\..\Source\nvm.h + $PROJ_DIR$\..\..\..\..\Source\file.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\rs232.c + $PROJ_DIR$\..\..\..\..\Source\com.h + $PROJ_DIR$\..\..\..\..\Source\com.c + $PROJ_DIR$\..\..\..\..\Source\boot.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.h + $PROJ_DIR$\..\..\..\..\Source\net.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c + $PROJ_DIR$\..\..\..\..\Source\timer.h + $PROJ_DIR$\..\..\..\..\Source\usb.h + $PROJ_DIR$\..\..\..\..\Source\xcp.c + $PROJ_DIR$\..\..\..\..\Source\xcp.h + $PROJ_DIR$\..\..\..\..\Source\backdoor.h + $PROJ_DIR$\..\..\..\..\Source\can.h + $PROJ_DIR$\..\blt_conf.h + $PROJ_DIR$\..\..\..\..\Source\cpu.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_rcc.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_crs.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_bus.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_dma.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_exti.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_gpio.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_pwr.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_system.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_usart.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_tim_ex.h + $PROJ_DIR$\..\lib\system_stm32f0xx.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_utils.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_tim.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_cortex.h $PROJ_DIR$\..\obj\nvm.lst $PROJ_DIR$\..\stm32f0xx_it.h - $PROJ_DIR$\..\obj\boot.o - $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et - $PROJ_DIR$\..\obj\hooks.o - $PROJ_DIR$\..\obj\stm32f0xx_dac.o - $PROJ_DIR$\..\obj\assert.o - $PROJ_DIR$\..\obj\stm32f0xx_misc.pbi $PROJ_DIR$\..\obj\backdoor.lst - $PROJ_DIR$\..\obj\stm32f0_discovery.pbi - $PROJ_DIR$\..\obj\stm32f0xx_exti.o - $PROJ_DIR$\..\obj\led.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_gpio.pbi - $PROJ_DIR$\..\obj\stm32f0xx_rtc.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h - $PROJ_DIR$\..\obj\net.lst - $PROJ_DIR$\..\obj\flash.__cstat.et - $PROJ_DIR$\..\obj\flash.lst + $PROJ_DIR$\..\obj\boot.o $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_spi.h $PROJ_DIR$\..\obj\cpu_comp.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_spi.o - $PROJ_DIR$\..\obj\net.o - $PROJ_DIR$\..\obj\xcp.lst + $PROJ_DIR$\..\hooks.c $PROJ_DIR$\..\obj\file.__cstat.et $PROJ_DIR$\..\obj\file.lst - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_tim.h - $PROJ_DIR$\..\obj\boot.lst - $TOOLKIT_DIR$\inc\c\ctype.h - $PROJ_DIR$\..\obj\stm32f0xx_misc.o - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c - $PROJ_DIR$\..\obj\stm32f0xx_rtc.__cstat.et + $PROJ_DIR$\..\led.h + $PROJ_DIR$\..\obj\stm32f0xx_exti.o + $PROJ_DIR$\..\main.c + $PROJ_DIR$\..\obj\net.lst + $PROJ_DIR$\..\led.c + $PROJ_DIR$\..\flash_layout.c + $PROJ_DIR$\..\obj\stm32f0xx_misc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et + $PROJ_DIR$\..\startup_stm32f051x8.s + $PROJ_DIR$\..\obj\hooks.o + $PROJ_DIR$\..\obj\stm32f0xx_dac.o + $PROJ_DIR$\..\obj\led.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_gpio.pbi + $PROJ_DIR$\..\obj\uart.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_rtc.lst + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h + $PROJ_DIR$\..\obj\stm32f0xx_spi.o + $PROJ_DIR$\..\obj\net.o + $PROJ_DIR$\..\obj\assert.o + $PROJ_DIR$\..\obj\xcp.lst + $PROJ_DIR$\..\obj\flash.__cstat.et + $PROJ_DIR$\..\obj\stm32f0_discovery.pbi + $PROJ_DIR$\..\obj\flash.lst $PROJ_DIR$\..\src\hw\system_stm32f0xx.c - $PROJ_DIR$\..\bin\openblt_stm32f051.out - $PROJ_DIR$\..\obj\stm32f0xx_flash.lst - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o - $PROJ_DIR$\..\obj\stm32f0xx_tim.__cstat.et - $PROJ_DIR$\..\bin\openblt_stm32f051.srec - $PROJ_DIR$\..\obj\stm32f0xx_misc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_exti.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crc.o - $PROJ_DIR$\..\obj\assert.__cstat.et - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s - $TOOLKIT_DIR$\inc\c\stdint.h - $PROJ_DIR$\..\obj\backdoor.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_tim.o - $PROJ_DIR$\..\obj\cpu_comp.lst - $PROJ_DIR$\..\obj\cpu.__cstat.et $PROJ_DIR$\..\obj\uart.pbi $PROJ_DIR$\..\obj\stm32f0xx_can.pbi + $PROJ_DIR$\..\bin\openblt_stm32f051.srec + $PROJ_DIR$\..\obj\stm32f0xx_flash.lst + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_tim.h + $PROJ_DIR$\..\obj\stm32f0xx_misc.o + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s + $TOOLKIT_DIR$\inc\c\stdint.h + $PROJ_DIR$\..\obj\stm32f0xx_tim.o + $PROJ_DIR$\..\obj\cpu_comp.lst + $PROJ_DIR$\..\obj\stm32f0xx_rtc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o + $PROJ_DIR$\..\obj\cpu.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_exti.__cstat.et + $PROJ_DIR$\..\bin\openblt_stm32f051.out $PROJ_DIR$\..\obj\stm32f0xx_dac.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_it.pbi + $PROJ_DIR$\..\obj\stm32f0xx_misc.__cstat.et + $PROJ_DIR$\..\obj\assert.__cstat.et $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c + $PROJ_DIR$\..\obj\boot.lst + $PROJ_DIR$\..\obj\stm32f0xx_tim.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_crc.o + $PROJ_DIR$\..\obj\backdoor.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_it.pbi $PROJ_DIR$\..\obj\stm32f0xx_pwr.__cstat.et $PROJ_DIR$\..\src\hw\startup_stm32f0xx.s $PROJ_DIR$\..\obj\stm32f0xx_spi.__cstat.et $PROJ_DIR$\..\stm32f0xx_conf.h - $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dma.__cstat.et - $PROJ_DIR$\..\src\hw\system_stm32f0xx.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c - $PROJ_DIR$\..\..\..\..\Source\timer.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\types.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c - $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c - $PROJ_DIR$\..\..\..\..\Source\assert.c - $PROJ_DIR$\..\lib\system_stm32f0xx.c - $PROJ_DIR$\..\..\..\..\Source\boot.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c - $PROJ_DIR$\..\..\..\..\Source\cop.c - $PROJ_DIR$\..\..\..\..\Source\cpu.h - $PROJ_DIR$\..\..\..\..\Source\backdoor.h - $PROJ_DIR$\..\..\..\..\Source\com.h - $PROJ_DIR$\..\..\..\..\Source\net.c - $PROJ_DIR$\..\..\..\..\Source\net.h - $PROJ_DIR$\..\..\..\..\Source\boot.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c - $PROJ_DIR$\..\..\..\..\Source\assert.h - $PROJ_DIR$\..\..\..\..\Source\com.c - $PROJ_DIR$\..\..\..\..\Source\file.c - $PROJ_DIR$\..\..\..\..\Source\cop.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c - $PROJ_DIR$\..\..\..\..\Source\backdoor.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_usart.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_utils.h - $PROJ_DIR$\..\..\..\..\Source\can.h - $PROJ_DIR$\..\..\..\..\Source\file.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c - $PROJ_DIR$\..\..\..\..\Source\nvm.h - $PROJ_DIR$\..\..\..\..\Source\plausibility.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_pwr.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_dma.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_exti.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_bus.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_rcc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_system.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_gpio.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - $PROJ_DIR$\..\obj\xcp.__cstat.et - $PROJ_DIR$\..\obj\net.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_cec.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_rcc.o - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.lst - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.__cstat.et - $PROJ_DIR$\..\obj\com.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_flash.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et - $TOOLKIT_DIR$\inc\c\string.h - $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crc.lst - $PROJ_DIR$\..\obj\stm32f0xx_crs.__cstat.et - $TOOLKIT_DIR$\inc\c\DLib_Product_string.h - $PROJ_DIR$\..\obj\assert.lst - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.h - $PROJ_DIR$\..\obj\hooks.lst - $PROJ_DIR$\..\obj\file.o - $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et - $PROJ_DIR$\..\obj\main.o - $PROJ_DIR$\..\obj\cop.__cstat.et - $TOOLKIT_DIR$\inc\c\ysizet.h - $PROJ_DIR$\..\obj\boot.__cstat.et - $PROJ_DIR$\..\obj\nvm.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et - $PROJ_DIR$\..\obj\main.__cstat.et - $PROJ_DIR$\..\obj\timer.__cstat.et - $PROJ_DIR$\..\..\..\..\Source\xcp.c - $PROJ_DIR$\..\obj\cpu_comp.pbi - $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_i2c.lst - $PROJ_DIR$\..\system_stm32f0xx.c - $PROJ_DIR$\..\led.h - $PROJ_DIR$\..\..\..\..\Source\xcp.h - $PROJ_DIR$\..\obj\stm32f0xx_can.lst - $PROJ_DIR$\..\obj\cpu_comp.o - $PROJ_DIR$\..\obj\stm32f0xx_crs.pbi - $PROJ_DIR$\..\..\..\..\Source\uart.h - $PROJ_DIR$\..\startup_stm32f051x8.s - $PROJ_DIR$\..\blt_conf.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\types.h - $PROJ_DIR$\..\flash_layout.c - $PROJ_DIR$\..\led.c - $PROJ_DIR$\..\obj\openblt_stm32f051.map - $PROJ_DIR$\..\main.c - $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.h - $PROJ_DIR$\..\obj\stm32f0xx_comp.lst - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Include\system_stm32f0xx.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\uart.c - $PROJ_DIR$\..\..\..\..\Source\usb.h - $PROJ_DIR$\..\stm32f0xx_flash.icf - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c - $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c - $PROJ_DIR$\..\obj\cstart.o - $PROJ_DIR$\..\hooks.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmFunc.h - $PROJ_DIR$\..\obj\stm32f0xx_tim.pbi - $PROJ_DIR$\..\obj\xcp.o - $PROJ_DIR$\..\obj\stm32f0xx_spi.lst - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c - $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi - $PROJ_DIR$\..\obj\stm32f0xx_comp.o + $TOOLKIT_DIR$\inc\c\ctype.h + $PROJ_DIR$\..\obj\stm32f0xx_can.o $PROJ_DIR$\..\obj\stm32f0xx_wwdg.pbi - $PROJ_DIR$\..\obj\cpu.o - $PROJ_DIR$\..\obj\stm32f0xx_rcc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.lst - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi + $PROJ_DIR$\..\obj\cop.o $PROJ_DIR$\..\obj\com.o - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dma.h - $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c - $PROJ_DIR$\..\obj\stm32f0xx_pwr.lst + $PROJ_DIR$\..\obj\cpu.o $PROJ_DIR$\..\obj\stm32f0xx_usart.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_misc.h - $PROJ_DIR$\..\obj\stm32f0xx_cec.o - $PROJ_DIR$\..\obj\nvm.o $PROJ_DIR$\..\obj\stm32f0xx_wwdg.lst + $PROJ_DIR$\..\obj\stm32f0_discovery.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi + $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi + $PROJ_DIR$\..\obj\stm32f0xx_adc.o + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.lst + $PROJ_DIR$\..\obj\stm32f0xx_dma.lst + $PROJ_DIR$\..\obj\stm32f0xx_comp.o + $PROJ_DIR$\..\obj\stm32f0xx_cec.o $PROJ_DIR$\..\obj\system_stm32f0xx.o $PROJ_DIR$\..\obj\startup_stm32f0xx.o - $PROJ_DIR$\..\obj\stm32f0xx_adc.o + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi $PROJ_DIR$\..\obj\stm32f0xx_syscfg.lst - $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi + $PROJ_DIR$\..\obj\nvm.o $PROJ_DIR$\..\obj\stm32f0xx_tim.lst - $PROJ_DIR$\..\obj\backdoor.o - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmInstr.h - $PROJ_DIR$\..\obj\stm32f0_discovery.o $PROJ_DIR$\..\obj\stm32f0xx_gpio.o - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi - $PROJ_DIR$\..\obj\stm32f0xx_dma.lst + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmInstr.h $PROJ_DIR$\..\obj\stm32f0xx_dac.lst $PROJ_DIR$\..\obj\stm32f0xx_pwr.pbi - $PROJ_DIR$\..\obj\stm32f0xx_can.o - $PROJ_DIR$\..\obj\cop.o - $PROJ_DIR$\..\obj\stm32f0xx_usart.pbi - $PROJ_DIR$\..\obj\led.o - $PROJ_DIR$\..\obj\stm32f0xx_adc.lst - $PROJ_DIR$\..\obj\stm32f0xx_flash.o - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.pbi - $PROJ_DIR$\..\obj\timer.o - $TOOLKIT_DIR$\inc\c\xencoding_limits.h - $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cstart.s - $PROJ_DIR$\..\obj\stm32f0xx_dma.o - $PROJ_DIR$\..\obj\stm32f0xx_crs.o - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o - $PROJ_DIR$\..\lib\stm32f0xx_conf.h - $PROJ_DIR$\..\obj\stm32f0xx_spi.pbi - $PROJ_DIR$\..\bin\stm32f0.out - $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_dma.pbi - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_gpio.h + $PROJ_DIR$\..\obj\stm32f0xx_rcc.pbi + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_misc.h + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dma.h + $PROJ_DIR$\..\obj\stm32f0xx_pwr.lst + $PROJ_DIR$\..\obj\backdoor.o $TOOLKIT_DIR$\inc\c\cmsis_iar.h $PROJ_DIR$\..\obj\main.pbi + $PROJ_DIR$\..\obj\stm32f0xx_adc.lst $PROJ_DIR$\..\obj\stm32f0xx_crc.pbi $TOOLKIT_DIR$\inc\c\DLib_Threads.h $PROJ_DIR$\..\bin\IO_Toggle.out - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_iwdg.h - $PROJ_DIR$\..\obj\stm32f0xx_cec.lst - $TOOLKIT_DIR$\inc\c\yvals.h $PROJ_DIR$\..\lib\system_stm32f0xx.h + $PROJ_DIR$\..\obj\stm32f0xx_flash.o $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Include\stm32f0xx.h + $PROJ_DIR$\..\obj\led.o + $TOOLKIT_DIR$\inc\c\yvals.h $TOOLKIT_DIR$\inc\c\DLib_Defaults.h $PROJ_DIR$\..\obj\stm32f0xx_crs.lst $TOOLKIT_DIR$\inc\c\ycheck.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c - $PROJ_DIR$\..\obj\flash.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c - $TOOLKIT_DIR$\lib\shb_l.a - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c - $TOOLKIT_DIR$\inc\c\intrinsics.h - $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c - $PROJ_DIR$\..\obj\timer.pbi - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cpu_comp.c - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cm0.h - $PROJ_DIR$\..\obj\stm32f0xx_exti.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_syscfg.h - $PROJ_DIR$\..\stm32f0xx_it.c - $PROJ_DIR$\..\lib\stm32f0xx.h - $PROJ_DIR$\..\obj\hooks.__cstat.et - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h - $PROJ_DIR$\..\bin\stm32f0.srec - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - $PROJ_DIR$\..\cfg\stm32f0xx_flash.icf - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rcc.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + $PROJ_DIR$\..\obj\timer.o + $PROJ_DIR$\..\obj\stm32f0xx_cec.lst + $PROJ_DIR$\..\obj\stm32f0xx_crs.o + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.pbi + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_iwdg.h + $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi + $PROJ_DIR$\..\obj\stm32f0xx_dma.o + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o + $PROJ_DIR$\..\bin\stm32f0.out + $PROJ_DIR$\..\obj\stm32f0xx_usart.pbi + $PROJ_DIR$\..\obj\stm32f0xx_spi.pbi + $PROJ_DIR$\..\lib\stm32f0xx_conf.h + $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_dma.pbi + $TOOLKIT_DIR$\inc\c\xencoding_limits.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cstart.s + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_gpio.h $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.lst + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_cec.h $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_flash.h $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_cec.h - $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_exti.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h - $PROJ_DIR$\..\obj\stm32f0xx_ll_pwr.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.o $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.lst + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_exti.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_pwr.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.lst - $TOOLKIT_DIR$\inc\c\stdio.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dac.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o - $PROJ_DIR$\..\lib\cmsis\core_cm0.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.lst - $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.o - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - $PROJ_DIR$\..\obj\system_stm32f0xx.lst - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h - $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.lst - $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h + $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.lst + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\obj\timer.pbi + $PROJ_DIR$\..\obj\hooks.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + $PROJ_DIR$\..\bin\stm32f0.srec + $PROJ_DIR$\..\stm32f0xx_it.c + $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h + $PROJ_DIR$\..\lib\stm32f0xx.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c + $TOOLKIT_DIR$\inc\c\intrinsics.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_syscfg.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cpu_comp.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h + $PROJ_DIR$\..\obj\flash.o + $PROJ_DIR$\..\obj\stm32f0xx_exti.lst + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.lst + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h + $PROJ_DIR$\..\cfg\stm32f0xx_flash.icf + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rcc.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cm0.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + $TOOLKIT_DIR$\lib\shb_l.a $PROJ_DIR$\..\obj\stm32f0xx_misc.lst $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.o $PROJ_DIR$\..\obj\stm32f0xx_hal.lst $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_can.h $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crs.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_adc.h - $PROJ_DIR$\..\startup_stm32f0xx.s - $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.lst - $PROJ_DIR$\..\obj\stm32f0xx_it.o - $PROJ_DIR$\..\obj\stm32f0xx_pwr.o - $PROJ_DIR$\..\obj\stm32f0xx_hal.xcl - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_rcc.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.xcl - $PROJ_DIR$\..\obj\uart.o - $PROJ_DIR$\..\obj\main.xcl - $PROJ_DIR$\..\obj\com.lst - $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi - $TOOLKIT_DIR$\inc\c\DLib_Product.h - $PROJ_DIR$\..\obj\led.lst - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.lst + $TOOLKIT_DIR$\inc\c\stdio.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dac.h + $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.__cstat.et + $PROJ_DIR$\..\lib\cmsis\core_cm0.h + $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.o + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.lst + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c + $PROJ_DIR$\..\obj\system_stm32f0xx.lst + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h + $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.lst + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.o + $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h $PROJ_DIR$\..\obj\stm32f0xx_cec.pbi $PROJ_DIR$\..\obj\stm32f0xx_i2c.o - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_pwr.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.xcl - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_rtc.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c - $TOOLKIT_DIR$\lib\rt6M_tl.a - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl - $PROJ_DIR$\..\obj\led.xcl + $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal.xcl + $TOOLKIT_DIR$\inc\c\DLib_Product.h + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.o $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_i2c.h $PROJ_DIR$\..\obj\hooks.xcl - $PROJ_DIR$\..\obj\stm32f0xx_rtc.o $PROJ_DIR$\..\obj\flash_layout.o + $PROJ_DIR$\..\obj\stm32f0xx_it.o + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_pwr.h + $PROJ_DIR$\..\obj\stm32f0xx_pwr.o + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_rcc.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl + $PROJ_DIR$\..\obj\led.xcl + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\obj\uart.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.xcl $PROJ_DIR$\..\obj\flash_layout.pbi + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.xcl $PROJ_DIR$\..\obj\stm32f0xx_adc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_rtc.o + $TOOLKIT_DIR$\lib\rt6M_tl.a $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_syscfg.h + $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_rtc.h + $PROJ_DIR$\..\obj\led.lst $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_cec.h - $PROJ_DIR$\..\obj\flash.pbi - $PROJ_DIR$\..\obj\stm32f0xx_usart.o - $PROJ_DIR$\..\obj\timer.lst - $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.o + $PROJ_DIR$\..\obj\com.lst + $PROJ_DIR$\..\obj\main.xcl + $PROJ_DIR$\..\startup_stm32f0xx.s $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal.o - $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.o $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.o - $PROJ_DIR$\..\obj\cpu.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl - $PROJ_DIR$\..\obj\startup_stm32f051x8.o - $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.lst + $PROJ_DIR$\..\obj\stm32f0xx_usart.o $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.o + $PROJ_DIR$\..\obj\startup_stm32f051x8.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.o $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et + $PROJ_DIR$\..\obj\timer.lst + $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.o + $PROJ_DIR$\..\obj\cpu.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.lst + $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.__cstat.et $PROJ_DIR$\..\obj\net.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_ll_pwr.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.o - $PROJ_DIR$\..\obj\assert.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.lst - $PROJ_DIR$\..\obj\uart.lst - $PROJ_DIR$\..\src\app\main.c - $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.xcl - $PROJ_DIR$\..\obj\cpu_comp.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.xcl - $PROJ_DIR$\..\obj\nvm.xcl - $PROJ_DIR$\..\obj\stm32f0.pbd - $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.xcl - $PROJ_DIR$\..\obj\uart.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o + $PROJ_DIR$\..\obj\flash.pbi $PROJ_DIR$\..\obj\stm32f0xx_ll_pwr.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl $PROJ_DIR$\..\obj\backdoor.xcl - $PROJ_DIR$\..\obj\boot.xcl - $PROJ_DIR$\..\obj\flash.xcl + $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.xcl $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.xcl - $PROJ_DIR$\..\obj\cop.xcl $PROJ_DIR$\..\obj\file.xcl $PROJ_DIR$\..\obj\system_stm32f0xx.xcl - $PROJ_DIR$\..\obj\timer.xcl - $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.xcl - $PROJ_DIR$\..\obj\xcp.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.lst $PROJ_DIR$\..\obj\com.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.xcl + $PROJ_DIR$\..\obj\uart.xcl + $PROJ_DIR$\..\obj\cpu_comp.xcl $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_crc.h $PROJ_DIR$\..\obj\cop.lst - $TOOLKIT_DIR$\lib\dl6M_tln.a - $TOOLKIT_DIR$\lib\m6M_tl.a - $PROJ_DIR$\..\obj\stm32f0xx_it.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.xcl + $PROJ_DIR$\..\obj\cop.xcl + $PROJ_DIR$\..\obj\uart.lst + $PROJ_DIR$\..\obj\assert.xcl + $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.xcl + $PROJ_DIR$\..\obj\boot.xcl + $PROJ_DIR$\..\src\app\main.c + $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.xcl + $PROJ_DIR$\..\obj\timer.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.xcl + $PROJ_DIR$\..\obj\xcp.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.xcl + $PROJ_DIR$\..\obj\stm32f0.pbd + $PROJ_DIR$\..\obj\nvm.xcl + $PROJ_DIR$\..\obj\flash.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.xcl $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_wwdg.h - $PROJ_DIR$\..\obj\main.lst - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_exti.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_usart.h + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dma.h $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dac.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_adc.h - $PROJ_DIR$\..\obj\nvm.pbi - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_misc.h - $PROJ_DIR$\..\obj\stm32f0xx_rcc.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.lst $PROJ_DIR$\..\obj\stm32f0xx_ll_pwr.o - $PROJ_DIR$\..\obj\system_stm32f0xx.pbi - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_comp.h + $PROJ_DIR$\..\obj\cpu.pbi + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_adc.h + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.o $PROJ_DIR$\..\obj\stm32f0xx_gpio.lst - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dma.h + $PROJ_DIR$\..\obj\stm32f0_discovery.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.lst + $TOOLKIT_DIR$\lib\dl6M_tln.a + $TOOLKIT_DIR$\inc\c\iccarm_builtin.h + $PROJ_DIR$\..\obj\system_stm32f0xx.pbi + $PROJ_DIR$\..\obj\main.lst + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_exti.h + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_flash.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.lst + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_comp.h + $PROJ_DIR$\..\obj\stm32f0xx_rcc.lst + $TOOLKIT_DIR$\lib\m6M_tl.a + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_usart.h + $PROJ_DIR$\..\obj\nvm.pbi + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_misc.h $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dbgmcu.h + $PROJ_DIR$\..\obj\stm32f0xx_it.lst $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\memory.x $PROJ_DIR$\..\obj\cpu.lst - $PROJ_DIR$\..\obj\stm32f0_discovery.lst - $PROJ_DIR$\..\obj\cpu.pbi - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_flash.h $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.lst - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o - $TOOLKIT_DIR$\inc\c\iccarm_builtin.h $TOOLKIT_DIR$\inc\c\iar_intrinsics_common.h $PROJ_DIR$\..\obj\rs232.xcl $PROJ_DIR$\..\obj\rs232.o $PROJ_DIR$\..\obj\rs232.__cstat.et - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\rs232.c - $PROJ_DIR$\..\..\..\..\Source\rs232.h $PROJ_DIR$\..\obj\rs232.lst + $PROJ_DIR$\..\lib\CMSIS\Include\core_cm0.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c_ex.h + $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f051x8.h + $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + $PROJ_DIR$\..\obj\hooks.lst + $PROJ_DIR$\..\obj\xcp.__cstat.et + $PROJ_DIR$\..\obj\assert.lst + $TOOLKIT_DIR$\inc\c\DLib_Product_string.h + $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_cec.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.__cstat.et + $TOOLKIT_DIR$\inc\c\string.h + $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et + $TOOLKIT_DIR$\inc\c\ysizet.h + $PROJ_DIR$\..\obj\net.__cstat.et + $PROJ_DIR$\..\src\hw\system_stm32f0xx.h + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.lst + $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dma.__cstat.et + $PROJ_DIR$\..\obj\com.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_rcc.o + $PROJ_DIR$\..\obj\stm32f0xx_flash.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.h + $PROJ_DIR$\..\obj\main.o + $PROJ_DIR$\..\obj\cop.__cstat.et + $PROJ_DIR$\..\obj\boot.__cstat.et + $PROJ_DIR$\..\obj\nvm.__cstat.et + $PROJ_DIR$\..\obj\file.o + $PROJ_DIR$\..\obj\stm32f0xx_crc.lst + $PROJ_DIR$\..\obj\stm32f0xx_crs.__cstat.et + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmFunc.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\uart.c + $PROJ_DIR$\..\obj\timer.__cstat.et + $PROJ_DIR$\..\system_stm32f0xx.c + $PROJ_DIR$\..\obj\stm32f0xx_tim.pbi + $PROJ_DIR$\..\obj\main.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_i2c.lst + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\types.h + $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Include\system_stm32f0xx.h + $PROJ_DIR$\..\obj\xcp.o + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_can.lst + $PROJ_DIR$\..\obj\cpu_comp.o + $PROJ_DIR$\..\obj\stm32f0xx_crs.pbi + $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.h + $PROJ_DIR$\..\obj\stm32f0xx_comp.lst + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c + $PROJ_DIR$\..\obj\cpu_comp.pbi + $PROJ_DIR$\..\obj\cstart.o + $PROJ_DIR$\..\obj\stm32f0xx_spi.lst + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et + $PROJ_DIR$\..\obj\openblt_stm32f051.map + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c + $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi + $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et + $PROJ_DIR$\..\stm32f0xx_flash.icf [ROOT_NODE] ILINK - 53 188 + 111 496 - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c - - - ICCARM - 411 403 - - - __cstat - 343 - - - BICOMP - 373 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c - - - ICCARM - 339 427 - - - __cstat - 331 - - - BICOMP - 388 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c - - - ICCARM - 363 408 - - - __cstat - 338 - - - BICOMP - 371 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c - - - ICCARM - 330 353 - - - __cstat - 404 - - - BICOMP - 446 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c - - - ICCARM - 488 407 - - - __cstat - 323 - - - BICOMP - 384 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c - - - ICCARM - 420 405 - - - __cstat - 329 - - - BICOMP - 415 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c - - - ICCARM - 432 374 - - - BICOMP - 68 - - - - - ICCARM - 97 185 99 184 112 92 102 111 82 93 109 94 178 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\src\hw\system_stm32f0xx.c - - - ICCARM - 356 225 - - - BICOMP - 476 - - - - - ICCARM - 288 350 63 271 266 269 280 378 247 262 360 259 279 352 79 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - BICOMP - 288 350 63 271 266 269 280 378 247 262 360 259 279 352 79 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\bin\openblt_stm32f051.out - - - ILINK - 188 - - - OBJCOPY - 57 - - - - - ILINK - 196 27 231 23 215 240 211 180 158 275 25 242 163 42 223 493 416 408 407 403 427 405 353 349 429 402 341 406 412 346 421 410 362 327 475 335 478 487 225 246 204 277 387 463 462 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s - - - AARM - 199 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c - - - ICCARM - 361 49 - - - BICOMP - 28 - - - - - ICCARM - 472 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 - - - BICOMP - 472 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 - - - - - $PROJ_DIR$\..\src\hw\startup_stm32f0xx.s - - - AARM - 226 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c - - - ICCARM - 38 275 - - - BICOMP - 398 - - - - - ICCARM - 97 185 99 184 112 92 102 111 82 93 109 94 178 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c - - - ICCARM - 400 246 - - - __cstat - 171 - - - BICOMP - 454 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c - - - ICCARM - 483 211 - - - __cstat - 67 - - - BICOMP - 413 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 124 129 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c - - - ICCARM - 38 275 - - - __cstat - 37 - - - BICOMP - 449 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 186 - - - $PROJ_DIR$\..\..\..\..\Source\assert.c ICCARM - 155 27 + 442 90 __cstat - 61 + 114 BICOMP - 430 + 365 ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 - - - - - $PROJ_DIR$\..\lib\system_stm32f0xx.c - - - ICCARM - 356 225 - - - __cstat - 174 - - - BICOMP - 453 - - - - - ICCARM - 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 + 19 3 4 30 7 31 11 13 24 28 14 17 27 @@ -892,44 +545,21 @@ ICCARM - 47 23 + 116 66 __cstat - 166 + 466 BICOMP - 448 + 367 ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c - - - ICCARM - 314 478 - - - __cstat - 409 - - - BICOMP - 434 - - - - - ICCARM - 105 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 128 124 + 19 3 4 30 7 31 11 13 24 28 14 17 27 @@ -938,136 +568,21 @@ ICCARM - 461 240 + 361 128 __cstat - 164 + 465 BICOMP - 451 + 363 ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 - - - - - $PROJ_DIR$\..\..\..\..\Source\net.c - - - ICCARM - 36 42 - - - __cstat - 141 - - - BICOMP - 424 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c - - - ICCARM - 359 487 - - - __cstat - 401 - - - BICOMP - 455 - - - - - ICCARM - 128 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 107 129 - - - - - $PROJ_DIR$\..\..\..\..\Source\com.c - - - ICCARM - 376 215 - - - __cstat - 147 - - - BICOMP - 457 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 496 - - - - - $PROJ_DIR$\..\..\..\..\Source\file.c - - - ICCARM - 45 158 - - - __cstat - 44 - - - BICOMP - 452 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 150 271 266 269 280 378 165 154 48 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c - - - ICCARM - 66 180 - - - __cstat - 40 - - - BICOMP - 435 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 279 490 266 269 280 378 491 + 19 3 4 30 7 31 11 13 24 28 14 17 27 @@ -1076,976 +591,80 @@ ICCARM - 29 231 + 65 157 __cstat - 64 + 119 BICOMP - 447 + 350 ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 + 19 3 4 30 7 31 11 13 24 28 14 17 27 - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c ICCARM - 21 223 + 106 487 __cstat - 167 + 68 BICOMP - 437 + 359 ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 106 + 19 3 4 30 7 31 11 13 24 28 14 17 27 232 391 168 169 227 288 408 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + $PROJ_DIR$\..\..\..\..\Source\file.c ICCARM - 312 349 + 71 468 __cstat - 325 + 70 BICOMP - 426 + 353 ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 + 19 3 4 30 7 31 11 13 24 28 14 17 27 448 171 168 169 227 288 450 443 125 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c ICCARM - 320 475 + 94 238 __cstat - 428 - - - BICOMP - 445 - - - - - ICCARM - 115 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 124 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - - - ICCARM - 431 402 - - - __cstat - 414 - - - BICOMP - 459 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - - - ICCARM - 294 412 - - - __cstat - 337 - - - BICOMP - 436 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - - - ICCARM - 351 346 - - - __cstat - 334 - - - BICOMP - 425 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c - - - ICCARM - 417 335 - - - __cstat - 333 - - - BICOMP - 441 - - - - - ICCARM - 128 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c - - - ICCARM - 418 429 - - - __cstat - 342 - - - BICOMP - 444 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c - - - ICCARM - 368 410 - - - __cstat - 419 - - - BICOMP - 439 - - - - - ICCARM - 120 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 124 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c - - - ICCARM - 336 421 - - - __cstat - 321 - - - BICOMP - 440 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c - - - ICCARM - 332 362 - - - __cstat - 328 - - - BICOMP - 450 - - - - - ICCARM - 121 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c - - - ICCARM - 322 327 - - - __cstat - 326 - - - BICOMP - 422 - - - - - ICCARM - 136 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 124 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - - - ICCARM - 474 341 - - - __cstat - 324 - - - BICOMP - 443 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - - - ICCARM - 344 406 - - - __cstat - 423 - - - BICOMP - 458 - - - - - ICCARM - 0 85 130 5 3 19 16 63 271 266 269 280 378 7 259 490 4 8 340 165 127 15 131 6 9 1 11 12 126 116 137 125 - - - - - $PROJ_DIR$\..\..\..\..\Source\xcp.c - - - ICCARM - 43 204 - - - __cstat - 140 - - - BICOMP - 456 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 - - - - - $PROJ_DIR$\..\system_stm32f0xx.c - - - ICCARM - 356 225 - - - BICOMP - 476 - - - - - ICCARM - 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 472 - - - BICOMP - 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 472 - - - - - $PROJ_DIR$\..\startup_stm32f051x8.s - - - AARM - 416 - - - - - $PROJ_DIR$\..\flash_layout.c - - - ICCARM - 393 - - - BICOMP - 394 - - - - - $PROJ_DIR$\..\led.c - - - ICCARM - 379 242 - - - __cstat - 32 - - - BICOMP - 389 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 177 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 136 - - - - - $PROJ_DIR$\..\main.c - - - ICCARM - 466 163 - - - __cstat - 170 - - - BICOMP - 375 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 128 124 129 107 105 136 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c - - - ICCARM - 21 223 - - - BICOMP - 471 - - - - - ICCARM - 97 185 99 184 112 92 102 111 82 93 109 94 178 156 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\uart.c - - - ICCARM - 432 374 - - - __cstat - 20 - - - BICOMP - 442 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 105 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c - - - ICCARM - 400 246 - - - BICOMP - 282 - - - - - ICCARM - 97 185 99 184 112 92 102 111 82 93 109 94 178 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c - - - ICCARM - 484 233 - - - BICOMP - 30 - - - - - ICCARM - 190 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 472 - - - BICOMP - 190 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 472 - - - - - $PROJ_DIR$\..\hooks.c - - - ICCARM - 157 25 - - - __cstat - 289 - - - BICOMP - 391 - - - - - ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 177 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 136 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c - - - ICCARM - 483 211 - - - BICOMP - 485 - - - - - ICCARM - 97 185 99 184 112 92 102 111 82 93 109 94 178 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - - - ICCARM - 219 370 - - - __cstat - 73 - - - BICOMP - 238 - - - - - ICCARM - 295 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c - - - ICCARM - 175 382 - - - __cstat - 149 - - - BICOMP - 208 - - - - - ICCARM - 35 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c - - - ICCARM - 213 380 - - - __cstat - 162 - - - BICOMP - 214 - - - - - ICCARM - 291 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cstart.s - - - AARM - 199 - - - - - $PROJ_DIR$\..\bin\stm32f0.out - - - OBJCOPY - 296 - - - - - ILINK - 482 27 231 23 215 240 211 199 275 25 242 163 223 227 239 222 209 60 251 26 252 250 31 244 234 382 380 49 370 144 392 41 489 65 399 55 225 246 374 204 277 387 463 462 - - - - - $PROJ_DIR$\..\bin\IO_Toggle.out - - - OBJCOPY - 296 - - - - - ILINK - 301 163 226 233 234 369 49 144 225 277 387 463 462 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - - - ICCARM - 152 60 - - - __cstat - 161 - - - BICOMP - 261 - - - - - ICCARM - 358 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - - - ICCARM - 220 399 - - - __cstat - 77 - - - BICOMP - 241 - - - - - ICCARM - 292 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c - - - ICCARM - 205 41 - - - __cstat - 75 - - - BICOMP - 254 - - - - - ICCARM - 310 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c - - - ICCARM - 361 49 - - - __cstat - 58 - - - BICOMP - 28 - - - - - ICCARM - 221 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c - - - ICCARM - 479 234 - - - __cstat - 151 - - - BICOMP - 33 - - - - - ICCARM - 319 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c - - - ICCARM - 224 55 - - - __cstat - 169 - - - BICOMP - 210 - - - - - ICCARM - 318 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 221 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cpu_comp.c - - - ICCARM - 66 180 - - - BICOMP - 173 - - - - - ICCARM - 97 185 99 184 112 92 102 111 82 93 109 94 178 279 271 - - - - - $PROJ_DIR$\..\stm32f0xx_it.c - - - ICCARM - 464 369 - - - BICOMP - 71 - - - - - ICCARM - 22 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 472 - - - BICOMP - 22 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 372 385 39 46 468 465 472 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c - - - ICCARM - 285 31 - - - __cstat - 59 - - - BICOMP - 248 - - - - - ICCARM - 315 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c - - - ICCARM - 230 65 - - - __cstat - 56 - - - BICOMP - 203 - - - - - ICCARM - 298 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - - - ICCARM - 270 251 - - - __cstat - 153 - - - BICOMP - 181 - - - - - ICCARM - 365 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - - - ICCARM - 473 144 - - - __cstat - 160 - - - BICOMP - 212 - - - - - ICCARM - 302 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c - - - ICCARM - 191 209 - - - __cstat - 143 + 92 BICOMP @@ -2055,301 +674,30 @@ ICCARM - 348 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 + 19 3 4 30 7 31 11 13 24 28 14 17 27 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 77 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c ICCARM - 243 227 + 406 130 __cstat - 24 + 109 BICOMP - 395 + 335 ICCARM - 366 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c - - - ICCARM - 54 244 - - - __cstat - 148 - - - BICOMP - 217 - - - - - ICCARM - 306 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - - - ICCARM - 228 489 - - - __cstat - 146 - - - BICOMP - 235 - - - - - ICCARM - 286 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c - - - ICCARM - 236 250 - - - __cstat - 78 - - - BICOMP - 257 - - - - - ICCARM - 216 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c - - - ICCARM - 34 392 - - - __cstat - 51 - - - BICOMP - 256 - - - - - ICCARM - 290 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - - - ICCARM - 145 252 - - - __cstat - 168 - - - BICOMP - 245 - - - - - ICCARM - 347 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 345 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c - - - ICCARM - 265 222 - - - __cstat - 142 - - - BICOMP - 381 - - - - - ICCARM - 313 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - - - ICCARM - 237 26 - - - __cstat - 70 - - - BICOMP - 229 - - - - - ICCARM - 345 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 364 313 358 365 348 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s - - - AARM - 226 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - - - ICCARM - 179 239 - - - __cstat - 159 - - - BICOMP - 69 - - - - - ICCARM - 364 288 350 63 271 266 269 280 378 247 262 360 259 279 352 267 253 366 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c - - - ICCARM - 473 144 - - - BICOMP - 212 - - - - - ICCARM - 372 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 385 39 46 468 465 472 - - - BICOMP - 372 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 258 396 390 264 383 385 39 46 468 465 472 - - - - - $PROJ_DIR$\..\startup_stm32f0xx.s - - - AARM - 226 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c - - - ICCARM - 479 234 - - - BICOMP - 33 - - - - - ICCARM - 258 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 396 390 264 383 372 385 39 46 468 465 472 - - - BICOMP - 258 268 284 63 271 266 269 280 378 247 262 232 259 279 202 192 76 470 397 460 477 469 481 480 467 486 396 390 264 383 372 385 39 46 468 465 472 - - - - - $PROJ_DIR$\..\src\app\main.c - - - ICCARM - 466 163 - - - BICOMP - 260 - - - - - ICCARM - 253 366 288 350 63 271 266 269 280 378 247 262 360 259 279 352 79 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 - - - BICOMP - 253 366 288 350 63 271 266 269 280 378 247 262 360 259 279 352 79 364 313 358 365 348 345 347 216 315 306 319 286 35 291 295 302 290 310 298 292 318 221 + 19 3 4 30 7 31 11 13 24 28 14 17 27 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 41 49 @@ -2358,11 +706,1067 @@ ICCARM - 497 493 + 412 410 __cstat - 494 + 411 + + + BICOMP + 409 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 50 + + + + + $PROJ_DIR$\..\..\..\..\Source\com.c + + + ICCARM + 312 129 + + + __cstat + 457 + + + BICOMP + 356 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 2 + + + + + $PROJ_DIR$\..\..\..\..\Source\net.c + + + ICCARM + 75 89 + + + __cstat + 451 + + + BICOMP + 338 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c + + + ICCARM + 63 146 + + + __cstat + 467 + + + BICOMP + 376 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 20 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c + + + ICCARM + 331 172 + + + __cstat + 475 + + + BICOMP + 370 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\..\..\..\Source\xcp.c + + + ICCARM + 91 483 + + + __cstat + 441 + + + BICOMP + 373 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c + + + ICCARM + 217 386 + + + __cstat + 337 + + + BICOMP + 369 + + + + + ICCARM + 50 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 32 41 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + + + ICCARM + 259 315 + + + __cstat + 327 + + + BICOMP + 374 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + + + ICCARM + 244 321 + + + __cstat + 271 + + + BICOMP + 378 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + + + ICCARM + 275 326 + + + __cstat + 191 + + + BICOMP + 371 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + + + ICCARM + 286 324 + + + __cstat + 318 + + + BICOMP + 366 + + + + + ICCARM + 43 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 41 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c + + + ICCARM + 215 382 + + + __cstat + 343 + + + BICOMP + 347 + + + + + ICCARM + 47 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 41 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + + + ICCARM + 333 273 + + + __cstat + 214 + + + BICOMP + 351 + + + + + ICCARM + 32 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + + + ICCARM + 280 407 + + + __cstat + 332 + + + BICOMP + 372 + + + + + ICCARM + 32 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 59 49 + + + + + $PROJ_DIR$\..\lib\system_stm32f0xx.c + + + ICCARM + 277 142 + + + __cstat + 500 + + + BICOMP + 354 + + + + + ICCARM + 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c + + + ICCARM + 267 263 + + + __cstat + 216 + + + BICOMP + 340 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + + + ICCARM + 396 268 + + + __cstat + 199 + + + BICOMP + 349 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + + + ICCARM + 211 253 + + + __cstat + 203 + + + BICOMP + 352 + + + + + ICCARM + 44 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + + + ICCARM + 192 202 + + + __cstat + 201 + + + BICOMP + 328 + + + + + ICCARM + 45 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 41 + + + + + $PROJ_DIR$\..\hooks.c + + + ICCARM + 440 81 + + + __cstat + 223 + + + BICOMP + 291 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 72 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 45 + + + + + $PROJ_DIR$\..\main.c + + + ICCARM + 393 464 + + + __cstat + 478 + + + BICOMP + 313 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 32 41 49 59 50 45 + + + + + $PROJ_DIR$\..\led.c + + + ICCARM + 310 167 + + + __cstat + 83 + + + BICOMP + 298 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 72 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 45 + + + + + $PROJ_DIR$\..\flash_layout.c + + + ICCARM + 292 + + + BICOMP + 302 + + + + + $PROJ_DIR$\..\startup_stm32f051x8.s + + + AARM + 322 + + + + + $PROJ_DIR$\..\src\hw\system_stm32f0xx.c + + + ICCARM + 277 142 + + + BICOMP + 392 + + + + + ICCARM + 228 272 104 171 168 169 227 288 186 162 283 158 232 270 452 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + BICOMP + 228 272 104 171 168 169 227 288 186 162 283 158 232 270 452 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c + + + ICCARM + 364 300 + + + BICOMP + 96 + + + + + ICCARM + 19 480 4 30 7 31 11 13 24 28 14 17 27 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s + + + AARM + 493 + + + + + $PROJ_DIR$\..\bin\openblt_stm32f051.out + + + ILINK + 496 + + + OBJCOPY + 98 + + + + + ILINK + 501 90 157 66 129 128 130 487 468 238 81 167 464 89 146 410 322 329 319 345 341 323 282 266 344 334 268 315 321 263 326 324 253 202 273 386 407 142 172 483 251 306 399 390 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c + + + ICCARM + 252 101 + + + BICOMP + 78 + + + + + ICCARM + 402 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 + + + BICOMP + 402 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 + + + + + $PROJ_DIR$\..\src\hw\startup_stm32f0xx.s + + + AARM + 143 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + + + ICCARM + 138 289 + + + __cstat + 455 + + + BICOMP + 144 + + + + + ICCARM + 237 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\bin\IO_Toggle.out + + + OBJCOPY + 225 + + + + + ILINK + 246 464 143 133 148 293 101 459 142 251 306 399 390 + + + + + $PROJ_DIR$\..\bin\stm32f0.out + + + OBJCOPY + 225 + + + + + ILINK + 405 90 157 66 129 128 130 493 238 81 167 464 146 137 126 141 140 118 174 82 179 178 73 165 148 285 289 101 295 459 305 88 385 105 317 108 142 172 300 483 251 306 399 390 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cstart.s + + + AARM + 493 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c + + + ICCARM + 160 137 + + + __cstat + 79 + + + BICOMP + 304 + + + + + ICCARM + 258 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c + + + ICCARM + 99 165 + + + __cstat + 460 + + + BICOMP + 136 + + + + + ICCARM + 196 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c + + + ICCARM + 145 385 + + + __cstat + 447 + + + BICOMP + 154 + + + + + ICCARM + 234 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c + + + ICCARM + 86 305 + + + __cstat + 107 + + + BICOMP + 184 + + + + + ICCARM + 235 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c + + + ICCARM + 139 178 + + + __cstat + 456 + + + BICOMP + 185 + + + + + ICCARM + 155 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c + + + ICCARM + 453 179 + + + __cstat + 485 + + + BICOMP + 175 + + + + + ICCARM + 281 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c + + + ICCARM + 150 82 + + + __cstat + 112 + + + BICOMP + 135 + + + + + ICCARM + 269 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + + + ICCARM + 490 140 + + + __cstat + 462 + + + BICOMP + 308 + + + + + ICCARM + 257 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + + + ICCARM + 173 141 + + + __cstat + 446 + + + BICOMP + 284 + + + + + ICCARM + 194 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + + + ICCARM + 387 148 + + + __cstat + 461 + + + BICOMP + 84 + + + + + ICCARM + 190 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + + + ICCARM + 239 73 + + + __cstat + 110 + + + BICOMP + 177 + + + + + ICCARM + 212 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\stm32f0xx_it.c + + + ICCARM + 404 293 + + + BICOMP + 120 + + + + + ICCARM + 64 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 402 + + + BICOMP + 64 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 402 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + + + ICCARM + 132 108 + + + __cstat + 495 + + + BICOMP + 127 + + + + + ICCARM + 213 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + + + ICCARM + 469 118 + + + __cstat + 458 + + + BICOMP + 161 + + + + + ICCARM + 279 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c + + + ICCARM + 131 317 + + + __cstat + 454 + + + BICOMP + 181 + + + + + ICCARM + 241 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c + + + ICCARM + 494 88 + + + __cstat + 123 + + + BICOMP + 182 + + + + + ICCARM + 219 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cpu_comp.c + + + ICCARM + 106 487 BICOMP @@ -2372,7 +1776,607 @@ ICCARM - 97 83 99 184 112 92 102 111 82 93 109 94 178 3 19 16 63 271 266 269 280 378 7 259 490 4 8 0 85 130 5 340 165 127 15 131 6 9 1 11 12 126 116 137 125 105 + 19 480 4 30 7 31 11 13 24 28 14 17 27 232 171 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + + + ICCARM + 252 101 + + + __cstat + 113 + + + BICOMP + 78 + + + + + ICCARM + 153 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c + + + ICCARM + 170 174 + + + __cstat + 470 + + + BICOMP + 488 + + + + + ICCARM + 256 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + + + ICCARM + 147 105 + + + __cstat + 117 + + + BICOMP + 477 + + + + + ICCARM + 242 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + + + ICCARM + 398 459 + + + __cstat + 449 + + + BICOMP + 152 + + + + + ICCARM + 247 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s + + + AARM + 143 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c + + + ICCARM + 486 126 + + + __cstat + 444 + + + BICOMP + 97 + + + + + ICCARM + 255 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c + + + ICCARM + 398 459 + + + BICOMP + 152 + + + + + ICCARM + 296 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 309 67 100 400 379 402 + + + BICOMP + 296 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 309 67 100 400 379 402 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c + + + ICCARM + 387 148 + + + BICOMP + 84 + + + + + ICCARM + 188 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 307 290 176 294 296 309 67 100 400 379 402 + + + BICOMP + 188 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 307 290 176 294 296 309 67 100 400 379 402 + + + + + $PROJ_DIR$\..\startup_stm32f0xx.s + + + AARM + 143 + + + + + $PROJ_DIR$\..\src\app\main.c + + + ICCARM + 393 464 + + + BICOMP + 159 + + + + + ICCARM + 183 258 228 272 104 171 168 169 227 288 186 162 283 158 232 270 452 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + BICOMP + 183 258 228 272 104 171 168 169 227 288 186 162 283 158 232 270 452 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + + + ICCARM + 209 282 + + + __cstat + 330 + + + BICOMP + 348 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c + + + ICCARM + 336 344 + + + __cstat + 261 + + + BICOMP + 362 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + + + ICCARM + 316 345 + + + __cstat + 262 + + + BICOMP + 301 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + + + ICCARM + 355 334 + + + __cstat + 342 + + + BICOMP + 357 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + + + ICCARM + 193 266 + + + __cstat + 200 + + + BICOMP + 339 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + + + ICCARM + 389 319 + + + __cstat + 208 + + + BICOMP + 303 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + + + ICCARM + 254 329 + + + __cstat + 260 + + + BICOMP + 287 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c + + + ICCARM + 264 341 + + + __cstat + 210 + + + BICOMP + 297 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + + + ICCARM + 325 323 + + + __cstat + 206 + + + BICOMP + 320 + + + + + ICCARM + 424 52 55 418 434 432 413 104 171 168 169 227 288 433 158 391 423 437 265 450 39 427 426 429 421 420 438 414 416 422 37 36 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c + + + ICCARM + 94 238 + + + BICOMP + 346 + + + + + ICCARM + 19 480 4 30 7 31 11 13 24 28 14 17 27 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c + + + ICCARM + 406 130 + + + BICOMP + 383 + + + + + ICCARM + 19 480 4 30 7 31 11 13 24 28 14 17 27 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\uart.c + + + ICCARM + 364 300 + + + __cstat + 85 + + + BICOMP + 358 + + + + + ICCARM + 19 3 4 30 7 31 11 13 24 28 14 17 27 434 432 413 104 171 168 169 227 288 433 158 391 423 437 424 52 55 418 265 450 39 427 426 429 421 420 438 414 416 422 37 36 50 + + + + + $PROJ_DIR$\..\system_stm32f0xx.c + + + ICCARM + 277 142 + + + BICOMP + 392 + + + + + ICCARM + 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 402 + + + BICOMP + 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 402 + + + + + $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c + + + ICCARM + 388 133 + + + BICOMP + 93 + + + + + ICCARM + 489 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 402 + + + BICOMP + 489 166 249 104 171 168 169 227 288 186 162 149 158 232 473 482 124 384 311 360 397 381 403 380 394 395 188 307 290 176 294 296 309 67 100 400 379 402 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c + + + ICCARM + 331 172 + + + BICOMP + 222 + + + + + ICCARM + 19 480 4 30 7 31 11 13 24 28 14 17 27 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c + + + ICCARM + 63 146 + + + BICOMP + 401 + + + + + ICCARM + 19 480 4 30 7 31 11 13 24 28 14 17 27 463 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + + + ICCARM + 479 285 + + + __cstat + 445 + + + BICOMP + 499 + + + + + ICCARM + 87 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 237 245 247 235 219 242 241 213 153 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c + + + ICCARM + 156 295 + + + __cstat + 121 + + + BICOMP + 151 + + + + + ICCARM + 245 228 272 104 171 168 169 227 288 186 162 283 158 232 270 164 183 258 255 194 279 256 257 269 281 155 212 196 190 234 87 237 247 235 219 242 241 213 153 @@ -2380,24 +2384,24 @@ $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c ICCARM + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cpu_comp.c + ICCARM + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c ICCARM - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c - ICCARM - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c - ICCARM - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c ICCARM - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cpu_comp.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c + ICCARM + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c ICCARM diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.ewp b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.ewp index 28be5829..df402a57 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.ewp +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/ide/stm32f0.ewp @@ -32,11 +32,11 @@

© COPYRIGHT(c) 2016 STMicroelectronics

+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c deleted file mode 100644 index f521d68a..00000000 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c +++ /dev/null @@ -1,101 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f0xx_ll_pwr.c - * @author MCD Application Team - * @brief PWR LL module driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 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. - * - ****************************************************************************** - */ -#if defined(USE_FULL_LL_DRIVER) - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f0xx_ll_pwr.h" -#include "stm32f0xx_ll_bus.h" - -/** @addtogroup STM32F0xx_LL_Driver - * @{ - */ - -#if defined(PWR) - -/** @defgroup PWR_LL PWR - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private constants ---------------------------------------------------------*/ -/* Private macros ------------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup PWR_LL_Exported_Functions - * @{ - */ - -/** @addtogroup PWR_LL_EF_Init - * @{ - */ - -/** - * @brief De-initialize the PWR registers to their default reset values. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: PWR registers are de-initialized - * - ERROR: not applicable - */ -ErrorStatus LL_PWR_DeInit(void) -{ - /* Force reset of PWR clock */ - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_PWR); - - /* Release reset of PWR clock */ - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_PWR); - - return SUCCESS; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -#endif /* defined(PWR) */ -/** - * @} - */ - -#endif /* USE_FULL_LL_DRIVER */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/stm32f0xx_hal_conf.h index 204a06e6..daf0b72a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/bin/demoprog_stm32f051.out b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/bin/demoprog_stm32f051.out index 93e9a90c4218d8ef293ed248a55cf5aa4d81e273..a1539f6ca567792e0ae5e2309c9c18014f8911a4 100644 GIT binary patch literal 136232 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⪚?linuQ(D8f5N9I_(Th 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 F{XYWQ=|TVi diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/bin/demoprog_stm32f051.srec b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/bin/demoprog_stm32f051.srec index 64ec1ff1..62ea06f2 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/bin/demoprog_stm32f051.srec +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/bin/demoprog_stm32f051.srec @@ -1,364 +1,349 @@ S01A000064656D6F70726F675F73746D3332663035312E7372656399 -S31508002000C804002009360008CF280008D729000888 +S31508002000880500201D350008332800083F290008E8 S3150800201000000000000000000000000000000000B2 -S31508002020000000000000000000000000DB29000896 -S315080020300000000000000000172F000857340008B1 -S3150800204063340008E7350008F335000869360008E8 -S315080020506B3600086D3600086F36000871360008C2 -S315080020607336000875360008773600087936000892 -S315080020707B3600087D3600087F3600088136000862 -S3150800208083360008853600080000000087360008F9 -S31508002090893600088B3600088D3600088F3600080A -S315080020A091360008933600089536000897360008DA -S315080020B099360008000000009B3600080000000062 -S315080020C0EE11AA5570B582B0040000252078C00725 -S315080020D070D5AA4800680C210140042909D0A748F0 -S315080020E000680C21014008290CD1A4480068C003E7 -S315080020F008D5BA48006880035CD56068002859D1BD -S31508002100012035E26068012807D1B44800688021BB -S3150800211049020143B14801602DE0606800280CD1EE -S31508002120AE480068AE490140AC480160AB4800685B -S31508002130AC490140A94801601DE0606805280ED138 -S31508002140A64800688021C9020143A4480160A34843 -S315080021500068802149020143A04801600BE09F48BE -S3150800216000689F4901409D4801609C4800689D4958 -S3150800217001409A480160606800280DD000F01EFBF7 -S31508002180050096480068800314D400F017FB401B2E -S315080021906528F6D30320EBE100F010FB05008F4815 -S315080021A00068800306D500F009FB401B6528F6D3B6 -S315080021B00320DDE12078800721D5704800680C21CE -S315080021C00140002909D06D4800680C210140082902 -S315080021D02FD16A480068C0032BD48048006880075E -S315080021E004D5E068012801D00120C1E17B480068D8 -S315080021F0F82188432169C90001437848016020789D -S3150800220000075FD5E069002848D0B9480068012171 -S315080022100143B748016000F0D1FA0500B4480068E8 -S3150800222080074FD400F0CAFA401B0328F6D30320D0 -S315080022309EE1E06800281DD0684800680121014336 -S315080022406648016000F0BAFA05006448006880072D -S3150800225006D400F0B3FA401B0328F6D3032087E11F -S315080022605E480068F82188432169C90001435B4834 -S315080022700160C4E759480068012188435749086046 -S3150800228000F09CFA0500554800688007B7D500F0AD -S3150800229095FA401B0328F6D3032069E194480068A1 -S315080022A0012188439249086000F088FA05009048A1 -S315080022B00068800706D500F081FA401B0328F6D38C -S315080022C0032055E12078400700D496E00026A94867 -S315080022D00068C0000ED4A74800688021490501435C -S315080022E0A4480160A3480068802149050840009079 -S315080022F000980126A0480068C00514D49E480068C6 -S315080023008021490001439C48016000F057FA050006 -S3150800231099480068C00506D400F050FA401B6528A5 -S31508002320F6D3032024E1A068012806D19348006863 -S3150800233001210143914801602EE0A06800280CD1D4 -S315080023408E480068012188438C4908608B480068DC -S3150800235004218843894908601EE0A06805280FD132 -S315080023608648006804210143844801608348006860 -S3150800237001210143814801600EE000BF04100240BC -S315080023807E480068012188437C4908607B480068CC -S315080023900421884379490860A06800280ED000F017 -S315080023A00DFA05007548006880071DD400F006FA86 -S315080023B0401B73498842F5D30320D9E000F0FEF9A3 -S315080023C005006E48006880070ED500F0F7F9401B37 -S315080023D06B498842F5D30320CAE000BF00100240CB -S315080023E0FFFFFEFFFFFFFBFFF6B2012E05D1614896 -S315080023F00068644901405F4801602078C00625D519 -S315080024006069012844D1B848006804210143B648E8 -S315080024100160B548006801210143B348016000F036 -S31508002420CDF90500B0480068800706D400F0C6F963 -S31508002430401B0328F6D303209AE0AB480068F8212E -S315080024408843A169C9000143A7480160206A00289A -S3150800245000D18CE0A54800680C210140082900D16C -S3150800246083E0206A02286CD1A2480068A04901408E -S31508002470A048016000F0A2F905009E4800688001A6 -S3150800248038D500F09BF9401B0328F6D303206FE0EC -S3150800249060690421C94388420FD193480068042122 -S315080024A088439149086090480068F8218843A169E3 -S315080024B0C90001438C480160C8E78B4800680421BD -S315080024C00143894801608848006801218843864994 -S315080024D0086000F073F90500834800688007B5D5E1 -S315080024E000F06CF9401B0328F6D3032040E000BF38 -S315080024F024100240804800680F218843E16A01439E -S315080025007D480160794800687C490140A06A084313 -S31508002510616A01437548016076480068802149046C -S3150800252001437448016000F049F9050071480068E4 -S3150800253080011CD400F042F9401B0328F6D303207F -S3150800254016E06C4800686A4901406A48016000F074 -S3150800255035F9050067480068800108D500F02EF9AE -S31508002560401B0328F6D3032002E0012000E00020E8 -S3150800257076BD00001C10024000700040201002408A -S3150800258089130000FFFFFFEF70B505000C00002659 -S315080025907E4800680100C907C90FA1420FD27B48CF -S315080025A00068012188432043784908607748006815 -S315080025B00100C907C90FA14201D0012092E028787D -S315080025C0800707D549480068F0218843A968014370 -S315080025D0464801602878C00752D56868012805D1A1 -S315080025E044480068800310D401207BE0686802280C -S315080025F005D140480068800107D4012072E03D48B3 -S315080026000068800701D401206CE03848006803217F -S315080026108843696801433548016000F0CFF8060031 -S31508002620686801280DD1314800680C210140042949 -S3150800263026D000F0C3F8801B55498842F3D30320FF -S3150800264050E0686802280DD1284800680C2101402E -S31508002650082915D000F0B2F8801B4D498842F3D3FB -S3150800266003203FE0214800680C210140002907D0DB -S3150800267000F0A4F8801B46498842F3D3032031E0D2 -S31508002680424800680100C907C90F8C420FD23F486B -S3150800269000680121884320433C4908603B4800689C -S315080026A00100C907C90FA14201D001201AE0287804 -S315080026B0400707D50D48006836490140E8680843D1 -S315080026C00A49086000F01CF83349084A12681209DA -S315080026D01207120F895CC84030490860002000F0D4 -S315080026E073F8002070BD0000341002400410024048 -S315080026F0FFFFFFFE001002402C100240FFFFC2FF42 -S3150800270010B588B004A82749102200F06FF868466B -S315080027102549102200F06AF8002000210024002430 -S3150800272000241F4800680C210140042902D008290A -S3150800273002D018E01D4C17E004A9820C1207120FEC -S315080027408C5C69461A4A12681207120F895CC00324 -S3150800275006D5164800F064F8210004004C4301E051 -S315080027601448444300E0114C200008B010BD0B4843 -S315080027700068704780B5FFF7FAFF0F49084A1268E4 -S31508002780120A5207520F895CC84002BD0020024057 -S3150800279089130000FFF8FFFF40360008C00000203C -S315080027A004100240203600083036000800127A006D -S315080027B02C10024000093D005C36000801480068FC -S315080027C0704700BF8405002010B50400FFF7CFFF4F -S315080027D0FA21890000F024F800F0D9F80022210037 -S315080027E00020C04300F0CEF8002010BD70B4103AA7 -S315080027F003D378C9103A78C0FBD2530701D318C956 -S3150800280018C001D508C908C0D20704D30B880380AD -S31508002810891C801C002A01D50B78037070BC704790 -S315080028200022030A8B420BD203098B4219D24308B2 -S315080028308B422ED2411A00D20146524110467047A9 -S31508002840FF2209023FD012068B4205D31212090253 -S315080028508B4201D31212090203098B4219D300E0F5 -S31508002860090AC3098B4201D3CB01C01A5241830915 -S315080028708B4201D38B01C01A524143098B4201D3C3 -S315080028804B01C01A524103098B4201D30B01C01AEE -S315080028905241C3088B4201D3CB00C01A5241830868 -S315080028A08B4201D38B00C01A524143088B4201D395 -S315080028B04B00C01A5241884200D3401A5241CFD227 -S315080028C001461046704708B500F086F808BDFEE7D1 -S315080028D0F0B540B2002821D5374B40B20207120F97 -S315080028E0083A920804246243334C40B205072D0F78 -S315080028F0083DAD08042675436459FF258607B60FBB -S3150800290008277E43B540AC438901C9B28007800FCA -S31508002910082568438140214399501AE0274A40B266 -S31508002920830804246343D258FF238407A40F082589 -S315080029306C43A3409A438901C9B283079B0F0824B5 -S315080029406343994011431D4A40B280080423584303 -S315080029501150F0BD80B5411E80225204914201D328 -S3150800296001200EE0401E1649086003210020C043DE -S31508002970FFF7AEFF002013490860072012490860D8 -S31508002980002002BD80B540B2FFF7A2FF01BD80B5A9 -S31508002990FFF7E0FF02BD00B5042806D10A48006823 -S315080029A0042101430848016005E00748006804213E -S315080029B088430549086000BD1CED00E000E400E01E -S315080029C014E000E018E000E010E000E080B500F058 -S315080029D001F801BD7047FEE77047FEE710B5040031 -S315080029E0002C01D1012037E0A0690028FFD1692019 -S315080029F0205C002805D1002068216054200000F0E2 -S31508002A0089FA2420692160542068006801218843D6 -S31508002A1021680860200000F0ABF8012801D10120E8 -S31508002A201AE0606A002802D0200000F06AF92068DF -S31508002A3040680A49014020684160206880682A2168 -S31508002A40884321688860206800680121014320685E -S31508002A500160200000F0CAF910BD0000FFB7FFFFB3 -S31508002A60F8B582B005000C00170000266A20285C1D -S31508002A70202879D1002C02D0BFB2002F01D1012025 -S31508002A8073E0A86880214901884207D1286900288F -S31508002A9004D12000C00701D5012066E06820285C23 -S31508002AA0012801D1022060E0012068216854002035 -S31508002AB0E86622206A216854FFF780FE060058203F -S31508002AC02F525A202F52A8688021490188420AD1DC -S31508002AD02869002803D125485C21685210E0FF20A8 -S31508002AE05C2168520CE0A868002809D128690028EA -S31508002AF003D1FF205C21685202E07F205C216852E6 -S31508002B005C202F5A04E02868808C38402080A41C5A -S31508002B105A20285A00281FD05A20285A401E5A21BF -S31508002B20685202980090330000222021280000F005 -S31508002B309FF9002801D0032017E0A86880214901E1 -S31508002B40884202D128690028DDD02868808C39009F -S31508002B5001402170641CDBE720206A2168540020AC -S31508002B6068216854002000E00220FEBDFF01000035 -S31508002B7038B5040000211021002100200025A16895 -S31508002B8022690A4363691343E16919432268126893 -S31508002B90944B134019432268116021684968924A88 -S31508002BA00A40E168114322685160A269216A11430B -S31508002BB022689268AA4B13401943226891602168DB -S31508002BC0A84A914215D1A84909688907890F002999 -S31508002BD005D0022909D006D3032902D007E000212F -S31508002BE00EE002210CE004210AE0082108E0102189 -S31508002BF006E021689D4A914201D1002100E010219A -S31508002C00E26980231B029A423DD1C9B2002906D047 -S31508002C1002290FD0042915D008291ED026E0FFF76F -S31508002C20A9FD022148436168490840186168FFF711 -S31508002C30F7FD1CE060684008A84940186168FFF77E -S31508002C40EFFD14E0FFF75CFD02214843616849087F -S31508002C5040186168FFF7E4FD09E0606840088021D4 -S31508002C60490240186168FFF7DBFD00E001259C4931 -S31508002C7001400A0080B240084107490F114389B252 -S31508002C802068C16039E0C9B2002906D0022910D0EF -S31508002C90042919D0082923D02EE0FFF76BFD6168B7 -S31508002CA0490840186168FFF7BBFD80B22168C86013 -S31508002CB023E0606840088B4940186168FFF7B0FD5B -S31508002CC080B22168C86018E0FFF71AFD61684908F4 -S31508002CD040186168FFF7A4FD80B22168C8600CE05F -S31508002CE0606840088021090240186168FFF798FD6E -S31508002CF080B22168C86000E001252800C0B232BD54 -S31508002D00000000B52421415CC90707D50168496858 -S31508002D10754A0A40816A1143026851602421415C60 -S31508002D20890707D501684968704A0A40C16A11438C -S31508002D30026851602421415C490707D50168496842 -S31508002D406B4A0A40016B1143026851602421415CB9 -S31508002D50090707D501684968664A0A40416B114365 -S31508002D60026851602421415CC90607D50168896853 -S31508002D70614A0A40816B1143026891602421415CD3 -S31508002D80890607D5016889685C4A0A40C16B114300 -S31508002D90026891602421415C490614D50168496896 -S31508002DA0574A0A40016C114302685160016C80223F -S31508002DB05203914207D101684968524A0A40416C58 -S31508002DC01143026851602421415C090607D5016850 -S31508002DD049684D4A0A40816C11430068416000BD4C -S31508002DE000000000F369FFFFFFCFFFFF38B50400BE -S31508002DF000250020E066FFF7E1FC05002068194978 -S31508002E00884221D12068006800070CD53F48009009 -S31508002E102B00002280218903200000F029F80028D1 -S31508002E2001D003201AE02068006840070CD537480F -S31508002E3000902B0000228021C903200000F018F81A -S31508002E40002801D0032009E02020692160542020B1 -S31508002E506A216054002068216054002032BD0000B9 -S31508002E60FFF4FFFF003801403010024000440040E4 -S31508002E70F4B504000D001F00069E2068C0692840AE -S31508002E80A84201D1012000E000206946097888425D -S31508002E9021D10020C0438642EFD0002E04D0FFF790 -S31508002EA08DFCC01B8642E8D220680068184901409C -S31508002EB0206801602068806801218843216888604D -S31508002EC020206921605420206A216054002068214E -S31508002ED06054032000E00020F2BD00000024F40046 -S31508002EE0F0FF000000127A00FFFFFDFFFFFFFEFF64 -S31508002EF0FFFFFBFFFF7FFFFFFFEFFFFFFFDFFFFF88 -S31508002F00FFFFEFFFFFFF9FFFFFFFF7FFFFFFFF0139 -S31508002F105FFEFFFF7047FEE7F8B5020000230024B6 -S31508002F20002533E005201E00B607B60F04277E43AA -S31508002F30B0402843050069489E0804277E4385510A -S31508002F4067480568A5434868C00300D52543644813 -S31508002F50056064480568A5434868800300D525438D -S31508002F606048056060480568A5434868C00200D502 -S31508002F7025435D4805605D480568A54348688002A5 -S31508002F8001D52C432500594805605B1C0868D840C4 -S31508002F90002800D1A0E0086801249C400440002CC9 -S31508002FA0F3D04868022802D0486812281AD1D808EF -S31508002FB0042568431018056A0F201E007607760F49 -S31508002FC004277E43B040854308691E007607760FBE -S31508002FD004277E43B04028430500D80804267043DA -S31508002FE010180562156803201E0002277E43B040AC -S31508002FF0854308798007800F1E0002277E43B0406C -S315080030002843050015604868012808D04868022842 -S3150800301005D04868112802D0486812281AD1956840 -S3150800302003201E0002277E43B0408543C8681E0061 -S3150800303002277E43B0402843050095605568012065 -S31508003040984085432E0048680500ED06ED0F9D4023 -S3150800305035435560D56803201E0002277E43B040DD -S3150800306085432F008D681E0002204643B5403D4328 -S31508003070D5604868C00088D5224800680125054300 -S31508003080204805601F4800680500ED07ED0F00950C -S31508003090009812489D080426754345590F201E00BE -S315080030A0B607B60F04277E43B04085439020C00577 -S315080030B0824201D1002036E71348824201D101201D -S315080030C031E71248824201D102202CE71048824299 -S315080030D000D027E7032026E7F1BD000008000140DD -S315080030E00004014004040140080401400C040140A6 -S315080030F000B5D2B2002A02D089B2816101E089B254 -S31508003100816200BD1810024000040048000800480B -S31508003110000C004880B500F007F800F0B1F800F0A0 -S3150800312047F900F0B1F8FAE780B500F06DF900F05C -S3150800313005F800F035F900F077F901BD00B591B052 -S31508003140012004900520059002200C908020400262 -S315080031500D90802040030E9000200F9004A8FEF7E3 -S31508003160B1FF002800D0FEE707200090022001905A -S31508003170002002900020039001216846FFF704FA18 -S31508003180002800D0FEE711B000BD00B587B033486F -S315080031900068012101433148016030480068010098 -S315080031A0C907C90F009100982D4800688021890237 -S315080031B001432B4801602A4800688021890208409B -S315080031C00090009826480068802109030143244896 -S315080031D00160234800688021090308400090009890 -S315080031E0204800688021890201431E4801601D4865 -S315080031F0006880218902084000900098002200217A -S315080032000420C043FFF7BEFB002200210120C04373 -S31508003210FFF7B8FB002200210020C043FFF7B2FBEE -S315080032208020800001900120029000200390002059 -S31508003230049001A90C48FFF76FFE0C2001900220AC -S31508003240029000200390032004900120059001A914 -S315080032509020C005FFF760FE07B000BD18100240B9 -S31508003260141002401C1002400008004800B5BFF3C5 -S315080032704F8F434843490860BFF34F8F00BFFDE7B0 -S3150800328080B500F009F801BD80B500F020F801BD51 -S3150800329080B5FFF7EBFF01BD80B53B483B490860A9 -S315080032A0E12000023949486000203849886000203A -S315080032B03649C860002035490861002033498861CD -S315080032C00C20324948613148FFF788FB01BD80B5BB -S315080032D02F480078002817D12E4800F042F8012818 -S315080032E03ED12C48007800283AD02A480078412850 -S315080032F036DA00F0ACF8284908600120244908703D -S315080033000020264908702BE02248244909784018ED -S31508003310401C00F026F8012818D120480078401CE7 -S315080033201E4908701D4800781A490978884217D13D -S3150800333000201749087017484078FF2810D115480B -S31508003340807800280CD1FFF7A3FF09E000F07FF88A -S31508003350114909686431814202D200200C4908707B -S3150800336001BD80B50023012201000848FFF778FB5C -S31508003370C0B2002801D1012000E0002002BD0000F3 -S315080033800400FA050CED00E000440040C8040020E3 -S3150800339089050020380500207C05002088050020C6 -S315080033A080B50022802189001448FFF7A1FE01BDDF -S315080033B010B500F04CF8040011480068201AFA21EC -S315080033C04900884218D30F480078002809D10120FF -S315080033D00C4908700122802189000848FFF788FEF9 -S315080033E008E0002007490870002280218900034868 -S315080033F0FFF77EFE0248046010BD00000008004882 -S31508003400800500208A05002080B50648006810213E -S315080034100143044801600020FFF7D6F9FFF7B5FE1F -S31508003420002002BD0020024080B5FFF7A0F9FA216E -S315080034308900FFF7F5F9FFF7AAFA0420FFF7ABFAB8 -S31508003440002200210020C043FFF79CFA01BD80B589 -S31508003450FFF7B4F902BD80B500F004F8FFF7B6FA35 -S3150800346001BDFEE702480068401C01490860704734 -S3150800347084050020194800680121014317480160A6 -S315080034801748006817490140154801601348006845 -S315080034901549014011480160104800681349014068 -S315080034A00E4801600E480068114901400C48016049 -S315080034B0104800680F2188430E4908600E480068C6 -S315080034C00E4901400C4801600D48006801218843F7 -S315080034D00B49086000200B4908607047001002403D -S315080034E0041002400CB8FFF8FFFFF6FEFFFFFBFFD3 -S315080034F0FFFFC0FF2C10024030100240ACFEFFFF59 -S31508003500341002400810024070B40121002213E072 -S315080035100468001D0C4202D04D466D1E64192260D7 -S31508003520241D1B1F042BFAD225009E0701D52280D5 -S31508003530AD1C0B4000D02A700368001D002BE7D194 -S3150800354070BC704730B401210268001D002A0FD0F4 -S315080035500368C318446808300C4202D04D466D1EF5 -S3150800356064191D6825601B1D241D121FECD0F8E781 -S3150800357030BC704710B5074979441831064C7C446D -S31508003580163404E0081D0A68891888470100A14214 -S31508003590F8D110BD08000000280000006DFFFFFFED -S315080035A0C4000000C80400200000000099FFFFFFC7 -S315080035B004000000B0000000C00000200000000069 -S315080035C000F00BF8002801D0FFF7D4FF002000BF59 -S315080035D000BFFFF79FFD00F002F80120704780B595 -S315080035E000F002F801BDFEE70746384600F002F88B -S315080035F0FBE7FEE780B500BF00BF024A11001820AE -S31508003600ABBEFBE726000200024885460248804713 -S3150800361002480047C80400207534000851360008DF -S3150800362002030405060708090A0B0C0D0E0F1010F5 -S315080036300102030405060708090A0B0C0D0E0F10F4 -S315080036400000000000000000010203040607080944 -S3150800365000BF00BF00BF00BFFFF7B2FF00000000B9 -S315080036600102030400127A00FEE7FEE7FEE7FEE722 -S31508003670FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE714 -S31508003680FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE704 -S31108003690FEE7FEE7FEE7FEE7FEE7FEE7C2 -S705080036516B +S31508002020000000000000000000000000432900082E +S315080020300000000000000000832E00087B33000823 +S3150800204087330008FB340008073500087D3500088B +S315080020507F35000881350008833500088535000876 +S3150800206087350008893500088B3500088D35000846 +S315080020708F35000891350008933500089535000816 +S315080020809735000899350008000000009B350008C0 +S315080020909D3500089F350008A1350008A3350008BE +S315080020A0A5350008A7350008A9350008AB3500088E +S315080020B0AD35000800000000AF350008000000003C +S315080020C0EE11AA55F8B50400002738002078C00795 +S315080020D063D50C20AA490A680240042A06D00A6871 +S315080020E0104008280BD10868C00308D5A548006821 +S315080020F0800352D5606800284FD10120F1E160685D +S31508002100012806D19F480168802252020A430260CC +S3150800211024E06068002809D19A4801689A4A0A406A +S3150800212002600168994A0A40026017E0606805285B +S315080021300BD1944801688022D2020A4302600168E2 +S31508002140802252020A43026008E08E4801688E4ADD +S315080021500A40026001688D4A0A40026060680028E9 +S315080021600DD000F0DDFA050086480068800314D417 +S3150800217000F0D6FA401B6528F6D30320B1E100F03B +S31508002180CFFA05007F480068800306D500F0C8FA34 +S31508002190401B6528F6D30320A3E1207880071CD5C9 +S315080021A00C2077490A680240002A06D00A681040BF +S315080021B008282AD10868C00327D472480168890705 +S315080021C004D5E168012901D001208AE10168F822D5 +S315080021D091432269D2000A4302602078000755D548 +S315080021E0E069002840D0BF4D2868012101432960D5 +S315080021F000F096FA06002868800747D400F090FA9F +S31508002200801B0328F7D303206BE1E068002819D068 +S315080022105C4D286801210143296000F081FA060017 +S315080022202868800706D400F07BFA801B0328F7D3BA +S31508002230032056E12868F82188432169C90001432B +S315080022402960CAE74F4D286801218843286000F0B5 +S3150800225067FA060028688007BFD500F061FA801B78 +S315080022600328F7D303203CE19E4D286801218843C3 +S31508002270286000F055FA06002868800706D500F0A1 +S315080022804FFA801B0328F7D303202AE10425206888 +S315080022902840002800D183E03E008020400592496E +S315080022A009680140002908D18F490A6802430A6073 +S315080022B0096808400090009801268C4F3868C005C8 +S315080022C012D43868802149000143396000F028FAA1 +S315080022D000903868C00507D400F022FA0099401A21 +S315080022E06528F6D30320FCE0A068012805D18048BC +S315080022F0016801220A43026021E0A068002809D18A +S315080023007B480168012291430160016804229143D8 +S31508002310016014E0A068052808D1754801682943BA +S315080023200160016801220A43026008E070480168FA +S315080023300122914301600168042291430160A0686B +S3150800234000280ED000F0ECF90700694800688007FD +S315080023501ED400F0E5F9C01B66498842F5D3032070 +S31508002360BFE000F0DDF907006148006880070FD577 +S3150800237000F0D6F9C01B5F498842F5D30320B0E0C8 +S315080023800410024000100240FFFFFEFFFFFFFBFFA4 +S31508002390F6B2012E04D154480168AB4A0A400260DD +S315080023A02078C0061ED5606901283DD1A74E306841 +S315080023B005433560306801210143316000F0B0F90A +S315080023C005003068800706D400F0AAF9401B0328E8 +S315080023D0F7D3032085E03068F8218843A169C9004E +S315080023E001433160206A00287AD0994F38680C2159 +S315080023F00140082972D0206A02285DD1954D2868C7 +S3150800240095490140296000F08BF900908026B604B2 +S315080024102868304000282DD000F082F90099401A2B +S315080024200328F3D303205CE00421C943606988428A +S315080024300BD186480268114001600168F822914371 +S31508002440A269D2000A430260CCE7804E3068054391 +S315080024503560306801218843306000F061F9050075 +S3150800246030688007BED500F05BF9401B0328F7D318 +S31508002470032036E0794801680F229143E26A0A434D +S315080024800260386893490140A06A0843616A0143BB +S3150800249039602868802149040143296000F040F921 +S315080024A004002868304000281AD100F039F9001BCA +S315080024B00328F6D3032014E0664C206866490140D9 +S315080024C0216000F02DF905002068800108D500F08C +S315080024D027F9401B0328F7D3032002E0012000E078 +S315080024E00020F2BD241002401C100240007000407B +S315080024F02010024089130000F3B581B000210125A0 +S315080025007B4E31682940029A91420CD231680122E9 +S315080025109143029A0A43326031682940029A9142ED +S3150800252001D001208FE00400022021680140002923 +S3150800253006D047490A68F0239A43A36813430B60F9 +S3150800254021682940002952D06168012905D14148EE +S315080025500068800311D4012075E06168022905D15D +S315080025603C480068800108D401206CE039490968B4 +S315080025700840002801D1012065E0354F386803215D +S31508002580884361680143396000F0CAF800906068C2 +S3150800259001280DD138680C210140042927D000F004 +S315080025A0BFF80099401A53498842F3D303204AE0FA +S315080025B0606802280DD138680C210140082916D018 +S315080025C000F0AEF80099401A4A498842F3D303202E +S315080025D039E038680C210140002908D000F0A0F83D +S315080025E00099401A43498842F3D303202BE0029806 +S315080025F03168294088420CD2306801218843029903 +S3150800260001433160306805400298854201D00120B7 +S3150800261019E02078400706D50D480168364A0A4071 +S31508002620E1681143016000F01BF83449084A126852 +S3150800263012091207120F895CC84031490860002048 +S3150800264000F074F80020FEBDFFFFFFEF34100240D3 +S315080026500410024000100240FFFFFFFE2C1002404B +S3150800266010B588B004A82749102200F071F868460A +S315080026702549102200F06CF800210800080008001F +S315080026800800224800680C210140042902D00829C4 +S3150800269002D017E01E4C16E00F2104AA830C0B404B +S315080026A0D45C6A461B4B1B681940515CC00306D5AF +S315080026B0174800F067F8210004004C4301E016486B +S315080026C0444300E0124C200008B010BD0C480068D6 +S315080026D070470000FFFFC2FF80B5FFF7F7FF0F49FD +S315080026E00A4A1268120A5207520F895CC84002BD8C +S315080026F00020024089130000FFF8FFFF5435000848 +S31508002700C000002034350008443500080410024093 +S3150800271000127A002C10024000093D0070350008AE +S3150800272001480068704700BF8001002010B504000A +S31508002730FFF7CCFFFA21890000F024F800F0DCF856 +S31508002740002221000020C04300F0D1F8002010BD6F +S3150800275070B4103A03D378C9103A78C0FBD253073D +S3150800276001D318C918C001D508C908C0D20704D3AF +S315080027700B880380891C801C002A01D50B780370FE +S3150800278070BC70470022030A8B420BD203098B42A6 +S3150800279019D243088B422ED2411A00D20146524121 +S315080027A010467047FF2209023FD012068B4205D316 +S315080027B0121209028B4201D31212090203098B4233 +S315080027C019D300E0090AC3098B4201D3CB01C01A09 +S315080027D0524183098B4201D38B01C01A52414309E6 +S315080027E08B4201D34B01C01A524103098B4201D3D4 +S315080027F00B01C01A5241C3088B4201D3CB00C01A41 +S31508002800524183088B4201D38B00C01A52414308B8 +S315080028108B4201D34B00C01A5241884200D3401A5A +S315080028205241CFD201461046704708B500F088F8E5 +S3150800283008BDFEE7F0B5020052B2002A23D50322EE +S315080028400F24374B05006DB22540083DAD08042618 +S315080028507543060076B23440083CA408042674433F +S315080028601E59FF27BC461400044008277C436746C8 +S31508002870A740BE438901C9B202400820424391409D +S31508002880314359511AE0274A0323040064B2A408C5 +S3150800289004256C431459FF251E00064008277E436D +S315080028A0B540AC438901C9B2034008256B4399403A +S315080028B0214340B28008042358431150F0BD80B527 +S315080028C0411E80225204914201D301200EE0401E8F +S315080028D01549086003210020C043FFF7ABFF00201D +S315080028E012490860072012490860002002BD80B519 +S315080028F040B2FFF79FFF01BD80B5FFF7E0FF02BDBD +S3150800290000B5042805D10A48016804220A43026072 +S3150800291004E00748016804229143016000BD0000F5 +S315080029201CED00E000E400E014E000E018E000E040 +S3150800293010E000E080B500F001F801BD7047FEE741 +S315080029407047FEE710B50400002C01D1012037E0DE +S31508002950A0690028FFD16920205C002805D1002045 +S3150800296068216054200000F08BFA24206921605405 +S31508002970206800680121884321680860200000F06B +S31508002980B7F8012801D101201AE0606A002802D0B0 +S31508002990200000F071F9206840680A490140206863 +S315080029A04160206880682A218843216888602068F9 +S315080029B000680121014320680160200000F0D0F979 +S315080029C010BD0000FFB7FFFFFEB504001E0000277C +S315080029D038006A20205C202800D084E00D00002DF5 +S315080029E005D06846028068460088002801D1012083 +S315080029F07AE0A06880214901884207D12069002829 +S31508002A0004D12800C00701D501206DE06820205CAC +S31508002A10012801D1022067E0012068216054E76699 +S31508002A2022206A216054FFF77BFE029068460088E0 +S31508002A3058216052684600885A216052A068802151 +S31508002A40490188420AD12069002803D127485C2118 +S31508002A50605210E0FF205C2160520CE0A06800285C +S31508002A6009D12069002803D1FF205C21605202E0C9 +S31508002A707F205C2160525C20205A6946888007E0E6 +S31508002A8028002168898C6A4692880A400280AD1C13 +S31508002A905A20205A00281FD05A20205A401E5A2150 +S31508002AA060520096029B00222021200000F098F92F +S31508002AB0002801D0032017E0A06880214901884238 +S31508002AC002D120690028DBD02068808C6946898875 +S31508002AD0014029706D1CDBE720206A2160546820BC +S31508002AE02754002000E00220FEBD0000FF01000080 +S31508002AF0F8B504000021080010221000080008009C +S31508002B000D00A36826691E4367693743E3693B439B +S31508002B1026683668904F37403B43266833602368FB +S31508002B205B688E4E1E40E368334326687360A66969 +S31508002B30236A33432668B668A54F37403B43266861 +S31508002B40B3602368A34EB34214D1A34B1B689B07FB +S31508002B509B0F002B05D0022B08D005D3032B01D0E1 +S31508002B6006E00CE002210AE0042108E0082106E05C +S31508002B70110004E02368994EB34200D01100802268 +S31508002B801202E36993423CD1C9B2002906D0022950 +S31508002B900FD0042915D008291ED026E0FFF79CFD82 +S31508002BA0022148436168490840186168FFF7EAFD51 +S31508002BB01CE060684008A44940186168FFF7E2FD18 +S31508002BC014E0FFF74DFD02214843616849084018A3 +S31508002BD06168FFF7D7FD09E060684008802149026F +S31508002BE040186168FFF7CEFD00E0012597490140CE +S31508002BF080B240084007400F084380B22168C86089 +S31508002C0037E0C9B2002906D0022910D0042919D004 +S31508002C10082923D02CE0FFF75FFD616849084018B2 +S31508002C206168FFF7AFFD80B22168C86021E060687F +S31508002C304008874940186168FFF7A4FD80B22168FB +S31508002C40C86016E0FFF70CFD61684908401861681E +S31508002C50FFF798FD80B22168C8600AE060684008FE +S31508002C6080186168FFF78EFD80B22168C86000E0B1 +S31508002C7001252800C0B2F2BD00B52421415CC90770 +S31508002C8007D501684968734A0A40816A1143026890 +S31508002C9051602421415C890707D5016849686E4A55 +S31508002CA00A40C16A1143026851602421415C490700 +S31508002CB007D501684968694A0A40016B11430268E9 +S31508002CC051602421415C090707D501684968644AAF +S31508002CD00A40416B1143026851602421415CC906D0 +S31508002CE007D5016889685F4A0A40816B1143026803 +S31508002CF091602421415C890607D5016889685A4A8A +S31508002D000A40C16B1143026891602421415C49065F +S31508002D1014D501684968554A0A40016C114302688E +S31508002D205160016C80225203914207D101684968BB +S31508002D304F4A0A40416C1143026851602421415CA4 +S31508002D40090607D5016849684A4A0A40816C114351 +S31508002D500068416000BD0000F369FFFFFFCFFFFF79 +S31508002D607CB5040000252800E566FFF7D9FC0600B7 +S31508002D7020681849884221D12068006800070CD5C8 +S31508002D803D4800903300002280218903200000F08E +S31508002D9027F8002801D0032018E0206800684007BB +S31508002DA00CD535480090330000228021C903200045 +S31508002DB000F016F8002801D0032007E0202069213A +S31508002DC060546A21605468202554002076BD0000AE +S31508002DD0FFF4FFFF00380140301002400044004075 +S31508002DE0F4B504000D001F00069E2068C06928403F +S31508002DF0A84201D1012000E00020694609788842EE +S31508002E0020D10020C0438642EFD0002E04D0FFF721 +S31508002E1087FCC01B8642E8D2206800681749014033 +S31508002E2020680160206880680121884321688860DD +S31508002E302020692160546A2160540020682160546A +S31508002E40032000E00020F2BD0024F400F0FF00009B +S31508002E5000127A00FFFFFDFFFFFFFEFFFFFFFBFFEB +S31508002E60FF7FFFFFFFEFFFFFFFDFFFFFFFFFEFFF24 +S31508002E70FFFF9FFFFFFFF7FFFFFFFF015FFEFFFF5B +S31508002E807047FEE7F8B5020000230020002032E074 +S31508002E90052403E0724CA242FAD134001F003E40DA +S31508002EA004277E43B44004436E489E0804277E43A5 +S31508002EB084516D4C2068A8434E68F60300D5284314 +S31508002EC020606A4C2068A8434E68B60300D528439C +S31508002ED02060674C2068A8434E68F60200D5284350 +S31508002EE02060644C2068A8434E68B60201D50543A5 +S31508002EF0280020605B1C0868D840002800D1AEE096 +S31508002F000124086825009D400540002DF2D0486838 +S31508002F10022802D0486812281ED1D8080426704311 +S31508002F201018076A072000970F26B4461F000740A7 +S31508002F30042677436646BE40009FB743BC460E69E3 +S31508002F401F00384004277843864067463E43D80822 +S31508002F50042778431018066217680326BC461F0024 +S31508002F60022047433000B8406746874300974868C1 +S31508002F70304084461F00022047436046B840009F01 +S31508002F80384310604868012808D04868022805D0E8 +S31508002F904868112802D0486812281DD19768BC468F +S31508002FA01F00022047433000B84067468743009712 +S31508002FB0C86884461F00022047436046B840009F01 +S31508002FC0384390605768200098408743486800094E +S31508002FD02040984038435060D768BC461F000220FE +S31508002FE047433000B8406746874300978868844659 +S31508002FF01F00022047436046B840009F3843D06010 +S315080030004868C00000D475E720480768274307606A +S315080030100068204000900098124884469F080420C3 +S3150800302047436046C05900900F27BC461F00300032 +S31508003030384004277843674687400098B843902766 +S31508003040FF05BA4201D1002428E7114FBA4200D140 +S3150800305024E7104CA24200D01CE702241EE7F1BD6B +S31508003060000C004808000140000401400404014027 +S31508003070080401400C04014000B5D2B2002A02D06F +S3150800308089B2816101E089B2816200BD18100240EF +S31508003090000400480008004880B500F007F800F072 +S315080030A097F800F01BF900F097F8FAE780B500F0FA +S315080030B03DF900F005F800F009F900F047F901BDFF +S315080030C038B590B0012004900520059002240C9490 +S315080030D0802040020D90802040030E9000250F9519 +S315080030E004A8FEF7EFFF002800D0FEE707200090AF +S315080030F001940295039501216846FFF7FDF900281A +S3150800310000D0FEE711B030BD38B586B00124274897 +S3150800311001682143016000682040009000988020E3 +S31508003120800223490A6802430A600A68024000923C +S31508003130009A802212030B6813430B6009680A4041 +S31508003140009200991B490A6802430A600968084008 +S3150800315000900098002200210420C043FFF7C7FB17 +S31508003160002200210120C043FFF7C1FB00220021F5 +S315080031700020C043FFF7BBFB80208000019002942B +S3150800318000250395049501A90B48FFF77BFE0C2043 +S31508003190019002200290039503200490059401A94A +S315080031A09020C005FFF76EFE07B030BD181002402C +S315080031B0141002401C1002400008004800B5BFF376 +S315080031C04F8F3A483A490860BFF34F8F00BFFDE773 +S315080031D080B500F009F801BD80B500F019F801BD09 +S315080031E080B5FFF7EBFF01BD80B532483249016073 +S315080031F0E1210902416000218160C16001610C2260 +S3150800320042618161C16101624162FFF79BFB01BDB9 +S3150800321070B52A4C2078002815D1294D280000F0D1 +S3150800322037F8012833D12878002830D02878412863 +S315080032302DDA00F09EF8234908600120207000204E +S315080032402149087023E0204D1D4E28783018401C6F +S3150800325000F01EF8012811D12878401C287028781B +S315080032603178884213D1002020707078FF280ED15B +S31508003270287802280BD1FFF7B3FF08E000F079F8A9 +S31508003280104909686431814201D20020207070BD5E +S3150800329080B50100002301220648FFF795FBC0B25E +S315080032A0002801D1012000E0002002BD0400FA0533 +S315080032B00CED00E0C4000020004400408501002019 +S315080032C034010020780100208401002080B5002206 +S315080032D0802189001248FFF7CFFE01BD38B500F0FE +S315080032E048F804000F4D2868201AFA214900884238 +S315080032F015D30D480178002908D101210170012252 +S31508003300802189000648FFF7B7FE07E00021017013 +S315080033100022802189000248FFF7AEFE2C6031BDED +S31508003320000800487C0100208601002080B5064878 +S31508003330016810220A4302600020FFF7F7F9FFF739 +S31508003340E3FE002002BD00000020024080B5FFF722 +S31508003350BDF9FA218900FFF715FAFFF7CDFA04201F +S31508003360FFF7CEFA002200210020C043FFF7BFFA7C +S3150800337001BD80B5FFF7D4F902BD80B500F004F8A9 +S31508003380FFF7D8FA01BDFEE702480168491C01604B +S31508003390704700BF800100201448016801220A43D3 +S315080033A0026013490A68134B13400B600268124BFC +S315080033B0134003600268114B134003600868104A03 +S315080033C002400A600F4801680F22914301600E48C7 +S315080033D001680E4A0A4002600D48016801229143BD +S315080033E0016000200B490860704700000010024089 +S315080033F0041002400CB8FFF8FFFFF6FEFFFFFBFFC4 +S31508003400FFFFC0FF2C10024030100240ACFEFFFF49 +S31508003410341002400810024070B40123002413E05F +S315080034200168001D194202D04D466D1E49190C60EF +S31508003430091D121F042AFAD20D00960701D50C8021 +S31508003440AD1C1A4000D02C700268001D002AE7D176 +S3150800345070BC704730B401220EE00368C318446894 +S315080034600830144202D04D466D1E64191D68256049 +S315080034701B1D241D091FF9D10168001D0029ECD167 +S3150800348030BC704710B5074979441831064C7C445E +S31508003490163404E0081D0A68891888470100A14205 +S315080034A0F8D110BD08000000280000006DFFFFFFDE +S315080034B0C4000000C40000200000000099FFFFFFC0 +S315080034C004000000B4000000C00000200000000056 +S315080034D000F00DF8002801D0FFF7D4FF00BF00BFA9 +S315080034E0002000BF00BFFFF7D7FD00F002F801205B +S315080034F0704780B500F002F801BDFEE7074638467A +S3150800350000F002F8FBE7FEE780B500BF00BF024AFD +S3150800351011001820ABBEFBE72600020002488546CC +S31508003520024880470248004788050020993300086A +S315080035306535000802030405060708090A0B0C0D81 +S315080035400E0F10100102030405060708090A0B0CE2 +S315080035500D0E0F1000000000000000000102030419 +S315080035600607080900BF00BF00BF00BFFFF7B0FF8E +S31508003570000000000102030400127A00FEE7FEE7DD +S31508003580FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE705 +S31508003590FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7F5 +S315080035A0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7E5 +S7050800356558 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/boot.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/boot.c index 80518f97..44367be8 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/boot.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/boot.c @@ -117,10 +117,13 @@ static void BootComRs232Init(void) rs232Handle.Instance = USART2; rs232Handle.Init.BaudRate = BOOT_COM_RS232_BAUDRATE; rs232Handle.Init.WordLength = UART_WORDLENGTH_8B; - rs232Handle.Init.StopBits = UART_STOPBITS_1; - rs232Handle.Init.Parity = UART_PARITY_NONE; - rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.StopBits = UART_STOPBITS_1; + rs232Handle.Init.Parity = UART_PARITY_NONE; + rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + rs232Handle.Init.OverSampling = UART_OVERSAMPLING_16; + rs232Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + rs232Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; /* Initialize the UART peripheral. */ HAL_UART_Init(&rs232Handle); } /*** end of BootComRs232Init ***/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/settings/stm32f0.wsdt b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/settings/stm32f0.wsdt index d2ec5774..daabb5ec 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/settings/stm32f0.wsdt +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/settings/stm32f0.wsdt @@ -161,7 +161,7 @@ 24 1863 2 - + 0 -1 @@ -221,7 +221,7 @@ 14 - 11 + 20 1 @@ -235,7 +235,7 @@ 08000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000 - 040030840000520000000E840000500000000B8100001F0000000D81000021000000 + 04000E8400005000000030840000520000000B8100001F0000000D81000021000000 0 @@ -266,7 +266,7 @@ 4294967295 - 000000003500000022010000E6000000 + 00000000740300008007000025040000 000000003F03000080070000F0030000 4096 0 @@ -467,11 +467,11 @@ 1 - 0000000010000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A0100003B0300000100000002000010040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000010040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000010040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF000000003B030000800700003F030000010000000100001004000000010000000000000000000000FFFFFFFF07000000048500000085000008850000098500000A8500000B8500000E850000FFFF02000B004354616262656450616E650080000001000000000000003500000022010000E6000000000000003F03000080070000F0030000000000004080005607000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 + 0000000010000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A0100003B0300000100000002000010040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF000000003B030000800700003F030000010000000100001004000000010000000000000000000000FFFFFFFF07000000048500000085000008850000098500000A8500000B8500000E850000FFFF02000B004354616262656450616E65008000000100000000000000740300008007000025040000000000003F03000080070000F0030000000000004080005607000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 CMSIS-Pack - 00200000010000000100FFFF01001100434D4643546F6F6C426172427574746F6ED1840000000000000C000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B00FF7F0000 + 00200000010000000100FFFF01001100434D4643546F6F6C426172427574746F6ED1840000000000000C000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B0018000000 34049 @@ -480,7 +480,7 @@ 8192 0 0 - 32767 + 24 0 @@ -488,7 +488,7 @@ Main - 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000040038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000040041000000FFFEFF000000000000000000000000000100000001000000018002810000000004001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000040030000000FFFEFF000000000000000000000000000100000001000000018027810000000004002E000000FFFEFF000000000000000000000000000100000001000000018028810000000004002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF7F0000 + 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000040038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000040041000000FFFEFF000000000000000000000000000100000001000000018002810000000004001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000040030000000FFFEFF000000000000000000000000000100000001000000018027810000000004002E000000FFFEFF000000000000000000000000000100000001000000018028810000000004002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000 34050 @@ -497,7 +497,7 @@ 8192 0 0 - 32767 + 744 0 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/stm32f0.dep b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/stm32f0.dep index 524b11e6..4fa7619d 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/stm32f0.dep +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/ide/stm32f0.dep @@ -5,464 +5,479 @@ stm32f0 - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c - $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h $PROJ_DIR$\..\lib\CMSIS\Include\core_cm0.h - $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f051x8.h - $PROJ_DIR$\..\blt_conf.h - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Include\system_stm32f0xx.h - $PROJ_DIR$\..\obj\stm32f0xx_misc.o - $PROJ_DIR$\..\obj\stm32f0xx_cec.lst - $PROJ_DIR$\..\bin\IO_Toggle.out - $PROJ_DIR$\..\cfg\stm32f0xx_flash.icf - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Include\stm32f0xx.h - $TOOLKIT_DIR$\lib\m6M_tl.a - $TOOLKIT_DIR$\inc\c\stdint.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\types.h - $TOOLKIT_DIR$\inc\c\ycheck.h - $PROJ_DIR$\..\..\..\..\Source\nvm.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c - $PROJ_DIR$\..\stm32f0xx_it.c - $PROJ_DIR$\..\system_stm32f0xx.c - $PROJ_DIR$\..\obj\stm32f0xx_comp.lst - $TOOLKIT_DIR$\inc\c\DLib_Threads.h - $TOOLKIT_DIR$\inc\c\DLib_Defaults.h - $TOOLKIT_DIR$\inc\c\DLib_Product.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c - $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h - $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c - $PROJ_DIR$\..\obj\stm32f0xx_gpio.lst - $TOOLKIT_DIR$\inc\c\xencoding_limits.h - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmInstr.h - $PROJ_DIR$\..\obj\stm32f0xx_crc.lst - $PROJ_DIR$\..\obj\stm32f0xx_crs.lst - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s - $PROJ_DIR$\..\..\..\..\Source\uart.h - $PROJ_DIR$\..\obj\stm32f0xx_rcc.o - $PROJ_DIR$\..\hooks.c - $TOOLKIT_DIR$\lib\dl6M_tln.a - $PROJ_DIR$\..\obj\system_stm32f0xx.lst - $PROJ_DIR$\..\obj\stm32f0.pbd - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c - $PROJ_DIR$\..\..\..\..\Source\xcp.c - $PROJ_DIR$\..\obj\main.lst - $TOOLKIT_DIR$\lib\shb_l.a - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_crc.h - $PROJ_DIR$\..\obj\stm32f0xx_pwr.lst - $PROJ_DIR$\..\obj\stm32f0xx_cec.o - $TOOLKIT_DIR$\lib\rt6M_tl.a - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s - $PROJ_DIR$\..\obj\stm32f0xx_rcc.lst - $PROJ_DIR$\..\obj\stm32f0xx_it.pbi - $PROJ_DIR$\..\obj\stm32f0xx_it.o - $PROJ_DIR$\..\obj\main.o - $PROJ_DIR$\..\obj\main.pbi - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c - $PROJ_DIR$\..\bin\stm32f0.srec - $PROJ_DIR$\..\obj\system_stm32f0xx.pbi - $PROJ_DIR$\..\obj\stm32f0xx_it.lst - $PROJ_DIR$\..\..\..\..\Source\plausibility.h - $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_adc.h - $PROJ_DIR$\..\..\..\..\Source\timer.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c - $PROJ_DIR$\..\..\..\..\Source\xcp.h - $PROJ_DIR$\..\obj\stm32f0xx_misc.lst - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h - $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma_ex.h + $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c.h $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal.h $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_cec.h - $PROJ_DIR$\..\lib\cmsis\core_cm0.h - $PROJ_DIR$\..\led.h - $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_adc.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h - $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h - $PROJ_DIR$\..\header.h - $PROJ_DIR$\..\boot.c - $PROJ_DIR$\..\timer.c - $PROJ_DIR$\..\timer.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dac.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f051x8.h + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash_ex.h + $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_can.h - $PROJ_DIR$\..\led.c - $PROJ_DIR$\..\startup_stm32f051x8.s - $PROJ_DIR$\..\boot.h - $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - $PROJ_DIR$\..\lib\system_stm32f0xx.c - $PROJ_DIR$\..\main.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crs.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dac.h + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dbgmcu.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crs.h $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_comp.h $PROJ_DIR$\..\obj\stm32f0_discovery.lst - $PROJ_DIR$\..\obj\stm32f0xx_spi.lst - $PROJ_DIR$\..\obj\stm32f0xx_crc.o - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.lst + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dma.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dac.h - $PROJ_DIR$\..\obj\stm32f0xx_exti.o $PROJ_DIR$\..\obj\stm32f0xx_adc.lst + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h + $PROJ_DIR$\..\obj\stm32f0xx_crc.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dac.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_can.h + $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.lst + $PROJ_DIR$\..\obj\stm32f0xx_exti.o $PROJ_DIR$\..\obj\stm32f0xx_rtc.lst $PROJ_DIR$\..\obj\stm32f0xx_misc.pbi $PROJ_DIR$\..\stm32f0xx_it.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h + $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.h $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_rtc.h $PROJ_DIR$\..\obj\stm32f0_discovery.o $PROJ_DIR$\..\obj\stm32f0xx_wwdg.pbi - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_dbgmcu.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_cec.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_tim.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_i2c.h - $PROJ_DIR$\..\bin\stm32f0.out - $PROJ_DIR$\..\obj\stm32f0xx_rcc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_crs.o - $PROJ_DIR$\..\obj\stm32f0xx_tim.lst - $PROJ_DIR$\..\obj\stm32f0xx_dma.o - $PROJ_DIR$\..\obj\stm32f0xx_gpio.pbi + $PROJ_DIR$\..\obj\stm32f0xx_spi.lst + $TOOLKIT_DIR$\lib\shb_l.a + $PROJ_DIR$\..\obj\main.o + $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c + $PROJ_DIR$\..\obj\main.pbi + $TOOLKIT_DIR$\lib\rt6M_tl.a + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s + $PROJ_DIR$\..\..\..\..\Source\plausibility.h + $PROJ_DIR$\..\..\..\..\Source\xcp.h + $PROJ_DIR$\..\obj\stm32f0xx_misc.lst + $PROJ_DIR$\..\..\..\..\Source\timer.h + $PROJ_DIR$\..\obj\stm32f0xx_it.o + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_cec.h + $PROJ_DIR$\..\lib\cmsis\core_cm0.h + $PROJ_DIR$\..\obj\stm32f0xx_it.pbi + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c + $PROJ_DIR$\..\obj\main.lst + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_crc.h + $PROJ_DIR$\..\obj\stm32f0xx_it.lst + $PROJ_DIR$\..\bin\stm32f0.srec + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_adc.h + $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_adc.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + $PROJ_DIR$\..\obj\stm32f0xx_cec.o + $PROJ_DIR$\..\obj\system_stm32f0xx.pbi + $PROJ_DIR$\..\obj\stm32f0xx_rcc.lst + $PROJ_DIR$\..\..\..\..\Source\xcp.c + $PROJ_DIR$\..\obj\stm32f0xx_pwr.lst + $TOOLKIT_DIR$\inc\c\DLib_Product.h + $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h + $PROJ_DIR$\..\obj\stm32f0xx_crc.lst + $PROJ_DIR$\..\obj\stm32f0xx_crs.lst + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\types.h + $TOOLKIT_DIR$\inc\c\ycheck.h + $TOOLKIT_DIR$\lib\m6M_tl.a + $TOOLKIT_DIR$\inc\c\stdint.h + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c + $PROJ_DIR$\..\stm32f0xx_it.c + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmInstr.h + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s + $PROJ_DIR$\..\..\..\..\Source\nvm.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c + $TOOLKIT_DIR$\inc\c\DLib_Defaults.h + $PROJ_DIR$\..\system_stm32f0xx.c + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Include\stm32f0xx.h + $TOOLKIT_DIR$\inc\c\DLib_Threads.h + $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c + $PROJ_DIR$\..\obj\stm32f0xx_gpio.lst + $TOOLKIT_DIR$\inc\c\xencoding_limits.h + $PROJ_DIR$\..\obj\stm32f0xx_comp.lst + $PROJ_DIR$\..\..\..\..\Source\uart.h + $PROJ_DIR$\..\obj\stm32f0xx_rcc.o + $TOOLKIT_DIR$\lib\dl6M_tln.a + $PROJ_DIR$\..\hooks.c + $PROJ_DIR$\..\obj\system_stm32f0xx.lst + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c + $PROJ_DIR$\..\obj\stm32f0.pbd + $PROJ_DIR$\..\cfg\stm32f0xx_flash.icf + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\obj\stm32f0xx_misc.o + $PROJ_DIR$\..\bin\IO_Toggle.out + $PROJ_DIR$\..\boot.c + $PROJ_DIR$\..\led.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + $PROJ_DIR$\..\led.c + $PROJ_DIR$\..\main.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h + $PROJ_DIR$\..\startup_stm32f051x8.s + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Include\system_stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + $PROJ_DIR$\..\lib\system_stm32f0xx.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart.h + $PROJ_DIR$\..\boot.h + $PROJ_DIR$\..\header.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h + $PROJ_DIR$\..\obj\stm32f0xx_cec.lst + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c + $PROJ_DIR$\..\timer.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h + $PROJ_DIR$\..\timer.c + $PROJ_DIR$\..\blt_conf.h $PROJ_DIR$\..\obj\stm32f0xx_can.o - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.lst - $PROJ_DIR$\..\obj\stm32f0xx_dac.o - $PROJ_DIR$\..\obj\stm32f0xx_adc.o - $PROJ_DIR$\..\obj\stm32f0xx_flash.o - $PROJ_DIR$\..\obj\stm32f0xx_gpio.o - $PROJ_DIR$\..\obj\stm32f0xx_usart.lst + $PROJ_DIR$\..\bin\stm32f0.out $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_spi.h - $PROJ_DIR$\..\obj\hooks.o - $PROJ_DIR$\..\obj\stm32f0xx_can.pbi $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_misc.h - $PROJ_DIR$\..\obj\stm32f0xx_rtc.o - $PROJ_DIR$\..\obj\boot.o - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_rcc.h $PROJ_DIR$\..\obj\stm32f0xx_pwr.o + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_i2c.h + $PROJ_DIR$\..\obj\stm32f0xx_dma.o $PROJ_DIR$\..\obj\timer.lst - $PROJ_DIR$\..\obj\stm32f0xx_cec.pbi - $PROJ_DIR$\..\obj\boot.pbi $PROJ_DIR$\..\obj\stm32f0xx_syscfg.lst + $PROJ_DIR$\..\obj\boot.pbi + $PROJ_DIR$\..\obj\stm32f0xx_gpio.o + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_tim.h + $PROJ_DIR$\..\obj\stm32f0xx_rtc.o $PROJ_DIR$\..\obj\stm32f0xx_comp.o $PROJ_DIR$\..\obj\stm32f0xx_i2c.lst + $PROJ_DIR$\..\obj\stm32f0xx_gpio.pbi + $PROJ_DIR$\..\obj\boot.o + $PROJ_DIR$\..\obj\stm32f0xx_adc.o + $PROJ_DIR$\..\obj\stm32f0xx_rcc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_tim.lst + $PROJ_DIR$\..\obj\hooks.o + $PROJ_DIR$\..\obj\stm32f0xx_dac.o $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_iwdg.h $PROJ_DIR$\..\obj\stm32f0_discovery.pbi - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_usart.h - $PROJ_DIR$\..\obj\stm32f0xx_usart.pbi - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_pwr.h - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_exti.h + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.lst + $PROJ_DIR$\..\obj\stm32f0xx_usart.lst + $PROJ_DIR$\..\obj\stm32f0xx_can.pbi + $PROJ_DIR$\..\obj\stm32f0xx_cec.pbi + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_rcc.h + $PROJ_DIR$\..\obj\stm32f0xx_crs.o + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_cec.h + $PROJ_DIR$\..\obj\stm32f0xx_flash.o $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_gpio.h $PROJ_DIR$\..\obj\stm32f0xx_i2c.o - $PROJ_DIR$\..\obj\assert.lst - $PROJ_DIR$\..\..\..\..\Source\file.h - $PROJ_DIR$\..\obj\stm32f0xx_usart.o - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_flash.h - $PROJ_DIR$\..\obj\xcp.pbi - $PROJ_DIR$\..\obj\backdoor.pbi - $PROJ_DIR$\..\obj\stm32f0xx_flash.lst - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_syscfg.h - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et - $PROJ_DIR$\..\obj\cop.lst - $PROJ_DIR$\..\..\Boot\blt_conf.h - $PROJ_DIR$\..\obj\stm32f0xx_crs.__cstat.et - $PROJ_DIR$\..\obj\led.pbi - $PROJ_DIR$\..\obj\led.o - $PROJ_DIR$\..\obj\flash.o - $PROJ_DIR$\..\obj\assert.o - $PROJ_DIR$\..\obj\led.lst - $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_tim.o - $PROJ_DIR$\..\obj\cop.pbi + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_pwr.h $PROJ_DIR$\..\obj\cpu.lst - $PROJ_DIR$\..\obj\backdoor.lst + $PROJ_DIR$\..\..\Boot\blt_conf.h + $PROJ_DIR$\..\obj\stm32f0xx_usart.o $PROJ_DIR$\..\obj\xcp.o $PROJ_DIR$\..\obj\stm32f0xx_iwdg.o - $PROJ_DIR$\..\obj\cpu.pbi - $PROJ_DIR$\..\obj\assert.pbi - $PROJ_DIR$\..\obj\demoprog_stm32f051.map - $PROJ_DIR$\..\obj\xcp.lst - $PROJ_DIR$\..\obj\boot.lst - $PROJ_DIR$\..\obj\com.pbi - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o - $PROJ_DIR$\..\obj\cop.o - $PROJ_DIR$\..\obj\stm32f0xx_misc.__cstat.et - $PROJ_DIR$\..\obj\backdoor.o - $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_spi.o - $PROJ_DIR$\..\obj\stm32f0xx_adc.pbi - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_wwdg.h - $PROJ_DIR$\..\obj\com.o - $PROJ_DIR$\..\obj\nvm.lst - $PROJ_DIR$\..\obj\flash.pbi - $PROJ_DIR$\..\obj\stm32f0xx_dac.__cstat.et - $PROJ_DIR$\..\bin\demoprog_stm32f051.out - $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_spi.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_exti.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.__cstat.et - $PROJ_DIR$\..\obj\timer.__cstat.et - $PROJ_DIR$\..\src\hw\startup_stm32f0xx.s - $PROJ_DIR$\..\src\hw\system_stm32f0xx.c - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_flash.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dma.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et - $PROJ_DIR$\..\obj\timer.o - $PROJ_DIR$\..\obj\main.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_cec.__cstat.et - $PROJ_DIR$\..\obj\nvm.pbi - $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et - $PROJ_DIR$\..\obj\flash.lst - $PROJ_DIR$\..\obj\nvm.o - $PROJ_DIR$\..\obj\stm32f0xx_rtc.__cstat.et - $PROJ_DIR$\..\stm32f0xx_flash.icf - $PROJ_DIR$\..\src\hw\system_stm32f0xx.h - $PROJ_DIR$\..\obj\cpu.o - $PROJ_DIR$\..\obj\hooks.pbi - $PROJ_DIR$\..\obj\uart.lst - $PROJ_DIR$\..\obj\stm32f0xx_pwr.__cstat.et - $PROJ_DIR$\..\obj\hooks.lst - $PROJ_DIR$\..\obj\com.lst - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h - $PROJ_DIR$\..\lib\stm32f0xx_conf.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h - $PROJ_DIR$\..\obj\stm32f0xx_pwr.pbi - $PROJ_DIR$\..\..\..\..\Source\cop.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_usart.h + $PROJ_DIR$\..\obj\stm32f0xx_flash.lst + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o + $PROJ_DIR$\..\obj\backdoor.lst + $PROJ_DIR$\..\obj\led.o + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_exti.h + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_flash.h + $PROJ_DIR$\..\obj\backdoor.pbi + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_syscfg.h + $PROJ_DIR$\..\obj\assert.lst + $PROJ_DIR$\..\obj\stm32f0xx_usart.pbi + $PROJ_DIR$\..\obj\stm32f0xx_crs.__cstat.et + $PROJ_DIR$\..\..\..\..\Source\file.h + $PROJ_DIR$\..\obj\xcp.pbi + $PROJ_DIR$\..\obj\cop.lst + $PROJ_DIR$\..\obj\flash.o + $PROJ_DIR$\..\obj\assert.o + $PROJ_DIR$\..\obj\stm32f0xx_tim.o + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et + $PROJ_DIR$\..\obj\led.lst + $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et + $PROJ_DIR$\..\obj\cop.pbi $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c $PROJ_DIR$\..\..\..\..\Source\com.h $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_syscfg.h + $PROJ_DIR$\..\lib\stm32f0xx_conf.h + $PROJ_DIR$\..\..\..\..\Source\cop.c + $PROJ_DIR$\..\obj\nvm.pbi + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_misc.h + $PROJ_DIR$\..\obj\nvm.o + $PROJ_DIR$\..\obj\stm32f0xx_pwr.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_dma.pbi - $PROJ_DIR$\..\obj\stm32f0xx_dma.lst - $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi - $PROJ_DIR$\..\..\..\..\Source\com.c - $PROJ_DIR$\..\obj\stm32f0xx_crs.pbi - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c - $PROJ_DIR$\..\..\..\..\Source\cop.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h - $PROJ_DIR$\..\obj\stm32f0xx_exti.lst - $PROJ_DIR$\..\startup_stm32f0xx.s - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - $PROJ_DIR$\..\lib\stm32f0xx.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h - $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h - $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c - $PROJ_DIR$\..\bin\openblt_stm32f051.srec - $PROJ_DIR$\..\bin\demoprog_stm32f051.srec - $PROJ_DIR$\..\obj\timer.pbi - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\memory.x - $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et - $PROJ_DIR$\..\obj\boot.__cstat.et - $PROJ_DIR$\..\obj\cstart.o + $PROJ_DIR$\..\src\hw\system_stm32f0xx.h + $PROJ_DIR$\..\obj\hooks.pbi + $PROJ_DIR$\..\obj\flash.lst + $PROJ_DIR$\..\obj\cpu.o + $PROJ_DIR$\..\obj\uart.lst + $PROJ_DIR$\..\obj\hooks.lst + $PROJ_DIR$\..\obj\com.lst + $PROJ_DIR$\..\obj\main.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_cec.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et + $PROJ_DIR$\..\obj\timer.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h + $PROJ_DIR$\..\obj\stm32f0xx_rtc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_pwr.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h + $PROJ_DIR$\..\stm32f0xx_flash.icf + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dma.__cstat.et + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc\stm32f0xx_wwdg.h + $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dac.__cstat.et + $PROJ_DIR$\..\bin\demoprog_stm32f051.out + $PROJ_DIR$\..\obj\demoprog_stm32f051.map + $PROJ_DIR$\..\obj\stm32f0xx_spi.__cstat.et + $PROJ_DIR$\..\src\hw\system_stm32f0xx.c + $PROJ_DIR$\..\obj\xcp.lst + $PROJ_DIR$\..\obj\boot.lst + $PROJ_DIR$\..\obj\cpu.pbi + $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_spi.o + $PROJ_DIR$\..\obj\flash.pbi + $PROJ_DIR$\..\obj\timer.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.__cstat.et + $PROJ_DIR$\..\obj\assert.pbi + $PROJ_DIR$\..\obj\stm32f0xx_misc.__cstat.et + $PROJ_DIR$\..\src\hw\startup_stm32f0xx.s + $PROJ_DIR$\..\obj\stm32f0xx_adc.pbi + $PROJ_DIR$\..\obj\nvm.lst + $PROJ_DIR$\..\obj\cop.o + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_exti.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_flash.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o + $PROJ_DIR$\..\obj\com.pbi + $PROJ_DIR$\..\obj\backdoor.o + $PROJ_DIR$\..\obj\com.o $PROJ_DIR$\..\obj\uart.pbi $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h $PROJ_DIR$\..\obj\stm32f0xx_tim.__cstat.et $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dma.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rcc.h + $PROJ_DIR$\..\bin\openblt_stm32f051.srec + $PROJ_DIR$\..\obj\timer.pbi + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + $PROJ_DIR$\..\obj\cstart.o $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_exti.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c - $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et - $PROJ_DIR$\..\obj\led.__cstat.et - $PROJ_DIR$\..\src\app\main.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_flash.h - $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et - $PROJ_DIR$\..\obj\uart.o + $PROJ_DIR$\..\obj\stm32f0xx_dma.lst + $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\memory.x + $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi + $PROJ_DIR$\..\obj\stm32f0xx_exti.lst + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + $PROJ_DIR$\..\..\..\..\Source\cop.h + $PROJ_DIR$\..\lib\stm32f0xx.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h + $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi + $PROJ_DIR$\..\..\..\..\Source\com.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + $PROJ_DIR$\..\startup_stm32f0xx.s + $PROJ_DIR$\..\bin\demoprog_stm32f051.srec + $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h + $PROJ_DIR$\..\obj\stm32f0xx_crs.pbi + $PROJ_DIR$\..\obj\boot.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c - $PROJ_DIR$\..\bin\openblt_stm32f051.out + $PROJ_DIR$\..\obj\led.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_tim.pbi $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.o + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmFunc.h + $PROJ_DIR$\..\..\..\..\Source\assert.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_flash.h + $TOOLKIT_DIR$\inc\c\yvals.h + $PROJ_DIR$\..\obj\uart.o $PROJ_DIR$\..\..\..\..\Source\backdoor.c $PROJ_DIR$\..\obj\stm32f0xx_spi.pbi $PROJ_DIR$\..\..\..\..\Source\boot.h - $TOOLKIT_DIR$\inc\c\yvals.h - $PROJ_DIR$\..\obj\startup_stm32f051x8.o $PROJ_DIR$\..\obj\stm32f0xx_crc.pbi - $PROJ_DIR$\..\..\..\..\Source\assert.h - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.lst - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi - $PROJ_DIR$\..\obj\stm32f0xx_tim.pbi - $PROJ_DIR$\..\..\..\..\Source\cpu.h - $TOOLKIT_DIR$\inc\c\cmsis_iar.h $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.lst + $PROJ_DIR$\..\..\..\..\Source\cpu.h + $PROJ_DIR$\..\obj\startup_stm32f051x8.o + $TOOLKIT_DIR$\inc\c\cmsis_iar.h $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cm0.h - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\Include\core_cmFunc.h - $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi - $PROJ_DIR$\..\obj\stm32f0xx_can.lst - $PROJ_DIR$\..\stm32f0xx_conf.h - $PROJ_DIR$\..\obj\stm32f0xx_dac.lst - $TOOLKIT_DIR$\inc\c\stdio.h - $TOOLKIT_DIR$\inc\c\ysizet.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o - $PROJ_DIR$\..\obj\startup_stm32f0xx.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_exti.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h + $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et + $PROJ_DIR$\..\src\app\main.c + $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et + $PROJ_DIR$\..\bin\openblt_stm32f051.out + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi $PROJ_DIR$\..\..\..\..\Source\assert.c - $PROJ_DIR$\..\lib\system_stm32f0xx.h - $PROJ_DIR$\..\..\..\..\Source\boot.c $PROJ_DIR$\..\obj\system_stm32f0xx.o + $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi + $PROJ_DIR$\..\..\..\..\Source\boot.c $PROJ_DIR$\..\..\..\..\Source\backdoor.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.o - $TOOLKIT_DIR$\inc\c\intrinsics.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.o $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.o + $TOOLKIT_DIR$\inc\c\intrinsics.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.pbi + $PROJ_DIR$\..\obj\stm32f0xx_dac.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_can.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.o + $PROJ_DIR$\..\stm32f0xx_conf.h $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.o + $PROJ_DIR$\..\obj\startup_stm32f0xx.o + $PROJ_DIR$\..\lib\system_stm32f0xx.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.pbi + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.o $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.lst $PROJ_DIR$\..\obj\stm32f0xx_hal.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.lst + $TOOLKIT_DIR$\inc\c\ysizet.h + $TOOLKIT_DIR$\inc\c\stdio.h $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.lst $PROJ_DIR$\..\obj\stm32f0xx_hal.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.lst - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.xcl + $PROJ_DIR$\..\obj\timer.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.xcl + $PROJ_DIR$\..\obj\system_stm32f0xx.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.lst + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl + $PROJ_DIR$\..\obj\main.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.xcl $PROJ_DIR$\..\obj\led.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.xcl - $PROJ_DIR$\..\obj\timer.xcl - $PROJ_DIR$\..\obj\main.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.xcl - $PROJ_DIR$\..\obj\system_stm32f0xx.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.xcl - $PROJ_DIR$\..\obj\boot.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.lst $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.xcl $TOOLKIT_DIR$\inc\c\iccarm_builtin.h + $PROJ_DIR$\..\obj\boot.xcl - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + [ROOT_NODE] + + + ILINK + 250 251 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c ICCARM - 370 383 + 406 350 __cstat - 400 + 371 BICOMP - 418 + 394 ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + + + ICCARM + 360 348 + + + __cstat + 378 + + + BICOMP + 387 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 @@ -471,335 +486,44 @@ ICCARM - 402 356 + 390 357 __cstat - 387 + 377 BICOMP - 419 + 405 ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 - [ROOT_NODE] - - - ILINK - 231 215 - - - - - $PROJ_DIR$\..\bin\IO_Toggle.out - - - OBJCOPY - 61 - - - - - ILINK - 15 58 346 147 164 57 12 40 350 49 53 17 42 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c ICCARM - 33 164 + 361 375 + + + __cstat + 369 BICOMP - 158 + 385 ICCARM - 187 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 196 152 180 185 172 146 166 151 183 226 169 - - - BICOMP - 187 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 196 152 180 185 172 146 166 151 183 226 169 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c - - - ICCARM - 249 203 - - - BICOMP - 229 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\stm32f0xx_it.c - - - ICCARM - 63 57 - - - BICOMP - 56 - - - - - ICCARM - 145 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 169 - - - BICOMP - 145 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 169 - - - - - $PROJ_DIR$\..\system_stm32f0xx.c - - - ICCARM - 43 350 - - - BICOMP - 62 - - - - - ICCARM - 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 169 - - - BICOMP - 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 169 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c - - - ICCARM - 72 12 - - - BICOMP - 144 - - - - - ICCARM - 169 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 - - - BICOMP - 169 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 - - - - - $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c - - - ICCARM - 135 147 - - - BICOMP - 181 - - - - - ICCARM - 112 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 169 - - - BICOMP - 112 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 172 146 166 151 183 226 169 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s - - - AARM - 346 - - - - - $PROJ_DIR$\..\hooks.c - - - ICCARM - 258 167 - - - BICOMP - 255 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 105 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c - - - ICCARM - 209 254 - - - BICOMP - 213 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\..\..\..\Source\xcp.c - - - ICCARM - 216 211 - - - BICOMP - 193 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s - - - AARM - 299 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c - - - ICCARM - 174 244 - - - BICOMP - 295 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c - - - ICCARM - 228 250 - - - BICOMP - 247 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 45 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 45 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c - - - ICCARM - 256 320 - - - BICOMP - 300 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 @@ -808,90 +532,67 @@ ICCARM - 385 364 + 373 352 __cstat - 414 + 399 BICOMP - 416 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c - - - ICCARM - 386 323 - - - __cstat - 395 - - - BICOMP - 431 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - - - ICCARM - 407 360 - - - __cstat - 396 - - - BICOMP - 420 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - - - ICCARM - 390 365 - - - __cstat 404 + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + + + ICCARM + 396 358 + + + __cstat + 400 + BICOMP - 435 + 402 ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + + + ICCARM + 381 346 + + + __cstat + 382 + + + BICOMP + 408 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 @@ -900,34 +601,11 @@ ICCARM - 397 345 + 366 347 __cstat - 406 - - - BICOMP - 429 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c - - - ICCARM - 408 371 - - - __cstat - 413 + 397 BICOMP @@ -937,306 +615,30 @@ ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c ICCARM - 394 357 + 412 383 __cstat - 393 + 395 BICOMP - 423 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - - - ICCARM - 411 373 - - - __cstat - 405 - - - BICOMP - 426 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c - - - ICCARM - 403 366 - - - __cstat - 410 - - - BICOMP - 417 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c - - - ICCARM - 412 352 - - - __cstat 401 - - BICOMP - 430 - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - - - ICCARM - 369 359 - - - __cstat - 389 - - - BICOMP - 427 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - - - ICCARM - 399 384 - - - __cstat - 388 - - - BICOMP - 428 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c - - - ICCARM - 398 358 - - - __cstat - 409 - - - BICOMP - 421 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c - - - ICCARM - 391 354 - - - __cstat - 392 - - - BICOMP - 433 - - - - - ICCARM - 3 76 84 98 0 9 7 18 21 327 28 31 29 8 335 436 5 1 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c - - - ICCARM - 26 178 - - - __cstat - 206 - - - BICOMP - 65 - - - - - ICCARM - 110 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - - - ICCARM - 36 137 - - - __cstat - 319 - - - BICOMP - 329 - - - - - ICCARM - 111 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\boot.c - - - ICCARM - 217 171 - - - __cstat - 298 - - - BICOMP - 434 - - - - - ICCARM - 114 199 0 9 7 18 21 327 28 31 29 8 335 436 5 1 3 76 84 98 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 124 105 117 - - - - - $PROJ_DIR$\..\timer.c - - - ICCARM - 174 244 - - - __cstat - 237 - - - BICOMP - 424 - - - - - ICCARM - 114 199 0 9 7 18 21 327 28 31 29 8 335 436 5 1 3 76 84 98 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 124 105 117 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - - - ICCARM - 37 155 - - - __cstat - 200 - - - BICOMP - 279 - - - - - ICCARM - 131 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 @@ -1245,579 +647,12 @@ ICCARM - 142 162 - - - __cstat - 248 - - - BICOMP - 225 - - - - - ICCARM - 107 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\led.c - - - ICCARM - 205 202 - - - __cstat - 315 - - - BICOMP - 422 - - - - - ICCARM - 114 199 0 9 7 18 21 327 28 31 29 8 335 436 5 1 3 76 84 98 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 124 105 117 - - - - - $PROJ_DIR$\..\startup_stm32f051x8.s - - - AARM - 328 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - - - ICCARM - 331 67 - - - __cstat - 234 - - - BICOMP - 336 - - - - - ICCARM - 113 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c - - - ICCARM - 276 157 - - - __cstat - 242 - - - BICOMP - 275 - - - - - ICCARM - 304 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - - - ICCARM - 342 161 - - - __cstat - 230 - - - BICOMP - 269 - - - - - ICCARM - 119 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\system_stm32f0xx.c - - - ICCARM - 43 350 - - - __cstat - 297 - - - BICOMP - 432 - - - - - ICCARM - 0 9 7 18 21 327 28 31 29 8 335 436 5 1 3 76 84 98 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 - - - - - $PROJ_DIR$\..\main.c - - - ICCARM - 48 58 - - - __cstat - 245 - - - BICOMP - 425 - - - - - ICCARM - 114 199 0 9 7 18 21 327 28 31 29 8 335 436 5 1 3 76 84 98 343 344 74 89 75 88 97 6 93 90 94 96 82 78 80 73 124 105 117 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - - - ICCARM - 340 159 - - - __cstat - 232 - - - BICOMP - 168 - - - - - ICCARM - 121 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c - - - ICCARM - 13 52 - - - __cstat - 246 - - - BICOMP - 175 - - - - - ICCARM - 103 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\bin\stm32f0.out - - - OBJCOPY - 61 - - - - - ILINK - 296 204 222 171 227 220 254 299 203 167 202 58 250 162 159 52 178 137 155 161 67 157 141 163 164 188 212 12 173 40 170 224 219 207 191 182 350 244 320 211 49 53 17 42 - - - - - $PROJ_DIR$\..\bin\demoprog_stm32f051.out - - - OBJCOPY - 294 - - - ILINK - 215 - - - - - ILINK - 252 171 202 58 328 383 356 371 364 366 357 345 352 359 384 365 360 373 358 323 354 350 244 49 53 17 42 - - - - - $PROJ_DIR$\..\src\hw\startup_stm32f0xx.s - - - AARM - 346 - - - - - $PROJ_DIR$\..\src\hw\system_stm32f0xx.c - - - ICCARM - 43 350 - - - BICOMP - 62 - - - - - ICCARM - 287 104 18 21 327 28 31 29 34 27 106 335 353 125 253 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - BICOMP - 287 104 18 21 327 28 31 29 34 27 106 335 353 125 253 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\..\..\..\Source\cop.c - - - ICCARM - 198 220 - - - BICOMP - 208 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - - - ICCARM - 55 40 - - - __cstat - 314 - - - BICOMP - 154 - - - - - ICCARM - 305 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - - - ICCARM - 165 191 - - - __cstat - 318 - - - BICOMP - 184 - - - - - ICCARM - 264 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c - - - ICCARM - 33 164 - - - __cstat - 243 - - - BICOMP - 158 - - - - - ICCARM - 260 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c - - - ICCARM - 156 207 - - - __cstat - 303 - - - BICOMP - 333 - - - - - ICCARM - 288 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 264 302 274 - - - - - $PROJ_DIR$\..\..\..\..\Source\com.c - - - ICCARM - 259 227 - - - BICOMP - 218 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 39 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c - - - ICCARM - 136 224 + 38 167 __cstat 233 - - BICOMP - 325 - - - - - ICCARM - 290 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c - - - ICCARM - 284 141 - - - __cstat - 235 - - - BICOMP - 277 - - - - - ICCARM - 312 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\startup_stm32f0xx.s - - - AARM - 346 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - - - ICCARM - 177 219 - - - __cstat - 236 - - - BICOMP - 332 - - - - - ICCARM - 273 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c - - - ICCARM - 138 212 - - - __cstat - 197 - - - BICOMP - 263 - - - - - ICCARM - 308 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c - - - ICCARM - 160 182 - - - __cstat - 240 - - - BICOMP - 148 - - - - - ICCARM - 302 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 274 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c - - - ICCARM - 72 12 - - - __cstat - 221 - - - BICOMP - 144 - - - - - ICCARM - 274 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - - - ICCARM - 51 173 - - - __cstat - 257 - BICOMP 265 @@ -1826,192 +661,89 @@ ICCARM - 310 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 305 283 290 288 264 302 274 + 82 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c ICCARM - 179 188 + 287 156 __cstat + 246 + + + BICOMP 223 - - BICOMP - 339 - ICCARM - 262 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 308 310 305 283 290 288 264 302 274 + 278 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 331 314 241 214 235 332 329 280 295 283 303 218 279 220 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c ICCARM - 143 170 + 349 171 __cstat - 251 + 249 BICOMP - 291 + 239 ICCARM - 283 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 290 288 264 302 274 + 42 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c ICCARM - 195 163 + 323 70 __cstat - 241 + 268 BICOMP - 289 + 321 ICCARM - 317 287 104 18 21 327 28 31 29 34 27 106 335 353 125 348 261 107 121 103 111 131 110 119 113 304 312 260 273 262 308 310 305 283 290 288 264 302 274 + 40 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 - $PROJ_DIR$\..\src\app\main.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c ICCARM - 48 58 + 351 150 - BICOMP - 59 - - - - - ICCARM - 261 107 287 104 18 21 327 28 31 29 34 27 106 335 353 125 253 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - BICOMP - 261 107 287 104 18 21 327 28 31 29 34 27 106 335 353 125 253 121 103 111 131 110 119 113 304 312 317 260 273 262 308 310 305 283 290 288 264 302 274 - - - - - $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c - - - ICCARM - 55 40 - - - BICOMP - 154 - - - - - ICCARM - 172 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 146 166 151 183 226 169 - - - BICOMP - 172 16 337 18 21 327 28 31 29 34 27 35 335 353 338 11 341 68 150 50 134 140 149 139 186 192 187 196 152 180 185 146 166 151 183 226 169 - - - - - $PROJ_DIR$\..\bin\openblt_stm32f051.out - - - OBJCOPY - 293 - - - - - ILINK - 296 204 222 171 227 220 254 299 203 167 202 58 250 162 159 52 178 137 155 161 67 157 141 163 164 188 212 12 173 40 170 224 219 207 191 182 350 244 320 211 49 53 17 42 - - - - - $PROJ_DIR$\..\..\..\..\Source\backdoor.c - - - ICCARM - 210 222 - - - BICOMP - 194 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 - - - - - $PROJ_DIR$\..\..\..\..\Source\assert.c - - - ICCARM - 189 204 - - - BICOMP - 214 - - - - - ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 - - - BICOMP - 326 20 330 64 334 282 22 69 351 190 272 - - - - - $PROJ_DIR$\..\..\..\..\Source\boot.c - - - ICCARM - 217 171 + __cstat + 245 BICOMP @@ -2021,28 +753,1267 @@ ICCARM - 326 20 330 10 64 334 282 22 69 351 190 272 71 + 44 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c + + + ICCARM + 92 179 + + + __cstat + 201 BICOMP - 326 20 330 64 334 282 22 69 351 190 272 + 304 + + + + + ICCARM + 33 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + + + ICCARM + 91 41 + + + __cstat + 309 + + + BICOMP + 320 + + + + + ICCARM + 43 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + + + ICCARM + 143 84 + + + __cstat + 232 + + + BICOMP + 177 + + + + + ICCARM + 72 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c + + + ICCARM + 228 316 + + + BICOMP + 275 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\IAR\cstart.s + + + AARM + 285 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\timer.c + + + ICCARM + 157 234 + + + BICOMP + 282 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\nvm.c + + + ICCARM + 266 221 + + + BICOMP + 217 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 116 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 116 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + + + ICCARM + 110 163 + + + __cstat + 210 + + + BICOMP + 60 + + + + + ICCARM + 52 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Source\xcp.c + + + ICCARM + 254 188 + + + BICOMP + 203 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c + + + ICCARM + 67 121 + + + BICOMP + 50 + + + + + ICCARM + 153 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 + + + BICOMP + 153 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 + + + + + $PROJ_DIR$\..\stm32f0xx_it.c + + + ICCARM + 78 69 + + + BICOMP + 74 + + + + + ICCARM + 51 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 153 + + + BICOMP + 51 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 153 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\ST\STM32F0xx\Source\Templates\iar\startup_stm32f0xx.s + + + AARM + 355 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c + + + ICCARM + 226 205 + + + BICOMP + 259 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\system_stm32f0xx.c + + + ICCARM + 115 339 + + + BICOMP + 85 + + + + + ICCARM + 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 153 + + + BICOMP + 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 153 + + + + + $PROJ_DIR$\..\..\..\..\Utilities\STM32F0-Discovery\stm32f0_discovery.c + + + ICCARM + 35 55 + + + BICOMP + 173 + + + + + ICCARM + 53 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 153 + + + BICOMP + 53 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 178 54 152 161 190 247 153 + + + + + $PROJ_DIR$\..\hooks.c + + + ICCARM + 229 170 + + + BICOMP + 225 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 124 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c + + + ICCARM + 185 227 + + + BICOMP + 256 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c + + + ICCARM + 108 160 + + + BICOMP + 165 + + + + + ICCARM + 182 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 198 155 172 184 178 54 152 161 190 247 153 + + + BICOMP + 182 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 198 155 172 184 178 54 152 161 190 247 153 + + + + + $PROJ_DIR$\..\bin\IO_Toggle.out + + + OBJCOPY + 79 + + + + + ILINK + 119 59 355 55 160 69 121 112 339 58 63 95 113 + + + + + $PROJ_DIR$\..\boot.c + + + ICCARM + 255 166 + + + __cstat + 305 + + + BICOMP + 419 + + + + + ICCARM + 141 186 5 10 0 96 94 315 103 90 89 24 326 418 2 11 6 129 142 16 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 140 124 146 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + + + ICCARM + 380 354 + + + __cstat + 403 + + + BICOMP + 417 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\led.c + + + ICCARM + 209 194 + + + __cstat + 308 + + + BICOMP + 414 + + + + + ICCARM + 141 186 5 10 0 96 94 315 103 90 89 24 326 418 2 11 6 129 142 16 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 140 124 146 + + + + + $PROJ_DIR$\..\main.c + + + ICCARM + 76 59 + + + __cstat + 231 + + + BICOMP + 411 + + + + + ICCARM + 141 186 5 10 0 96 94 315 103 90 89 24 326 418 2 11 6 129 142 16 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 140 124 146 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + + + ICCARM + 368 376 + + + __cstat + 384 + + + BICOMP + 410 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\startup_stm32f051x8.s + + + AARM + 325 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + + + ICCARM + 409 359 + + + __cstat + 365 + + + BICOMP + 389 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + + + ICCARM + 367 343 + + + __cstat + 398 + + + BICOMP + 413 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + + + ICCARM + 379 311 + + + __cstat + 364 + + + BICOMP + 393 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + + + ICCARM + 374 344 + + + __cstat + 370 + + + BICOMP + 392 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\system_stm32f0xx.c + + + ICCARM + 115 339 + + + __cstat + 302 + + + BICOMP + 388 + + + + + ICCARM + 5 10 0 96 94 315 103 90 89 24 326 418 2 11 6 129 142 16 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c + + + ICCARM + 416 372 + + + __cstat + 391 + + + BICOMP + 407 + + + + + ICCARM + 6 129 142 16 5 10 0 96 94 315 103 90 89 24 326 418 2 11 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 + + + + + $PROJ_DIR$\..\timer.c + + + ICCARM + 157 234 + + + __cstat + 260 + + + BICOMP + 386 + + + + + ICCARM + 141 186 5 10 0 96 94 315 103 90 89 24 326 418 2 11 6 129 142 16 363 362 132 25 20 14 1 13 17 23 3 7 147 144 139 134 140 124 146 + + + + + $PROJ_DIR$\..\bin\stm32f0.out + + + OBJCOPY + 79 + + + + + ILINK + 289 206 273 166 274 267 227 285 205 170 194 59 221 167 150 84 163 41 179 171 70 156 48 181 160 183 189 121 154 112 162 258 271 207 187 192 339 234 316 188 58 63 95 113 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + + + ICCARM + 169 207 + + + __cstat + 277 + + + BICOMP + 310 + + + + + ICCARM + 303 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Source\cop.c + + + ICCARM + 204 267 + + + BICOMP + 211 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c + + + ICCARM + 175 187 + + + __cstat + 335 + + + BICOMP + 200 + + + + + ICCARM + 218 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + + + ICCARM + 86 112 + + + __cstat + 333 + + + BICOMP + 168 + + + + + ICCARM + 280 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + + + ICCARM + 108 160 + + + __cstat + 248 + + + BICOMP + 165 + + + + + ICCARM + 241 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\bin\demoprog_stm32f051.out + + + OBJCOPY + 301 + + + ILINK + 251 + + + + + ILINK + 242 166 194 59 325 375 357 383 352 358 346 347 350 348 376 354 359 372 343 311 344 339 234 58 63 95 113 + + + + + $PROJ_DIR$\..\src\hw\system_stm32f0xx.c + + + ICCARM + 115 339 + + + BICOMP + 85 + + + + + ICCARM + 294 73 96 94 315 103 90 89 109 106 81 326 345 45 224 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + BICOMP + 294 73 96 94 315 103 90 89 109 106 81 326 345 45 224 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\src\hw\startup_stm32f0xx.s + + + AARM + 355 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + + + ICCARM + 174 192 + + + __cstat + 244 + + + BICOMP + 56 + + + + + ICCARM + 279 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + + + ICCARM + 67 121 + + + __cstat + 263 + + + BICOMP + 50 + + + + + ICCARM + 220 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c + + + ICCARM + 88 154 + + + __cstat + 222 + + + BICOMP + 237 + + + + + ICCARM + 329 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + + + ICCARM + 47 189 + + + __cstat + 208 + + + BICOMP + 243 + + + + + ICCARM + 332 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Source\com.c + + + ICCARM + 230 274 + + + BICOMP + 272 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 111 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c + + + ICCARM + 57 258 + + + __cstat + 252 + + + BICOMP + 318 + + + + + ICCARM + 283 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + + + ICCARM + 291 48 + + + __cstat + 269 + + + BICOMP + 288 + + + + + ICCARM + 331 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\startup_stm32f0xx.s + + + AARM + 355 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c + + + ICCARM + 158 271 + + + __cstat + 261 + + + BICOMP + 337 + + + + + ICCARM + 214 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c + + + ICCARM + 86 112 + + + BICOMP + 168 + + + + + ICCARM + 178 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 54 152 161 190 247 153 + + + BICOMP + 178 105 327 96 94 315 103 90 89 109 106 99 326 345 312 131 353 80 180 77 34 31 32 37 195 196 182 198 155 172 184 54 152 161 190 247 153 + + + + + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + + + ICCARM + 193 273 + + + BICOMP + 197 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c + + + ICCARM + 49 162 + + + __cstat + 236 + + + BICOMP + 296 + + + + + ICCARM + 295 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 283 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + + + ICCARM + 164 183 + + + __cstat + 257 + + + BICOMP + 340 + + + + + ICCARM + 235 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 314 241 214 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c + + + ICCARM + 191 181 + + + __cstat + 270 + + + BICOMP + 290 + + + + + ICCARM + 314 294 73 96 94 315 103 90 89 109 106 81 326 345 45 356 215 82 44 72 43 33 52 42 40 278 331 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\src\app\main.c + + + ICCARM + 76 59 + + + BICOMP + 62 + + + + + ICCARM + 215 82 294 73 96 94 315 103 90 89 109 106 81 326 345 45 224 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + BICOMP + 215 82 294 73 96 94 315 103 90 89 109 106 81 326 345 45 224 44 72 43 33 52 42 40 278 331 314 241 214 235 332 329 280 295 283 303 218 279 220 + + + + + $PROJ_DIR$\..\bin\openblt_stm32f051.out + + + OBJCOPY + 281 + + + + + ILINK + 289 206 273 166 274 267 227 285 205 170 194 59 221 167 150 84 163 41 179 171 70 156 48 181 160 183 189 121 154 112 162 258 271 207 187 192 339 234 316 188 58 63 95 113 + + + + + $PROJ_DIR$\..\..\..\..\Source\assert.c + + + ICCARM + 199 206 + + + BICOMP + 262 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 + + + + + $PROJ_DIR$\..\..\..\..\Source\boot.c + + + ICCARM + 255 166 + + + BICOMP + 159 + + + + + ICCARM + 319 93 313 149 65 324 293 101 68 342 202 213 66 + + + BICOMP + 319 93 313 65 324 293 101 68 342 202 213 - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c - ICCARM - - - $PROJ_DIR$\..\hooks.c - ICCARM - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c - ICCARM - - - $PROJ_DIR$\..\..\..\..\Source\xcp.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c ICCARM @@ -2054,7 +2025,19 @@ ICCARM - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\uart.c + $PROJ_DIR$\..\..\..\..\Source\xcp.c + ICCARM + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\flash.c + ICCARM + + + $PROJ_DIR$\..\hooks.c + ICCARM + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32\cpu.c ICCARM diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2016 STMicroelectronics

+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/stm32f0xx_hal_conf.h index 2a508432..1908c7bc 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_IAR/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.axf b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.axf index 4e1d1fd3447077eb87dd17b3278b621d5a83a719..c84d01c9d8a7f0081014d63564d0fc620a4718f8 100644 GIT binary patch delta 22444 zcmbW933wF6*7xi5ESc#fFj;^k1TqN_0)$A|L_|nfhUKz^MFii$=Yd<8|W3m`~9R8Yi#?4Sl061ahU|I;%SCUfuiywCGao|^98Ij5>l zRaaM6Ro7(s($qzdrLKs#me=S)h?Pl$wRKS|AMU<#McB%n#ny@#Asn%u&NP_Ldmf_# zZD@4qHHy~ERFPlhsb|jUNELmnHja1f65@amPRDjpvAjxD%&Ve`UO2vWOH|xlRa5z6 zjbj(<9)x^omFE%j)ILvK7Zso1()tUht&pQ1^F?n?6-%#+6j4Uaoi3K!w&%O7{Y1t0 zw*eF)ZDk_WjC78dUbOy6T2`#*q^&(4BJF%Ab=fZw{aBhF+KbYJ)7oFpkF*XQt75lSEqYJyPZ=VlXMMfb z>G78G0X9cWP31<d(*j`f^^>5$t)1V_& z`{a#0vmzR6X|bMXBI2~}v7R>~2E^a0JX@19rGC;Xb413nux0W6dimTE_Ire9QB)G0 z@VpW=$Sf+Vsyu&1IdO8X$`cdaG_B3`+(PHvE`{X0g_#+t zOYdkYuc-_{5&gCQ;zR7o@NblG*_(W@dhc>)$>k+r{ey)6*e%l z>D2g*(`zbM-4rQdWi`(7!dsOWZh1yDY)4}~k2P#bA9>zt*ePM-t(>_TO_%mG{gC7o z6+cxK?y?WcnX+Zlgt;kAZdKOvP^0wtxwodmW`*BoJ8WzNolRbvZX`IkQAgTU`e>uR zM4IQTm<0Q<8@DPK-Mm$~-1BG5r;%ZC!nParkRpUIldyG+EBzuiEW~rm+1=wvjPaB? zqdnacSJMj5;lxIk!Z2Zr^F$;^txAe%kQyOu-4HDr0XM%`5-w~uR?=EeX412IJY-=A zRl@T_(%=ToNr>ezu|kAy#fTE-xu;oUD)EeNmN51TbleAV6i%+%&no%e^@S}P^314* zmuSzBKWQQM!VR|ZWhKN`a3om83yVal47bjB4mWFLc^&D*7`)p<%^PXW9iF)6ad&0G zy%>kjJ(W~ew6G2KC(ZgZe!WV%0^HH_ZgNzEqc~&dm1bjbh_Nj|JsE*OQ*oC~`OAa>GzQWjFFX z(6V8~T8Nzxvx*~c@+?kCu!KR{+>_HXszEg};wZ|IXcV^3~W0j>9oC%8k}}`zlmGuIihw%2qI6A!WzDuzZT=*EWr8C1^MrB%al&PU8;Z z+UOVQX_(s75)EAn7d0&dXYGtM{3KM{q38Y7E1EUd^K#qO*7B!9 zM8A=x-O@&zEROrpZc1NBze3i}z87L(|I+0hey?wJ_B4x~BT5(dnnacucwbU_srM?f zto8`8v~;oSv2;tf&1j0Hp>uafTC)!dv9@>V;V178v0mtG7R^VLwqNx-S^K4%Me*>` zmaBVc)~eoSvFP5?>1!PI>5S*4b4}&O(^TJL^rQ0BFnZaOwb>jBw?&d;311@5n9XOb z#W*P!rLNcJrCYcXmy~{X>~pfbk2tBW?4xAK!08B2{`o_(?e0S{?hqpCMUA3+4H-19ziZsE;poOaSr;)|E9V{m3mEj?WMk-60Q`_r0r?*t)IJ9%DApI_Scj~Qg?cBc>vN;mwO zYPK9e>K97ODu;zwH{F8)`Uk|;_M-ELq3u~)mGa>=r!-+*j~i$6KUOhREXk!-mV?!VX|~A6rzjV)sg(-`bv3r0#ayMPIIupzyW~g^x zHyUN3oiec}wGFro?zLz>I+|B8nq>E#CR$7SFn-t#%bl2;|6p!b&ctcC#ey6oaFLWP zU$*>7ImJ1`@#~3((v%@a&z)G_>x9;2ix7*D+)@NOO{TmY2y&<6OSo=mpW?V2nrB#hmMnQ^SzCcGnZBPI z$~$^eLO|tB;`_1?!3@`X{EtQptcGtRigISoo{?XyDo>eRsOwoWs@zv^d8pRE6$&h zTQCO~XFnv9A#v^3=ndRMNHq?DuA^cSAt*@2*L)ZV*9C1Ms-az!h_!WQlbh5m?^Ujy zZTK=iS;5z?O+QrQT!bmerpIB8vVGOle`Y>flu~X)@=@z$+&?HizWsb5w3TCAWm*(c zosOu*d?jX?@=~|RSxYEc?q07)$p?DToAPE)vT5xsGNczZwH;$0aSO5wCsGGngl!nY zS_|@hN~08OufjR~i)QuCpPe&ddafX4aD{}tXCac^)?RNU-yTRCq@xd+t?N-jVUSz-LR>t!tkfek z`F0lln8J^r?+`Yzc@0r}pSiDYm2!%PhWpRJ@-^qj*cF6$8{#d}sIM>Hu-w_~l~3z^ zYbbq3c7FEp(=lEyA5JkA1LcJVNk@St7^WZ3x}@BqebK0j6e%b1(U&Vp>z}G;6z(l=oGGt zTJ!gW*a3q*Y_x<-1uh6)2$i?;siPcRNN?d#T}UIs$D!Y&5qfrUfpCnIV`tGh+9rD! z(S@#67)b5Km~8e6AOJ^mcR3#BuH6}K@Ix5k<&77Hl4Kd@T&-+SPm+t z*l2~D0uARE)7N$$v8_j_mP6-IOtivdfrbm`Py(Hn>*mm*t~}NohOhu5njUCe7cJp% ztk;Z5!>1G!72jJpy&z{2hID?bZs7rrZGMmvY^Qf%01c^3pHE-vJd$+4Ry2|8AEHLl ziZ=$v+xHM1vh(P(9m06|(p*YNREPn6ZOM`HMWFG?l8a~4zwDckHV@4A%D3iGGmC-p z+j-Q9F38aN^sAkRx;qduB>fZlE1ZkAR$HN||D>{x*+^vq!s|_acjhUxD)+pZ6Q|(e z;MZ>qjM;7hmFYalK7k+-q`r{i;uIeZuw>Wk3Hk72^py>!s}Ls1h=(aYdafU<1FU7{ z!>AD+(w8F~kg;w&_zaZyxam+PPXsn2G%%UrjDUnSUQ*5llC3Pcgt}hQgMEmSVVOfRHTP8k2O=A^)R@eG$eOb7K z$}D-X+$P&TN=>7Adc#;1U@6BvN{8({1^ODnDeqbWLxriBR@GjdX-nvE6wjJIKv
BuLaz@5hPx}yjy-Y=djGVCy*UCV-avA-S z$gT4vLciv4{a2#rjT_z9M;bc$+>>;&!ErckF}dIn56}9~%tMdyFS+z7I!2ph&T{&b zs^z^;)9pCPK1+8Hz3zQ(1s~hV&sS1A3^A{*L@%>Z{0)^d*6PZOx(@B_X0K1sGBS+p=A0}R+eC- zw!-_vI+{*YBKvNj^SHV0*hs%1�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 0 0 - 0 + 5 @@ -114,9 +114,14 @@ - BIN\UL2CM3.DLL + STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + ST-LINKIII-KEIL_SWO + -U50FF71065067525559320287 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F051R8Tx$CMSIS\Flash\STM32F0xx_64.FLM) + 0 UL2CM3 @@ -188,7 +193,7 @@ 1 - 1 + 0 0 2 10000000 @@ -989,18 +994,6 @@ 0 0 0 - ..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c - stm32f0xx_ll_pwr.c - 0 - 0 - - - 1 - 67 - 1 - 0 - 0 - 0 ..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c stm32f0xx_ll_rcc.c 0 @@ -1008,7 +1001,7 @@ 1 - 68 + 67 1 0 0 @@ -1020,7 +1013,7 @@ 1 - 69 + 68 1 0 0 @@ -1032,7 +1025,7 @@ 1 - 70 + 69 5 0 0 @@ -1044,7 +1037,7 @@ 1 - 71 + 70 1 0 0 @@ -1064,7 +1057,7 @@ 0 2 - 72 + 71 1 0 0 @@ -1076,7 +1069,7 @@ 2 - 73 + 72 5 0 0 @@ -1088,7 +1081,7 @@ 2 - 74 + 73 1 0 0 @@ -1100,7 +1093,7 @@ 2 - 75 + 74 5 0 0 @@ -1112,7 +1105,7 @@ 2 - 76 + 75 1 0 0 @@ -1124,7 +1117,7 @@ 2 - 77 + 76 2 0 0 @@ -1136,7 +1129,7 @@ 2 - 78 + 77 1 0 0 @@ -1156,7 +1149,7 @@ 0 3 - 79 + 78 1 0 0 @@ -1168,7 +1161,7 @@ 3 - 80 + 79 5 0 0 @@ -1180,7 +1173,7 @@ 3 - 81 + 80 1 0 0 @@ -1192,7 +1185,7 @@ 3 - 82 + 81 5 0 0 @@ -1204,7 +1197,7 @@ 3 - 83 + 82 1 0 0 @@ -1216,7 +1209,7 @@ 3 - 84 + 83 5 0 0 @@ -1228,7 +1221,7 @@ 3 - 85 + 84 5 0 0 @@ -1240,7 +1233,7 @@ 3 - 86 + 85 1 0 0 @@ -1252,7 +1245,7 @@ 3 - 87 + 86 5 0 0 @@ -1264,7 +1257,7 @@ 3 - 88 + 87 1 0 0 @@ -1276,7 +1269,7 @@ 3 - 89 + 88 5 0 0 @@ -1288,7 +1281,7 @@ 3 - 90 + 89 5 0 0 @@ -1300,7 +1293,7 @@ 3 - 91 + 90 1 0 0 @@ -1312,7 +1305,7 @@ 3 - 92 + 91 5 0 0 @@ -1324,7 +1317,7 @@ 3 - 93 + 92 1 0 0 @@ -1336,7 +1329,7 @@ 3 - 94 + 93 5 0 0 @@ -1348,7 +1341,7 @@ 3 - 95 + 94 5 0 0 @@ -1360,7 +1353,7 @@ 3 - 96 + 95 5 0 0 @@ -1372,7 +1365,7 @@ 3 - 97 + 96 5 0 0 @@ -1384,7 +1377,7 @@ 3 - 98 + 97 5 0 0 @@ -1396,7 +1389,7 @@ 3 - 99 + 98 1 0 0 @@ -1408,7 +1401,7 @@ 3 - 100 + 99 5 0 0 @@ -1420,7 +1413,7 @@ 3 - 101 + 100 1 0 0 @@ -1432,7 +1425,7 @@ 3 - 102 + 101 1 0 0 @@ -1444,7 +1437,7 @@ 3 - 103 + 102 1 0 0 @@ -1456,7 +1449,7 @@ 3 - 104 + 103 5 0 0 @@ -1468,7 +1461,7 @@ 3 - 105 + 104 1 0 0 @@ -1480,7 +1473,7 @@ 3 - 106 + 105 1 0 0 @@ -1492,7 +1485,7 @@ 3 - 107 + 106 5 0 0 @@ -1504,7 +1497,7 @@ 3 - 108 + 107 1 0 0 @@ -1516,7 +1509,7 @@ 3 - 109 + 108 5 0 0 @@ -1528,7 +1521,7 @@ 3 - 110 + 109 1 0 0 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/ide/stm32f051.uvprojx b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/ide/stm32f051.uvprojx index 355520ae..d7243334 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/ide/stm32f051.uvprojx +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/ide/stm32f051.uvprojx @@ -707,11 +707,6 @@ 1 ..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c - - stm32f0xx_ll_pwr.c - 1 - ..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_pwr.c - stm32f0xx_ll_rcc.c 1 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2016 STMicroelectronics

+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c deleted file mode 100644 index f521d68a..00000000 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c +++ /dev/null @@ -1,101 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f0xx_ll_pwr.c - * @author MCD Application Team - * @brief PWR LL module driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 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. - * - ****************************************************************************** - */ -#if defined(USE_FULL_LL_DRIVER) - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f0xx_ll_pwr.h" -#include "stm32f0xx_ll_bus.h" - -/** @addtogroup STM32F0xx_LL_Driver - * @{ - */ - -#if defined(PWR) - -/** @defgroup PWR_LL PWR - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private constants ---------------------------------------------------------*/ -/* Private macros ------------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup PWR_LL_Exported_Functions - * @{ - */ - -/** @addtogroup PWR_LL_EF_Init - * @{ - */ - -/** - * @brief De-initialize the PWR registers to their default reset values. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: PWR registers are de-initialized - * - ERROR: not applicable - */ -ErrorStatus LL_PWR_DeInit(void) -{ - /* Force reset of PWR clock */ - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_PWR); - - /* Release reset of PWR clock */ - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_PWR); - - return SUCCESS; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -#endif /* defined(PWR) */ -/** - * @} - */ - -#endif /* USE_FULL_LL_DRIVER */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/stm32f0xx_hal_conf.h index 204a06e6..daf0b72a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/bin/demoprog_stm32f051.axf b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/bin/demoprog_stm32f051.axf index c99fbb9e04c60b23c19beccf04e1eda214f0f6dd..57ca6fea51d759924a71689aba801d68be163437 100644 GIT binary patch delta 9687 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 YJ#EdFp2*#T^|B^G#B;1=ZOz#K1&#nPZvX%Q diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/bin/demoprog_stm32f051.srec b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/bin/demoprog_stm32f051.srec index 2a4b1b10..a22cbd6e 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/bin/demoprog_stm32f051.srec +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/bin/demoprog_stm32f051.srec @@ -1,7 +1,7 @@ S31508002000F0070020692100088F21000891210008A7 S3150800201000000000000000000000000000000000B2 S3150800202000000000000000000000000093210008E6 -S31508002030000000000000000095210008ED320008AD +S315080020300000000000000000952100082133000878 S31508002040992100089921000899210008992100087A S31508002050992100089921000899210008992100086A S31508002060992100089921000899210008992100085A @@ -14,19 +14,19 @@ S315080020C0EE11AA5500F002F800F03EF80CA030C850 S315080020D0083824182D18A246671EAB4654465D4696 S315080020E0AC4201D100F030F87E460F3E0FCCB64622 S315080020F00126334200D0FB1AA246AB4633431847A3 -S31508002100FC1600001C170000103A02D378C878C1E4 +S315080021000C1700002C170000103A02D378C878C1C3 S31508002110FAD8520701D330C830C101D504680C601B S31508002120704700000023002400250026103A01D33A S3150800213078C1FBD8520700D330C100D50B60704771 S315080021401FB51FBD10B510BD00F0F8F81146FFF712 -S31508002150F7FF01F03DFB00F010F903B4FFF7F2FFBB +S31508002150F7FF01F045FB00F010F903B4FFF7F2FFB3 S3150800216003BC00F017F900000F4880F308880F48F1 S315080021700168090E0E4A914205D10E480E490160C2 S315080021800E480F4901600F4880470F480047FEE791 S31508002190FEE7FEE7FEE7FEE7FEE700000B480C4910 S315080021A00C4A0D4B70470000F007002004000000A1 S315080021B01F00000018100240010000000000014046 -S315080021C00000000045330008C5200008F001002083 +S315080021C00000000079330008C5200008F00100204F S315080021D0F0070020F0030020F00300200022030986 S315080021E08B422CD3030A8B4211D300239C464EE024 S315080021F003460B433CD4002243088B4231D30309E0 @@ -61,329 +61,330 @@ S315080023B04F8F00BF00BF00BF06480749C86000BF6F S315080023C000BF00BFBFF34F8F00BF00BF00BF00BFF5 S315080023D000BFFDE70400FA0500ED00E010B500F0C7 S315080023E005F810BD10B500F051F810BD10B523481A -S315080023F00078002817D1224801F0D8F901283CD1E5 +S315080023F00078002817D1224800F080FF01283CD138 S315080024001F480078002838DD1D480078402834DC4D -S3150800241000F0D2FF1B490860012018490870002007 +S3150800241000F0ECFF1B4908600120184908700020ED S315080024201949087029E0164A17490978491C5018AD -S3150800243001F0BCF9012816D113480078401C12494E +S3150800243000F064FF012816D113480078401C1249A1 S3150800244008700F4800780978884216D100200B4991 -S3150800245008700B484078FF280FD109488078002873 -S315080024600BD1FFF79FFF00F0A7FF06490968643103 +S3150800245008700B484078FF280FD10B4800780228EF +S315080024600BD1FFF79FFF00F0C1FF064909686431E9 S31508002470884202D900200149087010BDC900002011 -S3150800248048010020CC000020C800002010B50848EC -S3150800249008490860E120000248600021054881607B -S315080024A0C160016181610C21416100F0CBFD10BD65 -S315080024B000440040D800002078B5034600220024D6 -S315080024C00020DEE0012696400D6835402C46002C9B -S315080024D07ED04D68022D02D04D68122D15D1D50833 -S315080024E0AE001D462035A8595507EE0E0F25B540F6 -S315080024F00646AE4330465607F60E0D69B5402843E4 -S31508002500D508AD001E4620367051186856000325BA -S31508002510B5400646AE4330460D79AD07AD0F5600B9 -S31508002520B540284318604D68012D08D04D68022D26 -S3150800253005D04D68112D02D04D68122D18D1986816 -S3150800254056000325B5400646AE4330465600CD68CC -S31508002550B540284398605868012595400646AE431D -S31508002560304610264D6835402D0995402843586059 -S31508002570D86856000325B5400646AE433046560091 -S315080025808D68B5402843D860012636074D68354022 -S31508002590B54275D100BF3E4DAD69012635433C4E67 -S315080025A0B5613546AD69ED07ED0F009500BF00BF73 -S315080025B0384D9608B600A85995072E0F0F25B54031 -S315080025C00646AE4330460925ED06AB4203D100E088 -S315080025D056E000250FE0304DAB4201D101250AE057 -S315080025E02E4DAB4201D1022505E02D4DAB4201D15E -S315080025F0032500E005259607360FB5402843254DE7 -S315080026009608B600A851274D28680546A5432846CA -S31508002610012636044D683540B54202D105462543A4 -S315080026202846204D286068680546A54328460126A1 -S3150800263076044D683540B54202D1054625432846FD -S31508002640184D6860A8680546A5432846012636053C -S315080026504D683540B54202D1054625432846114DF9 -S31508002660A860E8680546A5432846012676054D680C -S315080026703540B54202D1054625432846094DE8604E -S31508002680521C0D68D540002D00D01BE778BD000010 -S3150800269000100240080001400004004800080048F5 -S315080026A0000C004800040140002A01D0816100E0C6 -S315080026B0816270470148006870470000C400002026 -S315080026C002480068401C014908607047C4000020A1 -S315080026D010B5064800681021084304490860002020 -S315080026E000F006F800F018F8002010BD002002409F -S315080026F070B5044600F052F906467D21C900FFF779 -S315080027006DFD054600F07EFC00222146501E00F0B5 -S3150800271071F8002070BD000000B587B000BF3348CF -S315080027208069012108433149886108468069C007E4 -S31508002730C00F019000BF00BF00BF084640690121D5 -S315080027404904084329494861084640690121490462 -S315080027500840019000BF00BF00BF244840698900B7 -S31508002760084322494861084640690121C9040840CE -S31508002770019000BF00BF00BF1C48C069891008430C -S315080027801A49C8610846C0690121490408400190F0 -S3150800279000BF00BF00221146501F00F02BF8002290 -S315080027A01146901E00F026F800221146501E00F031 -S315080027B021F8012040020290012003900020049095 -S315080027C0059002A90A48FFF777FE0C20029002201E -S315080027D0039000200490032005900120069002A98A -S315080027E00920C006FFF768FE07B000BD00100240CA -S315080027F00008004870B504460D4616462946204688 -S3150800280000F038FD70BD000070B504460D46002680 -S315080028105D480068C007C00FA8420ED25A48006833 -S315080028204008400028435849086008460068C00721 -S31508002830C00FA84201D0012070BD022120680840BF -S31508002840022807D151484068F0218843A168084307 -S315080028504E4948602078C007C00F00285FD06068DE -S31508002860012808D149480068012149040840002880 -S3150800287015D10120E0E76068022808D143480068BE -S31508002880012149060840002809D10120D4E73F481C -S31508002890006802210840002801D10120CCE73B4806 -S315080028A04068800880006168084338494860FFF737 -S315080028B001FF0646606801280FD107E0FFF7FAFE18 -S315080028C0801B3349884201D90320B5E72F48406861 -S315080028D00C2108400428F1D121E0606802280FD1B4 -S315080028E007E0FFF7E7FE801B2949884201D9032044 -S315080028F0A2E7264840680C2108400828F1D10EE0D6 -S3150800290007E0FFF7D7FE801B2149884201D903203B -S3150800291092E71E4840680C2108400028F1D11A4861 -S315080029200068C007C00FA8420ED9174800684008BB -S31508002930400028431449086008460068C007C00FCD -S31508002940A84201D0012077E704212068084004281E -S3150800295008D10E484068072109028843E168084300 -S315080029600A49486000F032F808494968F0221140DF -S315080029700909084A515CC840074908600020FFF762 -S31508002980B7FE002058E70000002002400010024071 -S3150800299088130000E4370008C000002001480068DA -S315080029A070470000C000002000B5FFF7F7FF054993 -S315080029B04968072212021140090A034A515CC840B5 -S315080029C000BD000000100240F4370008F0B589B0D9 -S315080029D024A001460EC9C06805AC0EC4089025A0FF -S315080029E001460EC9C06801AC0EC404900024002735 -S315080029F00025002600200090224844680C2020402C -S31508002A00002827D0042802D0082822D102E01E4830 -S31508002A10009022E00F2080042040800C05A90E5C5F -S31508002A201848C06A0007000F01A90F5C01200004BE -S31508002A30204001210904884206D139461248FFF789 -S31508002A40CDFB7043054602E01048354645430095E0 -S31508002A5003E000BF0C48009000BF00BF009809B013 -S31508002A60F0BD000002030405060708090A0B0C0D51 -S31508002A700E0F10100102030405060708090A0B0CBD -S31508002A800D0E0F100010024000127A0000093D00DA -S31508002A90F8B5044600252078C007C00F002871D075 -S31508002AA0F94840680C21084004280BD0F6484068CD -S31508002AB00840082812D1F448406801210904084052 -S31508002AC088420BD1F04800680121490408400028D3 -S31508002AD06BD06068002868D10120F8BD00BF606827 -S31508002AE0012807D1E8480068012109040843E64996 -S31508002AF0086031E0606800280ED1E34800680121CB -S31508002B0009048843E04908600846006801218904E9 -S31508002B108843DD4908601FE0606805280ED1DA4859 -S31508002B200068012189040843D749086008460068F7 -S31508002B30012109040843D44908600DE0D248006819 -S31508002B40012109048843D049086008460068012124 -S31508002B5089048843CC49086000BF6068002812D001 -S31508002B60FFF7A8FD054606E0FFF7A4FD401B64280D -S31508002B7001D90320B1E7C448006801214904084087 -S31508002B800028F1D011E0FFF795FD054606E0FFF7AE -S31508002B9091FD401B642801D903209EE7BA480068C6 -S31508002BA00121490408400028F1D102212068084083 -S31508002BB0022861D1B44840680C21084000280BD08F -S31508002BC0B1484068084008281BD1AF484068012131 -S31508002BD009040840002814D1AB48006802210840BF -S31508002BE0002804D0E068012801D0012075E7A6482E -S31508002BF00068F82188432169C9000843A24908608A -S31508002C003AE0E068002820D09F4800680121084380 -S31508002C109D490860FFF74EFD054606E0FFF74AFDA9 -S31508002C20401B022801D9032057E79748006802216C -S31508002C3008400028F2D094480068F82188432169A2 -S31508002C40C90008439049086016E08F4800684008A4 -S31508002C5040008D490860FFF72DFD054606E0FFF7A1 -S31508002C6029FD401B022801D9032036E7864800685B -S31508002C70022108400028F2D10821206808400828C7 -S31508002C8031D1E069002817D07F48406A01210843FE -S31508002C907D494862FFF70EFD054606E0FFF70AFD87 -S31508002CA0401B022801D9032017E77748406A02210A -S31508002CB008400028F2D016E07348406A40084000F1 -S31508002CC071494862FFF7F6FC054606E0FFF7F2FC95 -S31508002CD0401B022801D90320FFE66B48406A0221FF -S31508002CE008400028F2D1042120680840042871D140 -S31508002CF000266548C0698906084000280DD100BF2E -S31508002D006148C06908436049C8610846C069090442 -S31508002D100840009000BF00BF01265C480068FF21FC -S31508002D2001310840002816D1584800680843574919 -S31508002D300860FFF7BFFC054606E0FFF7BBFC401B33 -S31508002D40642801D90320C8E650480068FF210131EC -S31508002D5008400028F1D000BFA068012806D14A48DB -S31508002D60006A01210843484908622BE0A068002848 -S31508002D700CD14548006A40084000434908620846A5 -S31508002D80006A04218843404908621BE0A0680528B8 -S31508002D900CD13D48006A042108433B4908620846AD -S31508002DA0006A01210843384908620BE03648006A80 -S31508002DB040084000344908620846006A04218843EE -S31508002DC03149086200BFA068002813D0FFF772FCDB -S31508002DD0054608E029E0FFF76DFC401B2C498842B0 -S31508002DE001D9032079E62848006A0221084000280C -S31508002DF0F1D011E0FFF75EFC054607E0FFF75AFC45 -S31508002E00401B2349884201D9032066E61E48006A0A -S31508002E10022108400028F1D1012E05D11A48C069BF -S31508002E20310788431849C86100BF10212068084047 -S31508002E3010285FD1606901282CD11348406B042102 -S31508002E400843114948630846406B012108430E4967 -S31508002E504863FFF72FFC054606E0FFF72BFC401BEF -S31508002E60022801D9032038E60748406B02210840AA -S31508002E700028F2D00448406BF8218843A169C900AC -S31508002E8008430149486335E00010024000700040DD -S31508002E90881300006069401D00280FD14E48406B1A -S31508002EA0042188434C4948630846406BF821884307 -S31508002EB0A169C9000843484948631BE04648406B76 -S31508002EC004210843444948630846406B40084000CB -S31508002ED04863FFF7EFFB054606E0FFF7EBFB401BF1 -S31508002EE0022801D90320F8E53B48406B0221084037 -S31508002EF00028F2D1206A00286CD0374840680C2197 -S31508002F000840082864D0206A022847D13248006859 -S31508002F1001210906884330490860FFF7CBFB0546BF -S31508002F2006E0FFF7C7FB401B022801D90320D4E5BA -S31508002F30294800680121490608400028F1D100BF48 -S31508002F402548C06A00090001E16A08432249C862A7 -S31508002F50616AA06A0843204949683D2212049143E0 -S31508002F6008431D49486000BF084600680121090654 -S31508002F70084319490860FFF79DFB054606E0FFF779 -S31508002F8099FB401B022801D90320A6E512480068D0 -S31508002F900121490608400028F1D01BE00E480068C8 -S31508002FA00121090688430C490860FFF783FB05469B -S31508002FB006E0FFF77FFB401B022801D903208CE5BA -S31508002FC0054800680121490608400028F1D101E0BA -S31508002FD0012082E5002080E500100240042806D181 -S31508002FE00649096904221143044A116105E00349A7 -S31508002FF0096904229143014A1161704700E000E023 -S315080030007047000070B504462546681E094988427F -S3150800301001D901200CE0681E074948610321081FF1 -S3150800302000F028F90020044988610720086100207B -S3150800303070BD0000FFFFFF0000E000E010B5FFF7DD -S31508003040DFFF10BD10B50446002C01D1012010BDCC -S31508003050A069002800D000E000BF6920005D0028B4 -S3150800306005D1002168200155204600F02CF82421BE -S3150800307069200155206800684008400021680860FA -S31508003080204600F069FA012800D1E0E7606A0028C6 -S3150800309002D0204600F0A8F9206840680921C90234 -S315080030A0884321684860206880682A218843216807 -S315080030B08860206800680121084321680860204666 -S315080030C000F00AFAC3E77047FFB583B004460D4619 -S315080030D01646002001906A20005D202870D1002D38 -S315080030E001D0002E02D1012007B0F0BD012109034D -S315080030F0A068884208D12069002805D1E807C00FD2 -S31508003100002801D00120EFE700BF6820005D0128F4 -S3150800311001D10220E8E701216820015500BF0020FF -S31508003120E06622216A200155FFF7C4FA019058206B -S3150800313006535A20065300BF01210903A068884296 -S315080031400AD12069002803D129495C20015310E0DF -S31508003150FF215C2001530CE0A068002809D12069F2 -S31508003160002803D1FF215C20015302E07F215C2067 -S31508003170015300BF5C20005B029029E05A20005BE7 -S31508003180401E81B25A200153069800900022202141 -S315080031902046019B00F0D2FA002801D00320A3E7BD -S315080031A001210903A06888420BD12069002808D1AB -S315080031B02F462068808C029908403880AD1C07E0AD -S315080031C014E02068808C0299C9B2084028706D1CEA -S315080031D05A20005B0028D1D120216A20015500BF62 -S315080031E000216820015500BF00207DE702207BE70B -S315080031F0FF01000010B5FFF76BFA00F07DF800F04C -S3150800320003F800F0DDF810BD10B5002201214902CF -S315080032100148FFF749FA10BD0008004810B500F04C -S31508003220CBF8044610480068201AFF21F531884279 -S3150800323000D210BD0D480078002808D101200B499E -S315080032400870012241020A48FFF72EFA08E000201A -S31508003250064908700022012149020548FFF724FAA9 -S315080032600148046000BFE4E7D4000020D000002035 -S315080032700008004810B5002819DA1A4A03071B0F78 -S31508003280083B9B089B00D2588307DC0EFF23A3400C -S315080032909A438B071B0E8407E40EA3401A43114B6F -S315080032A00407240F083CA408A4001A5118E00E4A83 -S315080032B003231B02D21883089B00D2588307DC0E0F -S315080032C0FF23A3409A438B071B0E8407E40EA340F3 -S315080032D01A43054B032424021B198408A4001A5117 -S315080032E010BD00001CED00E000E100E010B5FFF79E -S315080032F0E7F9FFF7A3FE10BD00B591B001200590D0 -S315080033000520069002200D90C1030E91C1040F916D -S315080033100021109105A8FFF7BBFB002801D000BFCC -S31508003320FEE70720019002200290002003900490F7 -S31508003330012101A8FFF768FA002801D000BFFEE7BF -S3150800334011B000BD194800680121084317490860F3 -S315080033500846406816490840144948600846006807 -S315080033601449084011490860084600680121890483 -S3150800337088430E490860084640683F210904884387 -S315080033800A4948600846C06A00090001C86208463A -S31508003390006BFF2154318843044908630846406B93 -S315080033A040084000486300208860704700100240CB -S315080033B00CB8FFF8FFFFF6FE10B5FFF77BF910BD56 -S315080033C070B5FFF7EBFA05467D21C900FEF706FF43 -S315080033D00446FFF717FE0420FFF700FE00221146F9 -S315080033E0501EFFF707FA70BD818CC907C90F00295F -S315080033F008D001684968012252049143826A114340 -S31508003400026851600222416A1140002907D001680A -S315080034104968D2039143C26A114302685160042283 -S31508003420416A1140002907D001684968120491438E -S31508003430026B1143026851600822416A1140002953 -S3150800344007D00168496812039143426B1143026829 -S3150800345051601022416A1140002907D00168896825 -S3150800346012029143826B1143026891602022416ADD -S315080034701140002907D00168896812029143C26B7E -S315080034801143026891604022416A1140002915D013 -S315080034900168496892039143026C114302685160BE -S315080034A001221205016C914208D10168496803227C -S315080034B052059143426C1143026851608022416A69 -S315080034C01140002907D00168496812039143826CAC -S315080034D0114302685160704738B50446002500203C -S315080034E0E066FFF7E7F8054619492068884223D1C0 -S315080034F0206800680821084008280BD115482B4683 -S31508003500002289040090204600F018F9002801D00E -S31508003510032038BD206800680421084004280BD120 -S315080035200C482B46002209050090204600F006F9B3 -S31508003530002801D00320ECE72021692001556A20E4 -S31508003540015500BF00216820015500BF0020E0E7B3 -S3150800355000380140FFFFFF01FEB50446002510268E -S3150800356000270020029001902169A068084361693C -S315080035700843E16908430546206800686849084029 -S3150800358028432168086020684068032109038843A6 -S31508003590E168084321684860216AA069084305462E -S315080035A0206880680B2109028843284321688860BF -S315080035B000BF5C492068884217D15B48006B8007CA -S315080035C0800F002806D0012808D0022808D0032832 -S315080035D008D101E0002607E0022605E0042603E0FC -S315080035E0082601E0102600BF06E0504920688842F8 -S315080035F001D1002600E0102600BF0121C903E069B9 -S31508003600884249D1042E20D004DC002E07D0022E91 -S3150800361032D111E0082E25D0102E2DD12DE0FFF73E -S31508003620C3F9400061684908401800906168FEF7D0 -S31508003630D5FD80B2029023E061684A083C4BD01859 -S31508003640FEF7CCFD80B202901AE0FFF7BFF9400002 -S3150800365061684908401800906168FEF7BFFD80B2AE -S3150800366002900DE061684A0801231B04D018FEF792 -S31508003670B5FD80B2029003E000BF0120019000BFB3 -S3150800368000BF2C4902980840074602980007400FD9 -S3150800369007432068C76040E0042E21D004DC002ED2 -S315080036A007D0022E34D111E0082E26D0102E2FD1A5 -S315080036B02FE0FFF779F961684908401800906168BA -S315080036C0FEF78CFD80B22168C86025E061684A086B -S315080036D0194BD018FEF782FD80B22168C8601BE03E -S315080036E0FFF774F961684908401800906168FEF7A9 -S315080036F075FD80B22168C8600EE061684A0801233A -S31508003700DB03D018FEF76AFD80B22168C86003E0C3 -S3150800371000BF0120019000BF00BF0198FEBD000058 -S31508003720F369FFFF003801400010024000440040E2 -S315080037300024F400F0FF000000127A00FFB581B003 -S3150800374004460D4617460A9E24E0701C002821D020 -S31508003750002E05D0FEF7AEFF0499401AB04219D9DB -S3150800376020680068FF21A131884321680860206825 -S31508003770806840084000216888602021692001553A -S315080037806A20015500BF00216820015500BF0320AB -S3150800379005B0F0BD2068C0692840A84201D10120C3 -S315080037A000E00020B842D0D00020F1E770B504460A -S315080037B00023012221460548FFF786FC0546002D11 -S315080037C001D1012070BD0020FCE70000D8000020D0 -S315080037D0FFF710FDFEF706FE03E0FFF71FFDFEF7F5 -S315080037E0FDFDFAE7000000000000000001020304E6 -S315080037F00607080900000000010203041C38000837 -S31508003800C00000201800000008210008343800080D -S31508003810D8000020180700002421000800127A00AA -S31508003820000000000000000000000000000000008A -S309080038300000000086 +S3150800248048010020CC000020C800002010B50C48E8 +S315080024900C490860E1200002486000210948816073 +S315080024A0C16001610C21416100218161C161016244 +S315080024B0002004494862084600F0CCFD10BD000023 +S315080024C000440040D800002078B5034600220024C6 +S315080024D00020DEE0012696400D6835402C46002C8B +S315080024E07ED04D68022D02D04D68122D15D1D50823 +S315080024F0AE001D462035A8595507EE0E0F25B540E6 +S315080025000646AE4330465607F60E0D69B5402843D3 +S31508002510D508AD001E4620367051186856000325AA +S31508002520B5400646AE4330460D79AD07AD0F5600A9 +S31508002530B540284318604D68012D08D04D68022D16 +S3150800254005D04D68112D02D04D68122D18D1986806 +S3150800255056000325B5400646AE4330465600CD68BC +S31508002560B540284398605868012595400646AE430D +S31508002570304610264D6835402D0995402843586049 +S31508002580D86856000325B5400646AE433046560081 +S315080025908D68B5402843D860012636074D68354012 +S315080025A0B54275D100BF3E4DAD69012635433C4E57 +S315080025B0B5613546AD69ED07ED0F009500BF00BF63 +S315080025C0384D9608B600A85995072E0F0F25B54021 +S315080025D00646AE4330460925ED06AB4203D100E078 +S315080025E056E000250FE0304DAB4201D101250AE047 +S315080025F02E4DAB4201D1022505E02D4DAB4201D14E +S31508002600032500E005259607360FB5402843254DD6 +S315080026109608B600A851274D28680546A5432846BA +S31508002620012636044D683540B54202D10546254394 +S315080026302846204D286068680546A5432846012691 +S3150800264076044D683540B54202D1054625432846ED +S31508002650184D6860A8680546A5432846012636052C +S315080026604D683540B54202D1054625432846114DE9 +S31508002670A860E8680546A5432846012676054D68FC +S315080026803540B54202D1054625432846094DE8603E +S31508002690521C0D68D540002D00D01BE778BD000000 +S315080026A000100240080001400004004800080048E5 +S315080026B0000C004800040140002A01D0816100E0B6 +S315080026C0816270470148006870470000C400002016 +S315080026D002480068401C014908607047C400002091 +S315080026E010B5064800681021084304490860002010 +S315080026F000F006F800F018F8002010BD002002408F +S3150800270070B5044600F052F906467D21C900FFF768 +S3150800271065FD054600F07EFC00222146501E00F0AD +S3150800272071F8002070BD000000B587B000BF3348BF +S315080027308069012108433149886108468069C007D4 +S31508002740C00F019000BF00BF00BF084640690121C5 +S315080027504904084329494861084640690121490452 +S315080027600840019000BF00BF00BF244840698900A7 +S31508002770084322494861084640690121C9040840BE +S31508002780019000BF00BF00BF1C48C06989100843FC +S315080027901A49C8610846C0690121490408400190E0 +S315080027A000BF00BF00221146501F00F02BF8002280 +S315080027B01146901E00F026F800221146501E00F021 +S315080027C021F8012040020290012003900020049085 +S315080027D0059002A90A48FFF777FE0C20029002200E +S315080027E0039000200490032005900120069002A97A +S315080027F00920C006FFF768FE07B000BD00100240BA +S315080028000008004870B504460D4616462946204677 +S3150800281000F038FD70BD000070B504460D46002670 +S315080028205D480068C007C00FA8420ED25A48006823 +S315080028304008400028435849086008460068C00711 +S31508002840C00FA84201D0012070BD022120680840AF +S31508002850022807D151484068F0218843A1680843F7 +S315080028604E4948602078C007C00F00285FD06068CE +S31508002870012808D149480068012149040840002870 +S3150800288015D10120E0E76068022808D143480068AE +S31508002890012149060840002809D10120D4E73F480C +S315080028A0006802210840002801D10120CCE73B48F6 +S315080028B04068800880006168084338494860FFF727 +S315080028C001FF0646606801280FD107E0FFF7FAFE08 +S315080028D0801B3349884201D90320B5E72F48406851 +S315080028E00C2108400428F1D121E0606802280FD1A4 +S315080028F007E0FFF7E7FE801B2949884201D9032034 +S31508002900A2E7264840680C2108400828F1D10EE0C5 +S3150800291007E0FFF7D7FE801B2149884201D903202B +S3150800292092E71E4840680C2108400028F1D11A4851 +S315080029300068C007C00FA8420ED9174800684008AB +S31508002940400028431449086008460068C007C00FBD +S31508002950A84201D0012077E704212068084004280E +S3150800296008D10E484068072109028843E1680843F0 +S315080029700A49486000F032F808494968F0221140CF +S315080029800909084A515CC840074908600020FFF752 +S31508002990B7FE002058E70000002002400010024061 +S315080029A088130000F4370008C000002001480068BA +S315080029B070470000C000002000B5FFF7F7FF054983 +S315080029C04968072212021140090A034A515CC840A5 +S315080029D000BD00000010024004380008F0B589B0B8 +S315080029E024A001460EC9C06805AC0EC4089025A0EF +S315080029F001460EC9C06801AC0EC404900024002725 +S31508002A000025002600200090224844680C2020401B +S31508002A10002827D0042802D0082822D102E01E4820 +S31508002A20009022E00F2080042040800C05A90E5C4F +S31508002A301848C06A0007000F01A90F5C01200004AE +S31508002A40204001210904884206D139461248FFF779 +S31508002A50C5FB7043054602E01048354645430095D8 +S31508002A6003E000BF0C48009000BF00BF009809B003 +S31508002A70F0BD000002030405060708090A0B0C0D41 +S31508002A800E0F10100102030405060708090A0B0CAD +S31508002A900D0E0F100010024000127A0000093D00CA +S31508002AA0F8B5044600252078C007C00F002871D065 +S31508002AB0F94840680C21084004280BD0F6484068BD +S31508002AC00840082812D1F448406801210904084042 +S31508002AD088420BD1F04800680121490408400028C3 +S31508002AE06BD06068002868D10120F8BD00BF606817 +S31508002AF0012807D1E8480068012109040843E64986 +S31508002B00086031E0606800280ED1E34800680121BA +S31508002B1009048843E04908600846006801218904D9 +S31508002B208843DD4908601FE0606805280ED1DA4849 +S31508002B300068012189040843D749086008460068E7 +S31508002B40012109040843D44908600DE0D248006809 +S31508002B50012109048843D049086008460068012114 +S31508002B6089048843CC49086000BF6068002812D0F1 +S31508002B70FFF7A8FD054606E0FFF7A4FD401B6428FD +S31508002B8001D90320B1E7C448006801214904084077 +S31508002B900028F1D011E0FFF795FD054606E0FFF79E +S31508002BA091FD401B642801D903209EE7BA480068B6 +S31508002BB00121490408400028F1D102212068084073 +S31508002BC0022861D1B44840680C21084000280BD07F +S31508002BD0B1484068084008281BD1AF484068012121 +S31508002BE009040840002814D1AB48006802210840AF +S31508002BF0002804D0E068012801D0012075E7A6481E +S31508002C000068F82188432169C9000843A249086079 +S31508002C103AE0E068002820D09F4800680121084370 +S31508002C209D490860FFF74EFD054606E0FFF74AFD99 +S31508002C30401B022801D9032057E79748006802215C +S31508002C4008400028F2D094480068F8218843216992 +S31508002C50C90008439049086016E08F480068400894 +S31508002C6040008D490860FFF72DFD054606E0FFF791 +S31508002C7029FD401B022801D9032036E7864800684B +S31508002C80022108400028F2D10821206808400828B7 +S31508002C9031D1E069002817D07F48406A01210843EE +S31508002CA07D494862FFF70EFD054606E0FFF70AFD77 +S31508002CB0401B022801D9032017E77748406A0221FA +S31508002CC008400028F2D016E07348406A40084000E1 +S31508002CD071494862FFF7F6FC054606E0FFF7F2FC85 +S31508002CE0401B022801D90320FFE66B48406A0221EF +S31508002CF008400028F2D1042120680840042871D130 +S31508002D0000266548C0698906084000280DD100BF1D +S31508002D106148C06908436049C8610846C069090432 +S31508002D200840009000BF00BF01265C480068FF21EC +S31508002D3001310840002816D1584800680843574909 +S31508002D400860FFF7BFFC054606E0FFF7BBFC401B23 +S31508002D50642801D90320C8E650480068FF210131DC +S31508002D6008400028F1D000BFA068012806D14A48CB +S31508002D70006A01210843484908622BE0A068002838 +S31508002D800CD14548006A4008400043490862084695 +S31508002D90006A04218843404908621BE0A0680528A8 +S31508002DA00CD13D48006A042108433B49086208469D +S31508002DB0006A01210843384908620BE03648006A70 +S31508002DC040084000344908620846006A04218843DE +S31508002DD03149086200BFA068002813D0FFF772FCCB +S31508002DE0054608E029E0FFF76DFC401B2C498842A0 +S31508002DF001D9032079E62848006A022108400028FC +S31508002E00F1D011E0FFF75EFC054607E0FFF75AFC34 +S31508002E10401B2349884201D9032066E61E48006AFA +S31508002E20022108400028F1D1012E05D11A48C069AF +S31508002E30310788431849C86100BF10212068084037 +S31508002E4010285FD1606901282CD11348406B0421F2 +S31508002E500843114948630846406B012108430E4957 +S31508002E604863FFF72FFC054606E0FFF72BFC401BDF +S31508002E70022801D9032038E60748406B022108409A +S31508002E800028F2D00448406BF8218843A169C9009C +S31508002E9008430149486335E00010024000700040CD +S31508002EA0881300006069401D00280FD14E48406B0A +S31508002EB0042188434C4948630846406BF8218843F7 +S31508002EC0A169C9000843484948631BE04648406B66 +S31508002ED004210843444948630846406B40084000BB +S31508002EE04863FFF7EFFB054606E0FFF7EBFB401BE1 +S31508002EF0022801D90320F8E53B48406B0221084027 +S31508002F000028F2D1206A00286CD0374840680C2186 +S31508002F100840082864D0206A022847D13248006849 +S31508002F2001210906884330490860FFF7CBFB0546AF +S31508002F3006E0FFF7C7FB401B022801D90320D4E5AA +S31508002F40294800680121490608400028F1D100BF38 +S31508002F502548C06A00090001E16A08432249C86297 +S31508002F60616AA06A0843204949683D2212049143D0 +S31508002F7008431D49486000BF084600680121090644 +S31508002F80084319490860FFF79DFB054606E0FFF769 +S31508002F9099FB401B022801D90320A6E512480068C0 +S31508002FA00121490608400028F1D01BE00E480068B8 +S31508002FB00121090688430C490860FFF783FB05468B +S31508002FC006E0FFF77FFB401B022801D903208CE5AA +S31508002FD0054800680121490608400028F1D101E0AA +S31508002FE0012082E5002080E500100240042806D171 +S31508002FF00649096904221143044A116105E0034997 +S31508003000096904229143014A1161704700E000E012 +S315080030107047000070B504462546681E094988426F +S3150800302001D901200CE0681E074948610321081FE1 +S3150800303000F028F90020044988610720086100206B +S3150800304070BD0000FFFFFF0000E000E010B5FFF7CD +S31508003050DFFF10BD10B50446002C01D1012010BDBC +S31508003060A069002800D000E000BF6920005D0028A4 +S3150800307005D1002168200155204600F02CF82421AE +S3150800308069200155206800684008400021680860EA +S31508003090204600F07BFA012800D1E0E7606A0028A4 +S315080030A002D0204600F0BAF9206840680921C90212 +S315080030B0884321684860206880682A2188432168F7 +S315080030C08860206800680121084321680860204656 +S315080030D000F01CFAC3E77047FFB583B004460D46F7 +S315080030E01646002001906A20005D202870D1002D28 +S315080030F001D0002E02D1012007B0F0BD012109033D +S31508003100A068884208D12069002805D1E807C00FC1 +S31508003110002801D00120EFE700BF6820005D0128E4 +S3150800312001D10220E8E701216820015500BF0020EF +S31508003130E06622216A200155FFF7C4FA019058205B +S3150800314006535A20065300BF01210903A068884286 +S315080031500AD12069002803D129495C20015310E0CF +S31508003160FF215C2001530CE0A068002809D12069E2 +S31508003170002803D1FF215C20015302E07F215C2057 +S31508003180015300BF5C20005B029029E05A20005BD7 +S31508003190401E81B25A200153069800900022202131 +S315080031A02046019B00F0E4FA002801D00320A3E79B +S315080031B001210903A06888420BD12069002808D19B +S315080031C02F462068808C029908403880AD1C07E09D +S315080031D014E02068808C0299C9B2084028706D1CDA +S315080031E05A20005B0028D1D120216A20015500BF52 +S315080031F000216820015500BF00207DE702207BE7FB +S31508003200FF01000010B5FFF76BFA00F08FF800F029 +S3150800321003F800F0EFF810BD10B5002201214902AD +S315080032200148FFF749FA10BD0008004810B500F03C +S31508003230DDF8044610480068201AFF21F531884257 +S3150800324000D210BD0D480078002808D101200B498E +S315080032500870012241020A48FFF72EFA08E000200A +S31508003260064908700022012149020548FFF724FA99 +S315080032700148046000BFE4E7D4000020D000002025 +S315080032800008004810B5002819DA1A4A03071B0F68 +S31508003290083B9B089B00D2588307DC0EFF23A340FC +S315080032A09A438B071B0E8407E40EA3401A43114B5F +S315080032B00407240F083CA408A4001A5118E00E4A73 +S315080032C003231B02D21883089B00D2588307DC0EFF +S315080032D0FF23A3409A438B071B0E8407E40EA340E3 +S315080032E01A43054B032424021B198408A4001A5107 +S315080032F010BD00001CED00E000E100E070B50446DA +S315080033000023012221460548FFF7E6FE0546002D63 +S3150800331001D1012070BD0020FCE70000D800002084 +S3150800332010B5FFF7D5F9FFF791FE10BD00B591B0BE +S31508003330012005900520069002200D90C1030E91EC +S31508003340C1040F910021109105A8FFF7A9FB0028D9 +S3150800335001D000BFFEE7072001900220029000205E +S3150800336003900490012101A8FFF756FA002801D01E +S3150800337000BFFEE711B000BD1948006801210843E7 +S3150800338017490860084640681649084014494860C5 +S31508003390084600681449084011490860084600684C +S315080033A00121890488430E490860084640683F2180 +S315080033B0090488430A4948600846C06A00090001AA +S315080033C0C8620846006BFF215431884304490863E4 +S315080033D00846406B400840004863002088607047F4 +S315080033E0001002400CB8FFF8FFFFF6FE10B5FFF715 +S315080033F069F910BD70B5FFF7D9FA05467D21C900F0 +S31508003400FEF7ECFE0446FFF705FE0420FFF7EEFD87 +S3150800341000221146501EFFF7F5F970BD818CC907C9 +S31508003420C90F002908D0016849680122520491434E +S31508003430826A1143026851600222416A11400029DA +S3150800344007D001684968D2039143C26A11430268EA +S3150800345051600422416A1140002907D00168496871 +S3150800346012049143026B1143026851600822416AB3 +S315080034701140002907D00168496812039143426B3D +S315080034801143026851601022416A1140002907D091 +S315080034900168896812029143826B11430268916040 +S315080034A02022416A1140002907D001688968120262 +S315080034B09143C26B1143026891604022416A1140F0 +S315080034C0002915D00168496892039143026C11439B +S315080034D00268516001221205016C914208D1016807 +S315080034E04968032252059143426C114302685160B0 +S315080034F08022416A1140002907D0016849681203F1 +S315080035009143826C114302685160704738B504468E +S3150800351000250020E066FFF7D5F80546194920681A +S31508003520884223D1206800680821084008280BD162 +S3150800353015482B46002289040090204600F018F909 +S31508003540002801D0032038BD2068006804210840FF +S3150800355004280BD10C482B4600220905009020466A +S3150800356000F006F9002801D00320ECE720216920A5 +S3150800357001556A20015500BF00216820015500BF8A +S315080035800020E0E700380140FFFFFF01FEB50446D2 +S315080035900025102600270020029001902169A068C6 +S315080035A0084361690843E1690843054620680068DD +S315080035B06849084028432168086020684068032154 +S315080035C009038843E168084321684860216AA069BD +S315080035D008430546206880680B210902884328436A +S315080035E02168886000BF5C492068884217D15B481B +S315080035F0006B8007800F002806D0012808D0022813 +S3150800360008D0032808D101E0002607E0022605E0D5 +S31508003610042603E0082601E0102600BF06E050490C +S315080036202068884201D1002600E0102600BF01214B +S31508003630C903E069884249D1042E20D004DC002E53 +S3150800364007D0022E32D111E0082E25D0102E2DD10A +S315080036502DE0FFF7B1F9400061684908401800906D +S315080036606168FEF7BBFD80B2029023E061684A08F4 +S315080036703C4BD018FEF7B2FD80B202901AE0FFF775 +S31508003680ADF9400061684908401800906168FEF786 +S31508003690A5FD80B202900DE061684A0801231B046B +S315080036A0D018FEF79BFD80B2029003E000BF012010 +S315080036B0019000BF00BF2C490298084007460298AF +S315080036C00007400F07432068C76040E0042E21D05A +S315080036D004DC002E07D0022E34D111E0082E26D0A5 +S315080036E0102E2FD12FE0FFF767F9616849084018B7 +S315080036F000906168FEF772FD80B22168C86025E017 +S3150800370061684A08194BD018FEF768FD80B221682F +S31508003710C8601BE0FFF762F9616849084018009025 +S315080037206168FEF75BFD80B22168C8600EE06168DB +S315080037304A080123DB03D018FEF750FD80B2216842 +S31508003740C86003E000BF0120019000BF00BF0198D8 +S31508003750FEBD0000F369FFFF00380140001002407B +S31508003760004400400024F400F0FF000000127A0034 +S31508003770FFB581B004460D4617460A9E24E0701C24 +S31508003780002821D0002E05D0FEF79CFF0499401A88 +S31508003790B04219D920680068FF21A1318843216801 +S315080037A008602068806840084000216888602021F9 +S315080037B0692001556A20015500BF0021682001557E +S315080037C000BF032005B0F0BD2068C0692840A842A4 +S315080037D001D1012000E00020B842D0D00020F1E756 +S315080037E0FFF710FDFEF7FEFD03E0FFF71FFDFEF7EE +S315080037F0F5FDFAE7000000000000000001020304DE +S315080038000607080900000000010203042C38000816 +S31508003810C0000020180000000821000844380008ED +S31508003820D8000020180700002421000800127A009A +S31508003830000000000000000000000000000000007A +S309080038400000000076 S705080020C50D diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/boot.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/boot.c index 4d868dcb..94d0ce11 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/boot.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/boot.c @@ -117,10 +117,13 @@ static void BootComRs232Init(void) rs232Handle.Instance = USART2; rs232Handle.Init.BaudRate = BOOT_COM_RS232_BAUDRATE; rs232Handle.Init.WordLength = UART_WORDLENGTH_8B; - rs232Handle.Init.StopBits = UART_STOPBITS_1; - rs232Handle.Init.Parity = UART_PARITY_NONE; - rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.StopBits = UART_STOPBITS_1; + rs232Handle.Init.Parity = UART_PARITY_NONE; + rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + rs232Handle.Init.OverSampling = UART_OVERSAMPLING_16; + rs232Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + rs232Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; /* Initialize the UART peripheral. */ HAL_UART_Init(&rs232Handle); } /*** end of BootComRs232Init ***/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/ide/stm32f051.uvoptx b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/ide/stm32f051.uvoptx index 9d476bcc..d83d29b5 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/ide/stm32f051.uvoptx +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/ide/stm32f051.uvoptx @@ -103,7 +103,7 @@ 1 0 0 - 0 + 5 @@ -114,9 +114,14 @@ - BIN\UL2CM3.DLL + STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + ST-LINKIII-KEIL_SWO + -U50FF71065067525559320287 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F051R8Tx$CMSIS\Flash\STM32F0xx_64.FLM) + 0 UL2CM3 @@ -188,7 +193,7 @@ 1 - 1 + 0 0 2 10000000 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2016 STMicroelectronics

+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/stm32f0xx_hal_conf.h index 2a508432..1908c7bc 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/.settings/language.settings.xml b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/.settings/language.settings.xml index e6e31341..d4b885bf 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/.settings/language.settings.xml +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/.settings/language.settings.xml @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/Debug/openblt_stm32f051.elf b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/Debug/openblt_stm32f051.elf index 838418883d73637b32ff933d863f88c29cd1e2be..1c7ee48a0c61464bafd2278da9651cccda01aafe 100755 GIT binary patch literal 282092 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⋘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 A8UO$Q literal 282292 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

© COPYRIGHT(c) 2016 STMicroelectronics
+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c deleted file mode 100644 index f521d68a..00000000 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c +++ /dev/null @@ -1,101 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f0xx_ll_pwr.c - * @author MCD Application Team - * @brief PWR LL module driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 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. - * - ****************************************************************************** - */ -#if defined(USE_FULL_LL_DRIVER) - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f0xx_ll_pwr.h" -#include "stm32f0xx_ll_bus.h" - -/** @addtogroup STM32F0xx_LL_Driver - * @{ - */ - -#if defined(PWR) - -/** @defgroup PWR_LL PWR - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private constants ---------------------------------------------------------*/ -/* Private macros ------------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup PWR_LL_Exported_Functions - * @{ - */ - -/** @addtogroup PWR_LL_EF_Init - * @{ - */ - -/** - * @brief De-initialize the PWR registers to their default reset values. - * @retval An ErrorStatus enumeration value: - * - SUCCESS: PWR registers are de-initialized - * - ERROR: not applicable - */ -ErrorStatus LL_PWR_DeInit(void) -{ - /* Force reset of PWR clock */ - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_PWR); - - /* Release reset of PWR clock */ - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_PWR); - - return SUCCESS; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -#endif /* defined(PWR) */ -/** - * @} - */ - -#endif /* USE_FULL_LL_DRIVER */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h index 204a06e6..daf0b72a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/openblt_stm32f051.elf.launch b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/openblt_stm32f051.elf.launch index 28f33787..103c46f6 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/openblt_stm32f051.elf.launch +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Boot/openblt_stm32f051.elf.launch @@ -1,40 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/.settings/language.settings.xml b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/.settings/language.settings.xml index c3dc6021..fd23595f 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/.settings/language.settings.xml +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/Debug/demoprog_stm32f051.elf b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/Debug/demoprog_stm32f051.elf index 415773125baebf0ae852e5325478f8662bec0d37..2179f3a2c793b26f5c4b72e035c4993e2a1baff1 100755 GIT binary patch delta 37397 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 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/Debug/demoprog_stm32f051.srec b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/Debug/demoprog_stm32f051.srec index 36e9fd0f..5f0595c8 100755 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/Debug/demoprog_stm32f051.srec +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/Debug/demoprog_stm32f051.srec @@ -34,24 +34,24 @@ S315080021E4524183088B4201D38B00C01A52414308DB S315080021F48B4201D34B00C01A5241411A00D2014600 S31508002204524110467047FFE701B5002000F006F872 S3150800221402BDC0460029F7D076E770477047C04626 -S3150800222410B50848084B0360E1231B0243600023EA -S315080022348360C360036183610C33436100F070FFFC -S3150800224410BDC046E00000200044004010B501005F -S3150800225400230122044800F09FFE002801D0002034 -S3150800226410BD0130FCE7C046E000002010B5FFF7BA -S31508002274D7FF10BDBFF34F8F034A044BDA60BFF391 -S315080022844F8FC046FDE7C0460400FA0500ED00E09E -S3150800229410B5224B1B78002B16D12148FFF7D6FF21 -S315080022A4012800D010BD1E4B1B78013BDBB23F2B27 -S315080022B4F8D801F067F81B4B18600122174B1A70FF -S315080022C40022194B1A70EDE7174B1B780133144893 -S315080022D4C018FFF7BBFF01280AD001F053F8114BC9 -S315080022E41B6864339842DDD900220C4B1A70D9E76F -S315080022F40D4A13780133DBB21370094A12789342F4 -S31508002304D0D10022054B1A70054B5B78FF2BC9D137 -S31508002314034B9B78002BC5D1FFF7ACFF9101002036 +S3150800222410B50948094B0360E1231B0243600023E8 +S315080022348360C36003610C2242618361C3610362E4 +S31508002244436200F06DFF10BDE0000020004400402A +S3150800225410B5010000230122044800F09DFE002861 +S3150800226401D0002010BD0130FCE7C046E000002084 +S3150800227410B5FFF7D5FF10BDBFF34F8F034A044BC4 +S31508002284DA60BFF34F8FC046FDE7C0460400FA057F +S3150800229400ED00E010B5214B1B78002B16D1204821 +S315080022A4FFF7D6FF012800D010BD1D4B1B78013B54 +S315080022B4DBB23F2BF8D801F065F81A4B18600122F7 +S315080022C4164B1A700022184B1A70EDE7164B1B783A +S315080022D401331348C018FFF7BBFF01280AD001F0E1 +S315080022E451F8104B1B6864339842DDD900220B4B16 +S315080022F41A70D9E70C4A13780133DBB21370084A0B +S3150800230412789342D0D10021044A1170044A5278B3 +S31508002314FF2AC9D1022BC7D1FFF7AEFF91010020CE S3150800232450010020940100209201002010B5FFF707 -S31508002334AFFF10BD10B5002280218900014800F0C6 +S31508002334B1FF10BD10B5002280218900014800F0C4 S3150800234487F910BD0008004810B501F01BF8040011 S315080023540F4B1B68C31AF422FF3293420ED90D4B56 S315080023641B78002B0BD1F33AFF3A0A4B1A708021DB @@ -293,7 +293,7 @@ S3150800321404A8FFF723FA002800D0FEE70723009343 S31508003224053B019300230293039301216846FFF7A4 S3150800323471FC002800D0FEE711B000BD10B5FFF7F9 S31508003244BFF8FFF7D5FFFFF775F800F088F810BD4B -S3150800325410B5FFF7F3FFFFF709F8FFF775F8FFF75F +S3150800325410B5FFF7F3FFFFF70BF8FFF775F8FFF75D S3150800326465F8FAE730B58BB0264B9A6901242243F0 S315080032749A619A6922400192019A596980229202B6 S315080032841143596159691140029102995869802577 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/boot.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/boot.c index 429edef8..a6dd451e 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/boot.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/boot.c @@ -117,10 +117,13 @@ static void BootComRs232Init(void) rs232Handle.Instance = USART2; rs232Handle.Init.BaudRate = BOOT_COM_RS232_BAUDRATE; rs232Handle.Init.WordLength = UART_WORDLENGTH_8B; - rs232Handle.Init.StopBits = UART_STOPBITS_1; - rs232Handle.Init.Parity = UART_PARITY_NONE; - rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.StopBits = UART_STOPBITS_1; + rs232Handle.Init.Parity = UART_PARITY_NONE; + rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + rs232Handle.Init.OverSampling = UART_OVERSAMPLING_16; + rs232Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + rs232Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; /* Initialize the UART peripheral. */ HAL_UART_Init(&rs232Handle); } /*** end of BootComRs232Init ***/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2016 STMicroelectronics

+ *

© Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h index 2a508432..1908c7bc 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2018 STMicroelectronics

+ *

© COPYRIGHT(c) 2020 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.elf b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.elf index 8fa5e6170fb84fef37497aa8104d5dec7e33a122..08b2b8ea1930f01e9204ddd541b8dbaa60f63c97 100644 GIT binary patch delta 335081 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
uYU&D?cyhX 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
  • ;N!^eSJw|IJ?PuXoQWOo%GF$xQ#up7I;M2m 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 delta 249115 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 n2K0) z$0T~iCpwhV@d+7|BxFpIkTFRDV-lSI(}R-e@DC8&4{*pJ1~>(Zsl=^_3d5dFh$A|x z4s?GR>8N?+c^G7ss3cF~Eb!Zj-@&3HiBn*bPGTo0IQuaNq}XvIz+aG#P5%SjRYjK2XVKdXSQY>2nGE&1)PB_NG8aC5#eOAnmm`1CzYH5o#K~~j@g~b3~)sa ziUIc3}vp$x0!3`XJL3h~#-zd2%YpJowr0SKk3vSl29@;3vI)v+23<(DIh(`wOJ z<1CT76hI{z`r(;nydMM=J*uV(-*cd#*Focp7N!RMW`5h_z(Ccc#RzK1IeeZl)*a3? z-pTZCL-X|_LRlT$bKC7#OvIf8--NJkbEy5D_%^z#!0xUJ)MmU!M?@6m; z|0@T=aQ?R$fqJh)tQEh3&m)X3TYy90Y0?>#>JcHLltL zrA$C|JY1p?Do z#HI^yHqwm`>T_TfSc6h?x&!zKz^@5>37{wqAO=;Z1L(uHM9O~~<#pOYu{HoV zW!(TCMXL>bhlhLv;`lugPYMxpD!pzTda~qbf0!|V0=HPtgTI_xtnWx8K_phR0{bnn zAfk=mA(KVM9}j6_?RPIY<�%kp^%CfUg1crf&u2XH~I>1O~!MHVNO8!mL*OwNm)S z)|V8HwM4Z)g!Cq{Vll9}z$#V%c!9tb016uctOsx;feirG0FVNZ^tVyoUfBZRz})Bo z8C?qCHzD6Z^(}iMz7rzuAw3lBDb`uES?u-p`h-^dti>oX4uoAUfGzeFyL?vc(rW7^ zW&=;O=;%l+-HZU9jmU8NX&OTGCM>PUvq&dW%H09{EhW#(Xtj2+7QAKM?U%nw!_(@x z17VxrFkVW1hR`h&iT?$xSjcO_zcSN6HcOb_Bh21x)-h)9cPMMn=s($D%>d*Rn_?** zl5o^$Oyc{)-up0^;5uJhzP3Nr`v9emT8?3_zI-Hi8gnEf%3b>Nr!kMA$DR(!E~H1! zET%vD?F|nnyb_44`8@>!oT5jwR+T-qH z(b%Y820Zbj;x>4`_gFN39Bfb})A8xkIsPi-U^IT>bbzXmW6`)Cix#p$kL$5$Ash7g zDYL=;ZH)Bz%ksXW1=am32nh9=emTg_fu+m4&(j65=dhodk@v7oK zusgZI=BH+1jHnIV5?E5o!2c!uC(`;$e@?>c5MW*5q=eVcxh3Hhv_TC!{0Vm&StA>E%5DNt2!URKLKE9cL;@VvaInDq+xH3 zP`0XJ-2739)xkR|YPn^CZ_r;eMO?f_i;4eM2aeyXl5M2!BlS7I8S!^B@pDhDwbI&% z(4xb1RB+K@5ownW1OwivYKXxMf8J*S9^d6}Zo4HhmZ^z1rtD~u!)FPoW2A}s*Qkw!Q2gi`GgGp_Z z!XvLgDZy6BI!kzQ|BZ4d3G=Jasz*1Roq-o~_993wk(tINfwG(sQW7{nU0TXitdHtHG-c<9^C~4>HQcFa#aa1L@bcaX)S2BH%s6HXfvy7l_tl zKxjR54Sf6b1o|jb^lPFMf%an2Z9!~l7Ts%H-;j9|l8^N*M!2vh;Bje@W zpyg{#^a2Xj@R|D7AQRIFt4GW&fD|Q|(5knz^eg5d{%8a%u<1U0$&nYG%l9%TGs8>*Ue$zjBg>L!>W7h|Mp1SEEbTSum#-k94b|&zDn=+Q?HEU{Il~aypzr-uogN;0WNZG0i1H0N5`<)b`IbY=XuaeouN>^ z%()D3x$`mT6;2fYE1lJ#S2>4+UhS*^rN(IhrPjFslsf0q1EZ>&vo|R9DypyMime0Y zoYR~3AJtcQMeQiB>5A(9EOrmXM2C++W<>P@U5xiXL=PM*l=xdCaNC3%|>~7&%q&9o~Hv@`M;sxd}|UzS^58_zy&&(l^;W~ z*$b^>8O~0O##f`yu+AZZ_um5UYup=8lK+@o*^X1V6#5oY)dE6PMi}ZfQGBxAG(_

    Qg@UNOCz$LN7S(ZdhFoMZYBz5H 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�G_BVp) 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 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.map b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.map index 3bb0f5f9..51475e4a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.map +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.map @@ -1,324 +1,317 @@ - -bin/openblt_stm32f091.elf: file format elf32-littlearm -bin/openblt_stm32f091.elf -architecture: arm, flags 0x00000112: -EXEC_P, HAS_SYMS, D_PAGED -start address 0x08000000 - -Program Header: -0x70000001 off 0x000123b0 vaddr 0x080023b0 paddr 0x080023b0 align 2**2 - filesz 0x00000008 memsz 0x00000008 flags r-- - LOAD off 0x00010000 vaddr 0x08000000 paddr 0x08000000 align 2**16 - filesz 0x000023b8 memsz 0x000023b8 flags r-x - LOAD off 0x000200c0 vaddr 0x200000c0 paddr 0x080023b8 align 2**16 - filesz 0x00000070 memsz 0x00000628 flags rw- -private flags = 5000200: [Version5 EABI] [soft-float ABI] - -Sections: -Idx Name Size VMA LMA File off Algn - 0 .text 000023b0 08000000 08000000 00010000 2**2 - CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .ARM.exidx 00000008 080023b0 080023b0 000123b0 2**2 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 2 .data 00000070 200000c0 080023b8 000200c0 2**2 - CONTENTS, ALLOC, LOAD, DATA - 3 .bss 000005b8 20000130 08002428 00020130 2**3 - ALLOC - 4 .stack_dummy 00000100 200006e8 200006e8 00020130 2**3 - CONTENTS, READONLY - 5 .ARM.attributes 00000028 00000000 00000000 00020230 2**0 - CONTENTS, READONLY - 6 .comment 0000006e 00000000 00000000 00020258 2**0 - CONTENTS, READONLY - 7 .debug_line 00009778 00000000 00000000 000202c6 2**0 - CONTENTS, READONLY, DEBUGGING - 8 .debug_info 00009a8e 00000000 00000000 00029a3e 2**0 - CONTENTS, READONLY, DEBUGGING - 9 .debug_abbrev 00002f08 00000000 00000000 000334cc 2**0 - CONTENTS, READONLY, DEBUGGING - 10 .debug_aranges 00000808 00000000 00000000 000363d8 2**3 - CONTENTS, READONLY, DEBUGGING - 11 .debug_loc 000049d5 00000000 00000000 00036be0 2**0 - CONTENTS, READONLY, DEBUGGING - 12 .debug_ranges 00001180 00000000 00000000 0003b5b5 2**0 - CONTENTS, READONLY, DEBUGGING - 13 .debug_macro 0001b053 00000000 00000000 0003c735 2**0 - CONTENTS, READONLY, DEBUGGING - 14 .debug_str 0008a048 00000000 00000000 00057788 2**0 - CONTENTS, READONLY, DEBUGGING - 15 .debug_frame 00001228 00000000 00000000 000e17d0 2**2 - CONTENTS, READONLY, DEBUGGING -SYMBOL TABLE: -08000000 l d .text 00000000 .text -080023b0 l d .ARM.exidx 00000000 .ARM.exidx -200000c0 l d .data 00000000 .data -20000130 l d .bss 00000000 .bss -200006e8 l d .stack_dummy 00000000 .stack_dummy -00000000 l d .ARM.attributes 00000000 .ARM.attributes -00000000 l d .comment 00000000 .comment -00000000 l d .debug_line 00000000 .debug_line -00000000 l d .debug_info 00000000 .debug_info -00000000 l d .debug_abbrev 00000000 .debug_abbrev -00000000 l d .debug_aranges 00000000 .debug_aranges -00000000 l d .debug_loc 00000000 .debug_loc -00000000 l d .debug_ranges 00000000 .debug_ranges -00000000 l d .debug_macro 00000000 .debug_macro -00000000 l d .debug_str 00000000 .debug_str -00000000 l d .debug_frame 00000000 .debug_frame -00000000 l df *ABS* 00000000 obj/startup_stm32f0xx.o -00000100 l *ABS* 00000000 Stack_Size -00000000 l *ABS* 00000000 Heap_Size -080001ae l .text 00000000 .flash_to_ram_loop_end -080001a4 l .text 00000000 .flash_to_ram_loop -080001d8 l .text 00000000 .fill_zero_bss -080001d4 l .text 00000000 .loop_zero_bss -00000000 l df *ABS* 00000000 crtstuff.c -080023ac l O .text 00000000 __EH_FRAME_BEGIN__ -080000c0 l F .text 00000000 __do_global_dtors_aux -20000130 l .bss 00000000 completed.8603 -2000012c l O .data 00000000 __do_global_dtors_aux_fini_array_entry -080000e8 l F .text 00000000 frame_dummy -20000134 l .bss 00000000 object.8608 -20000128 l O .data 00000000 __frame_dummy_init_array_entry -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv6-m/crt0.o -00000000 l df *ABS* 00000000 main.c -00000000 l df *ABS* 00000000 system_stm32f0xx.c -00000000 l df *ABS* 00000000 stm32f0xx_ll_utils.c -00000000 l df *ABS* 00000000 stm32f0xx_ll_usart.c -00000000 l df *ABS* 00000000 stm32f0xx_ll_rcc.c -00000000 l df *ABS* 00000000 stm32f0xx_ll_gpio.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_flash_ex.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_flash.c -080009b4 l F .text 0000003c FLASH_SetErrorCode -00000000 l df *ABS* 00000000 stm32f0xx_hal_cortex.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_can.c -00000000 l df *ABS* 00000000 stm32f0xx_hal.c -00000000 l df *ABS* 00000000 _exit.c -00000000 l df *ABS* 00000000 led.c -2000014c l O .bss 00000004 nextBlinkEvent.6704 -20000150 l O .bss 00000002 ledBlinkIntervalMs -20000152 l O .bss 00000001 ledOn.6703 -00000000 l df *ABS* 00000000 hooks.c -00000000 l df *ABS* 00000000 xcp.c -08002298 l O .text 00000008 xcpStationId -20000154 l O .bss 0000004c xcpInfo -00000000 l df *ABS* 00000000 cop.c -00000000 l df *ABS* 00000000 com.c -200001a0 l O .bss 00000040 xcpCtoReqPacket.4279 -200000c4 l O .data 00000001 comActiveInterface -080022a0 l O .text 00000006 CSWTCH.11 -00000000 l df *ABS* 00000000 boot.c -00000000 l df *ABS* 00000000 backdoor.c -200001e0 l O .bss 00000001 backdoorOpen -200001e4 l O .bss 00000004 backdoorOpenTime -00000000 l df *ABS* 00000000 assert.c -00000000 l df *ABS* 00000000 uart.c -080017d0 l F .text 0000002c UartTransmitByte -200001e8 l O .bss 00000001 xcpCtoRxLength.7305 -200001e9 l O .bss 00000001 xcpCtoRxInProgress.7306 -200001ec l O .bss 00000004 xcpCtoRxStartTime.7307 -200001f0 l O .bss 00000041 xcpCtoReqPacket.7304 -00000000 l df *ABS* 00000000 timer.c -20000234 l O .bss 00000004 millisecond_counter -00000000 l df *ABS* 00000000 nvm.c -00000000 l df *ABS* 00000000 flash.c -080019d0 l F .text 0000004c FlashGetSector -08001a1c l F .text 00000070 FlashWriteBlock -08001a8c l F .text 0000004c FlashSwitchBlock -08001ad8 l F .text 000000ac FlashAddToBlock -080022d0 l O .text 000000d8 flashLayout -20000238 l O .bss 00000204 bootBlockInfo -2000043c l O .bss 00000204 blockInfo -00000000 l df *ABS* 00000000 cpu.c -00000000 l df *ABS* 00000000 can.c -20000640 l O .bss 0000001c canTxMessage -2000065c l O .bss 00000024 canRxMessage -20000680 l O .bss 00000044 canHandle -00000000 l df *ABS* 00000000 cpu_comp.c -00000000 l df *ABS* 00000000 _udivsi3.o -08001fe8 l .text 00000000 .udivsi3_skip_div0_test -00000000 l df *ABS* 00000000 _dvmd_tls.o -00000000 l df *ABS* 00000000 exit.c -00000000 l df *ABS* 00000000 init.c -00000000 l df *ABS* 00000000 memset.c -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv6-m/crti.o -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv6-m/crtn.o -00000000 l df *ABS* 00000000 impure.c -200000c8 l O .data 00000060 impure_data -00000000 l df *ABS* 00000000 crtstuff.c -080023ac l O .text 00000000 __FRAME_END__ -00000000 l df *ABS* 00000000 -2000012c l .data 00000000 __init_array_end -20000128 l .data 00000000 __preinit_array_end -20000128 l .data 00000000 __init_array_start -20000128 l .data 00000000 __preinit_array_start -0800166c g F .text 00000020 ComInit -08001ba4 g F .text 00000060 FlashWrite -080021b8 g O .text 00000008 APBPrescTable -200006e8 g .stack_dummy 00000000 __HeapBase -080017c8 g F .text 00000008 AssertFailure -08001f80 g F .text 00000060 CanReceivePacket -00000000 g *ABS* 00000000 __HEAP_SIZE -08001938 g F .text 0000001c TimerUpdate -080013ec g F .text 00000010 XcpPacketTransmitted -200000c0 g .data 00000000 __data_start__ -08000b44 g F .text 00000068 HAL_NVIC_SetPriority -0800020a w F .text 00000002 TIM1_CC_IRQHandler -08000a14 g F .text 00000014 HAL_FLASH_Lock -0800168c g F .text 00000050 ComTask -080001e4 w F .text 00000002 HardFault_Handler -08000206 w F .text 00000002 ADC1_COMP_IRQHandler -08001994 g F .text 00000002 SysTick_Handler -080001f0 w F .text 00000002 PVD_IRQHandler -08001740 g F .text 0000001c BootInit -080008d4 g F .text 0000000c HAL_RCC_GetHCLKFreq -080001e8 w F .text 00000002 PendSV_Handler -080001e2 w F .text 00000002 NMI_Handler -080023b8 g .ARM.exidx 00000000 __exidx_end -0800022e w F .text 00000002 BootRAM -0800021c w F .text 00000002 I2C1_IRQHandler -080017a8 g F .text 00000020 BackDoorInit -080004ac g F .text 0000000c LL_SetSystemCoreClock -080023b8 g .ARM.exidx 00000000 __etext -080012c8 g F .text 00000024 HAL_DeInit -08000300 g F .text 000000e0 HAL_MspInit -08001664 g F .text 00000008 CopService -08001fe0 g F .text 00000004 CpuIrqDisable -08000648 g F .text 000000e4 LL_RCC_GetUSARTClockFreq -08001e1c g F .text 00000008 FlashGetUserProgBaseAddress -08001b84 g F .text 00000018 FlashReinit -0800192c g F .text 0000000c TimerReset -200000c0 g O .data 00000004 SystemCoreClock -0800175c g F .text 00000014 BootTask -08001fe8 g F .text 0000010a .hidden __udivsi3 -08001d40 g F .text 00000050 FlashWriteChecksum -080016e0 g F .text 00000030 ComTransmitPacket -200006e8 g .stack_dummy 00000000 __HeapLimit -20000130 g .bss 00000000 __bss_start__ -08000220 w F .text 00000002 SPI1_IRQHandler -080008e0 g F .text 000000d4 HAL_FLASHEx_Erase -08000be4 g F .text 00000108 HAL_CAN_ConfigFilter -08000210 w F .text 00000002 TIM6_DAC_IRQHandler -08000bac g F .text 00000038 HAL_SYSTICK_Config -200006c8 g O .bss 00000020 pFlash -080023b0 g .text 00000000 __exidx_start -080004b8 g F .text 00000104 LL_USART_Init -080023a8 g O .text 00000004 _global_impure_ptr -0800212c g F .text 0000004c __libc_init_array -08000228 w F .text 00000002 USART3_4_IRQHandler -08000120 g F .text 00000000 _mainCRTStartup -080001fa w F .text 00000002 EXTI2_3_IRQHandler -08000cec w F .text 00000002 HAL_CAN_MspInit -080013dc g F .text 00000010 XcpIsConnected -08002188 g F .text 00000000 _init -0800021e w F .text 00000002 I2C2_IRQHandler -08001998 g F .text 00000008 NvmInit -08001b9c g F .text 00000008 FlashInit -080019b8 g F .text 00000008 NvmGetUserProgBaseAddress -0800021a w F .text 00000002 TIM17_IRQHandler -00000000 w *UND* 00000000 __libc_fini_array -080001f2 w F .text 00000002 RTC_IRQHandler -08000198 g F .text 00000034 Reset_Handler -08001310 g F .text 00000020 HAL_Init -080016dc g F .text 00000002 ComFree -00000000 w *UND* 00000000 __sf_fake_stderr -00000000 w *UND* 00000000 __deregister_frame_info -08000a80 g F .text 000000c4 HAL_FLASH_Program -200006e8 g .stack_dummy 00000000 end -080017fc g F .text 00000034 UartInit -20000130 g .data 00000000 __data_end__ -08000e60 g F .text 0000021c HAL_CAN_Transmit -080019a8 g F .text 00000008 NvmErase -08001398 g F .text 00000014 CpuUserProgramStartHook -08000218 w F .text 00000002 TIM16_IRQHandler -200006e8 g .bss 00000000 __bss_end__ -00000100 g *ABS* 00000000 __STACK_SIZE -0800020e w F .text 00000002 TIM3_IRQHandler -080001fc w F .text 00000002 EXTI4_15_IRQHandler -080001f6 w F .text 00000002 RCC_IRQHandler -00000000 w *UND* 00000000 __call_exitprocs -08000200 w F .text 00000002 DMA1_Channel1_IRQHandler -080001ec w F .text 00000002 Default_Handler -08000120 g F .text 00000000 _start -080013fc g F .text 00000260 XcpPacketReceived -080021a8 g O .text 00000010 AHBPrescTable -08001e24 g F .text 00000008 CpuInit -08000a28 g F .text 00000058 FLASH_WaitForLastOperation -08001334 g F .text 0000000c LedBlinkInit -0800022a w F .text 00000002 CEC_IRQHandler -08000214 w F .text 00000002 TIM14_IRQHandler -08001de8 g F .text 00000034 FlashDone -08000204 w F .text 00000002 DMA1_Channel4_5_IRQHandler -00000000 w *UND* 00000000 software_init_hook -08001340 g F .text 0000004c LedBlinkTask -08000212 w F .text 00000002 TIM7_IRQHandler -08001f40 g F .text 00000040 CanTransmitPacket -08000216 w F .text 00000002 TIM15_IRQHandler -080001f8 w F .text 00000002 EXTI0_1_IRQHandler -0800022c w F .text 00000002 USB_IRQHandler -080020fc w F .text 00000002 .hidden __aeabi_ldiv0 -08001974 g F .text 00000020 HAL_GetTick -080013c0 g F .text 0000001c XcpInit -0800072c g F .text 000000ec LL_GPIO_DeInit -080005bc g F .text 00000054 RCC_GetSystemClockFreq -08000222 w F .text 00000002 SPI2_IRQHandler -00000000 w *UND* 00000000 __sf_fake_stdin -08001c04 g F .text 0000013c FlashErase -08002178 g F .text 00000010 memset -0800138c g F .text 0000000a LedBlinkExit -08000000 g .text 000000c0 __isr_vector -08000238 g F .text 000000c8 main -08001fe8 g F .text 00000000 .hidden __aeabi_uidiv -080001e6 w F .text 00000002 SVC_Handler -080019c0 g F .text 00000010 NvmDone -08001830 g F .text 00000040 UartTransmitPacket -080019b0 g F .text 00000008 NvmVerifyChecksum -00000000 w *UND* 00000000 hardware_init_hook -08001ea0 g F .text 00000022 CpuMemCopy -200006e8 g .stack_dummy 00000000 __end__ -0800044c g F .text 00000060 SystemInit -08002194 g F .text 00000000 _fini -08001710 g F .text 00000020 ComGetActiveInterfaceMaxTxLen -00000000 w *UND* 00000000 atexit -08001870 g F .text 00000098 UartReceivePacket -08001fe4 g F .text 00000004 CpuIrqEnable -080012ec w F .text 00000024 HAL_InitTick -20008000 g .bss 00000000 __StackTop -080001fe w F .text 00000002 TS_IRQHandler -080001ee w F .text 00000002 WWDG_IRQHandler -0800165c g F .text 00000008 CopInit -0800020c w F .text 00000002 TIM2_IRQHandler -08001ec4 g F .text 0000007c CanInit -080019a0 g F .text 00000008 NvmWrite -08001e2c g F .text 00000074 CpuStartUserProgram -08000202 w F .text 00000002 DMA1_Channel2_3_IRQHandler -08000cf0 g F .text 00000170 HAL_CAN_Init -20008000 g *ABS* 00000000 __stack -080020f4 g F .text 00000008 .hidden __aeabi_uidivmod -08001d90 g F .text 00000058 FlashVerifyChecksum -080003e0 g F .text 0000006c HAL_MspDeInit -08000818 g F .text 000000ba LL_GPIO_Init -080009f0 g F .text 00000024 HAL_FLASH_Unlock -20007f00 g *ABS* 00000100 __StackLimit -08000226 w F .text 00000002 USART2_IRQHandler -08002100 g F .text 0000002c exit -08001738 g F .text 00000008 ComIsConnected -00000000 w *UND* 00000000 __sf_fake_stdout -08000610 g F .text 00000038 LL_RCC_GetSystemClocksFreq -080020fc w F .text 00000002 .hidden __aeabi_idiv0 -080001f4 w F .text 00000002 FLASH_IRQHandler -08001330 w F .text 00000002 _exit -08001730 g F .text 00000008 ComGetActiveInterfaceMaxRxLen -08000224 w F .text 00000002 USART1_IRQHandler -080013ac g F .text 0000000a CopInitHook -08001770 g F .text 00000038 BackDoorCheck -08000208 w F .text 00000002 TIM1_BRK_UP_TRG_COM_IRQHandler -0800107c g F .text 0000024c HAL_CAN_Receive -08001954 g F .text 00000020 TimerGet -00000000 w *UND* 00000000 _Jv_RegisterClasses -08001908 g F .text 00000024 TimerInit -00000000 w *UND* 00000000 __register_frame_info -080013b8 g F .text 00000008 CopServiceHook - - + +bin/openblt_stm32f091.elf: file format elf32-littlearm +bin/openblt_stm32f091.elf +architecture: armv6s-m, flags 0x00000112: +EXEC_P, HAS_SYMS, D_PAGED +start address 0x08000000 + +Program Header: +0x70000001 off 0x000122c4 vaddr 0x080022c4 paddr 0x080022c4 align 2**2 + filesz 0x00000008 memsz 0x00000008 flags r-- + LOAD off 0x00010000 vaddr 0x08000000 paddr 0x08000000 align 2**16 + filesz 0x000022cc memsz 0x000022cc flags r-x + LOAD off 0x000200c0 vaddr 0x200000c0 paddr 0x080022cc align 2**16 + filesz 0x00000070 memsz 0x00000070 flags rw- + LOAD off 0x00020130 vaddr 0x20000130 paddr 0x08002340 align 2**16 + filesz 0x00000000 memsz 0x00000558 flags rw- +private flags = 5000200: [Version5 EABI] [soft-float ABI] + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 000022c4 08000000 08000000 00010000 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .ARM.exidx 00000008 080022c4 080022c4 000122c4 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 2 .data 00000070 200000c0 080022cc 000200c0 2**2 + CONTENTS, ALLOC, LOAD, DATA + 3 .bss 00000558 20000130 08002340 00020130 2**3 + ALLOC + 4 .stack_dummy 00000100 20000688 20000688 00020130 2**3 + CONTENTS, READONLY + 5 .ARM.attributes 00000028 00000000 00000000 00020230 2**0 + CONTENTS, READONLY + 6 .comment 00000075 00000000 00000000 00020258 2**0 + CONTENTS, READONLY + 7 .debug_line 0000d474 00000000 00000000 000202cd 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_info 00016658 00000000 00000000 0002d741 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_abbrev 00004d47 00000000 00000000 00043d99 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_aranges 00000868 00000000 00000000 00048ae0 2**3 + CONTENTS, READONLY, DEBUGGING + 11 .debug_str 0008b4b1 00000000 00000000 00049348 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_loc 00005f27 00000000 00000000 000d47f9 2**0 + CONTENTS, READONLY, DEBUGGING + 13 .debug_ranges 00001570 00000000 00000000 000da720 2**0 + CONTENTS, READONLY, DEBUGGING + 14 .debug_macro 0001b57e 00000000 00000000 000dbc90 2**0 + CONTENTS, READONLY, DEBUGGING + 15 .debug_frame 00001394 00000000 00000000 000f7210 2**2 + CONTENTS, READONLY, DEBUGGING +SYMBOL TABLE: +08000000 l d .text 00000000 .text +080022c4 l d .ARM.exidx 00000000 .ARM.exidx +200000c0 l d .data 00000000 .data +20000130 l d .bss 00000000 .bss +20000688 l d .stack_dummy 00000000 .stack_dummy +00000000 l d .ARM.attributes 00000000 .ARM.attributes +00000000 l d .comment 00000000 .comment +00000000 l d .debug_line 00000000 .debug_line +00000000 l d .debug_info 00000000 .debug_info +00000000 l d .debug_abbrev 00000000 .debug_abbrev +00000000 l d .debug_aranges 00000000 .debug_aranges +00000000 l d .debug_str 00000000 .debug_str +00000000 l d .debug_loc 00000000 .debug_loc +00000000 l d .debug_ranges 00000000 .debug_ranges +00000000 l d .debug_macro 00000000 .debug_macro +00000000 l d .debug_frame 00000000 .debug_frame +00000000 l df *ABS* 00000000 obj/startup_stm32f0xx.o +00000100 l *ABS* 00000000 Stack_Size +00000000 l *ABS* 00000000 Heap_Size +08000196 l .text 00000000 .flash_to_ram_loop_end +0800018c l .text 00000000 .flash_to_ram_loop +080001c0 l .text 00000000 .fill_zero_bss +080001bc l .text 00000000 .loop_zero_bss +00000000 l df *ABS* 00000000 crtstuff.c +080022c0 l O .text 00000000 __EH_FRAME_BEGIN__ +080000c0 l F .text 00000000 __do_global_dtors_aux +20000130 l .bss 00000001 completed.8879 +2000012c l O .data 00000000 __do_global_dtors_aux_fini_array_entry +080000e8 l F .text 00000000 frame_dummy +20000134 l .bss 00000018 object.8884 +20000128 l O .data 00000000 __frame_dummy_init_array_entry +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o +00000000 l df *ABS* 00000000 system_stm32f0xx.c +00000000 l df *ABS* 00000000 stm32f0xx_ll_gpio.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_flash.c +0800042c l F .text 0000003c FLASH_SetErrorCode +00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_flash_ex.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_can.c +00000000 l df *ABS* 00000000 stm32f0xx_ll_utils.c +00000000 l df *ABS* 00000000 stm32f0xx_ll_usart.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_cortex.c +00000000 l df *ABS* 00000000 stm32f0xx_hal.c +00000000 l df *ABS* 00000000 stm32f0xx_ll_rcc.c +00000000 l df *ABS* 00000000 _exit.c +00000000 l df *ABS* 00000000 led.c +2000014c l O .bss 00000002 ledBlinkIntervalMs +2000014e l O .bss 00000001 ledOn.6834 +20000150 l O .bss 00000004 nextBlinkEvent.6835 +00000000 l df *ABS* 00000000 hooks.c +00000000 l df *ABS* 00000000 main.c +00000000 l df *ABS* 00000000 assert.c +00000000 l df *ABS* 00000000 cop.c +00000000 l df *ABS* 00000000 boot.c +00000000 l df *ABS* 00000000 backdoor.c +20000154 l O .bss 00000004 backdoorExtensionTime +20000158 l O .bss 00000001 backdoorOpen +2000015c l O .bss 00000004 backdoorOpenTime +00000000 l df *ABS* 00000000 com.c +20000160 l O .bss 00000040 xcpCtoReqPacket.4316 +200000c4 l O .data 00000001 comActiveInterface +08002088 l O .text 00000006 CSWTCH.6 +00000000 l df *ABS* 00000000 xcp.c +200001a0 l O .bss 0000004c xcpInfo +08002168 l O .text 00000008 xcpStationId +00000000 l df *ABS* 00000000 timer.c +200001ec l O .bss 00000004 millisecond_counter +00000000 l df *ABS* 00000000 rs232.c +080016c4 l F .text 0000002c Rs232TransmitByte +200001f0 l O .bss 00000041 xcpCtoReqPacket.7435 +20000231 l O .bss 00000001 xcpCtoRxInProgress.7437 +20000232 l O .bss 00000001 xcpCtoRxLength.7436 +20000234 l O .bss 00000004 xcpCtoRxStartTime.7438 +00000000 l df *ABS* 00000000 can.c +20000238 l O .bss 00000028 canHandle +080021c0 l O .text 00000024 canTiming +00000000 l df *ABS* 00000000 flash.c +08001988 l F .text 00000048 FlashGetSector +080021e4 l O .text 000000d8 flashLayout +080019d0 l F .text 00000068 FlashWriteBlock +08001a38 l F .text 0000004c FlashSwitchBlock +20000464 l O .bss 00000204 bootBlockInfo +20000260 l O .bss 00000204 blockInfo +08001a84 l F .text 000000a4 FlashAddToBlock +00000000 l df *ABS* 00000000 cpu.c +00000000 l df *ABS* 00000000 nvm.c +00000000 l df *ABS* 00000000 cpu_comp.c +00000000 l df *ABS* 00000000 _udivsi3.o +08001eb4 l .text 00000000 .udivsi3_skip_div0_test +00000000 l df *ABS* 00000000 _dvmd_tls.o +00000000 l df *ABS* 00000000 exit.c +00000000 l df *ABS* 00000000 init.c +00000000 l df *ABS* 00000000 memset.c +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/thumb/v6-m/nofp/crti.o +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/thumb/v6-m/nofp/crtn.o +00000000 l df *ABS* 00000000 impure.c +200000c8 l O .data 00000060 impure_data +00000000 l df *ABS* 00000000 crtstuff.c +080022c0 l O .text 00000000 __FRAME_END__ +00000000 l df *ABS* 00000000 +2000012c l .data 00000000 __init_array_end +20000128 l .data 00000000 __preinit_array_end +20000128 l .data 00000000 __init_array_start +20000128 l .data 00000000 __preinit_array_start +080012c8 g F .text 00000020 ComInit +08001b40 g F .text 00000060 FlashWrite +08002078 g O .text 00000008 APBPrescTable +20000688 g .stack_dummy 00000000 __HeapBase +08001220 g F .text 00000008 AssertFailure +08001948 g F .text 00000040 CanReceivePacket +00000000 g *ABS* 00000000 __HEAP_SIZE +0800166c g F .text 0000001c TimerUpdate +080013d8 g F .text 00000010 XcpPacketTransmitted +200000c0 g .data 00000000 __data_start__ +08000c74 g F .text 00000058 HAL_NVIC_SetPriority +080001f2 w F .text 00000002 TIM1_CC_IRQHandler +08000490 g F .text 00000014 HAL_FLASH_Lock +080012e8 g F .text 0000005c ComTask +080001cc w F .text 00000002 HardFault_Handler +080001ee w F .text 00000002 ADC1_COMP_IRQHandler +080016c0 g F .text 00000002 SysTick_Handler +080001d8 w F .text 00000002 PVD_IRQHandler +08001238 g F .text 0000001c BootInit +080005c8 g F .text 0000000c HAL_RCC_GetHCLKFreq +080001d0 w F .text 00000002 PendSV_Handler +080001ca w F .text 00000002 NMI_Handler +080022cc g .ARM.exidx 00000000 __exidx_end +08000216 w F .text 00000002 BootRAM +08000204 w F .text 00000002 I2C1_IRQHandler +080012a8 g F .text 00000020 BackDoorInit +08000b64 g F .text 0000000c LL_SetSystemCoreClock +080022cc g .ARM.exidx 00000000 __etext +08000d04 g F .text 00000024 HAL_DeInit +080010d0 g F .text 000000e0 HAL_MspInit +08001230 g F .text 00000008 CopService +08001724 g F .text 00000040 Rs232TransmitPacket +08001eac g F .text 00000004 CpuIrqDisable +08001764 g F .text 00000098 Rs232ReceivePacket +08000e88 g F .text 000000f0 LL_RCC_GetUSARTClockFreq +08001dc4 g F .text 00000008 FlashGetUserProgBaseAddress +08000d6c g F .text 00000074 LL_RCC_DeInit +08001660 g F .text 0000000c TimerReset +200000c0 g O .data 00000004 SystemCoreClock +08001254 g F .text 00000014 BootTask +080008e0 g F .text 0000005e HAL_CAN_Start +08001eb4 g F .text 0000010a .hidden __udivsi3 +08001ce8 g F .text 00000050 FlashWriteChecksum +08001348 g F .text 00000030 ComTransmitPacket +20000688 g .stack_dummy 00000000 __HeapLimit +20000130 g .bss 00000000 __bss_start__ +08000208 w F .text 00000002 SPI1_IRQHandler +080005d4 g F .text 000000d8 HAL_FLASHEx_Erase +080007ec g F .text 000000f2 HAL_CAN_ConfigFilter +080001f8 w F .text 00000002 TIM6_DAC_IRQHandler +08000ccc g F .text 00000038 HAL_SYSTICK_Config +08000a28 g F .text 0000001e HAL_CAN_IsTxMessagePending +20000668 g O .bss 00000020 pFlash +080022c4 g .text 00000000 __exidx_start +08000b70 g F .text 00000104 LL_USART_Init +080022bc g O .text 00000004 _global_impure_ptr +08001ff8 g F .text 00000048 __libc_init_array +08000210 w F .text 00000002 USART3_4_IRQHandler +08000108 g F .text 00000000 _mainCRTStartup +080001e2 w F .text 00000002 EXTI2_3_IRQHandler +080006ac w F .text 00000002 HAL_CAN_MspInit +080013c8 g F .text 00000010 XcpIsConnected +08002050 g F .text 00000000 _init +08000206 w F .text 00000002 I2C2_IRQHandler +08001e74 g F .text 00000008 NvmInit +08001b28 g F .text 00000018 FlashInit +08001e94 g F .text 00000008 NvmGetUserProgBaseAddress +08000202 w F .text 00000002 TIM17_IRQHandler +080001da w F .text 00000002 RTC_IRQHandler +08000940 g F .text 000000e8 HAL_CAN_AddTxMessage +08000180 g F .text 00000034 Reset_Handler +08000d4c g F .text 00000020 HAL_Init +08001344 g F .text 00000002 ComFree +08000500 g F .text 000000c8 HAL_FLASH_Program +20000688 g .stack_dummy 00000000 end +20000130 g .data 00000000 __data_end__ +08001e84 g F .text 00000008 NvmErase +08000fe0 g F .text 00000018 CpuUserProgramStartHook +08000200 w F .text 00000002 TIM16_IRQHandler +20000688 g .bss 00000000 __bss_end__ +00000100 g *ABS* 00000000 __STACK_SIZE +080001f6 w F .text 00000002 TIM3_IRQHandler +080001e4 w F .text 00000002 EXTI4_15_IRQHandler +080001de w F .text 00000002 RCC_IRQHandler +080001e8 w F .text 00000002 DMA1_Channel1_IRQHandler +080001d4 w F .text 00000002 Default_Handler +08000108 g F .text 00000000 _start +080013e8 g F .text 00000254 XcpPacketReceived +08002068 g O .text 00000010 AHBPrescTable +08001dcc g F .text 00000008 CpuInit +080004a4 g F .text 0000005c FLASH_WaitForLastOperation +08000f7c g F .text 0000000c LedBlinkInit +08000212 w F .text 00000002 CEC_IRQHandler +080001fc w F .text 00000002 TIM14_IRQHandler +08001d90 g F .text 00000034 FlashDone +080001ec w F .text 00000002 DMA1_Channel4_5_IRQHandler +08000f88 g F .text 0000004c LedBlinkTask +080001fa w F .text 00000002 TIM7_IRQHandler +080018f4 g F .text 00000054 CanTransmitPacket +080001fe w F .text 00000002 TIM15_IRQHandler +080001e0 w F .text 00000002 EXTI0_1_IRQHandler +08000214 w F .text 00000002 USB_IRQHandler +08001fc8 w F .text 00000002 .hidden __aeabi_ldiv0 +080016f0 g F .text 00000034 Rs232Init +080016a4 g F .text 0000001c HAL_GetTick +080013b0 g F .text 00000018 XcpInit +08000280 g F .text 000000ec LL_GPIO_DeInit +08000de0 g F .text 00000070 RCC_GetSystemClockFreq +0800020a w F .text 00000002 SPI2_IRQHandler +08001ba0 g F .text 00000148 FlashErase +08002040 g F .text 00000010 memset +08000fd4 g F .text 0000000a LedBlinkExit +08000000 g .text 000000c0 __isr_vector +0800100c g F .text 000000c4 main +08000a48 g F .text 0000011c HAL_CAN_GetRxMessage +08001eb4 g F .text 00000000 .hidden __aeabi_uidiv +080001ce w F .text 00000002 SVC_Handler +08001e9c g F .text 00000010 NvmDone +08001e8c g F .text 00000008 NvmVerifyChecksum +08001e54 g F .text 00000020 CpuMemCopy +20000688 g .stack_dummy 00000000 __end__ +08000220 g F .text 00000060 SystemInit +0800205c g F .text 00000000 _fini +08001398 g F .text 00000008 ComGetActiveInterfaceMaxTxLen +08001eb0 g F .text 00000004 CpuIrqEnable +08000d28 w F .text 00000024 HAL_InitTick +20008000 g .bss 00000000 __StackTop +080001e6 w F .text 00000002 TS_IRQHandler +080001d6 w F .text 00000002 WWDG_IRQHandler +08001228 g F .text 00000008 CopInit +080001f4 w F .text 00000002 TIM2_IRQHandler +080017fc g F .text 000000f8 CanInit +08001e7c g F .text 00000008 NvmWrite +08001dd4 g F .text 00000080 CpuStartUserProgram +080001ea w F .text 00000002 DMA1_Channel2_3_IRQHandler +080006b0 g F .text 0000013a HAL_CAN_Init +20008000 g *ABS* 00000000 __stack +08001fc0 g F .text 00000008 .hidden __aeabi_uidivmod +08001d38 g F .text 00000058 FlashVerifyChecksum +080011b0 g F .text 00000070 HAL_MspDeInit +0800036c g F .text 000000be LL_GPIO_Init +08000468 g F .text 00000028 HAL_FLASH_Unlock +20007f00 g *ABS* 00000100 __StackLimit +0800020e w F .text 00000002 USART2_IRQHandler +08001fcc g F .text 0000002c exit +080013a0 g F .text 0000000e ComIsConnected +08000e50 g F .text 00000038 LL_RCC_GetSystemClocksFreq +08001fc8 w F .text 00000002 .hidden __aeabi_idiv0 +080001dc w F .text 00000002 FLASH_IRQHandler +08000f78 w F .text 00000002 _exit +08001378 g F .text 00000020 ComGetActiveInterfaceMaxRxLen +0800020c w F .text 00000002 USART1_IRQHandler +08000ff8 g F .text 0000000a CopInitHook +08001268 g F .text 00000040 BackDoorCheck +080001f0 w F .text 00000002 TIM1_BRK_UP_TRG_COM_IRQHandler +08001688 g F .text 0000001c TimerGet +0800163c g F .text 00000024 TimerInit +08001004 g F .text 00000008 CopServiceHook + + diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.srec b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.srec index b71b5127..35db1b51 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.srec +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/bin/openblt_stm32f091.srec @@ -1,581 +1,567 @@ S01D000062696E2F6F70656E626C745F73746D3332663039312E7372656393 -S315080000000080002099010008E3010008E5010008C6 +S315080000000080002081010008CB010008CD0100080E S3150800001000000000000000000000000000000000D2 -S31508000020000000000000000000000000E7010008D2 -S315080000300000000000000000E9010008951900080A -S31508000040EF010008F1010008F3010008F5010008B6 -S31508000050F7010008F9010008FB010008FD01000886 -S31508000060FF01000801020008030200080502000853 -S3150800007007020008090200080B0200080D02000822 -S315080000800F020008110200081302000815020008F2 -S3150800009017020008190200081B0200081D020008C2 -S315080000A01F02000821020008230200082502000892 -S315080000B027020008290200082B0200082D02000862 +S31508000020000000000000000000000000CF010008EA +S315080000300000000000000000D1010008C1160008F9 +S31508000040D7010008D9010008DB010008DD01000816 +S31508000050DF010008E1010008E3010008E5010008E6 +S31508000060E7010008E9010008EB010008ED010008B6 +S31508000070EF010008F1010008F3010008F501000886 +S31508000080F7010008F9010008FB010008FD01000856 +S31508000090FF01000801020008030200080502000823 +S315080000A007020008090200080B0200080D020008F2 +S315080000B00F020008110200081302000815020008C2 S315080000C010B5064C2378002B07D1054B002B02D020 S315080000D0044800E000BF0123237010BD3001002052 -S315080000E000000000AC230008084B10B5002B03D015 -S315080000F00749084800E000BF07480368002B00D1FD -S3150800010010BD064B002BFBD09847F9E7000000000E -S3150800011034010020AC230008300100200000000054 -S31508000120164B002B00D1144B9D46402292029A1A78 -S31508000130924600218B460F461348144A121A02F0BB -S315080001401BF80F4B002B00D098470E4B002B00D006 -S3150800015098470020002104000D000D48002802D011 -S315080001600C4800E000BF01F0E1FF2000290000F084 -S3150800017063F801F0C5FFC0460000080000800020B3 -S31508000180000000000000000030010020E806002002 -S3150800019000000000000000000749084A084B9B1AA7 -S315080001A005DD00240859105104349C42FADB054841 -S315080001B08047054800470000B8230008C000002013 -S315080001C0300100204D040008210100081849194A89 -S315080001D0002301E00B6004319142FBD300F02CF8B8 +S315080000E000000000C0220008044B10B5002B03D006 +S315080000F00349044800E000BF10BDC04600000000E8 +S3150800010034010020C0220008164B002B00D1144BE6 +S315080001109D46402292029A1A924600218B460F4625 +S315080001201348144A121A01F08BFF0F4B002B00D00C +S3150800013098470E4B002B00D098470020002104005A +S315080001400D000D48002802D00C4800E000BF01F061 +S3150800015053FF2000290000F059FF01F037FFC04681 +S3150800016000000800008000200000000000000000D9 +S315080001703001002088060020000000000000000072 +S315080001800749084A084B9B1A05DD002408591051EF +S3150800019004349C42FADB05488047054800470000BE +S315080001A0CC220008C00000203001002021020008EF +S315080001B0090100081849194A002301E00B600431B7 +S315080001C09142FBD300F022FFFEE7FEE7FEE7FEE7DB +S315080001D0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7E9 S315080001E0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7D9 S315080001F0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7C9 S31508000200FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B8 -S31508000210FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7A8 -S31508000220FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE798 -S3150800023030010020E806002010B501F069F8012217 -S3150800024029490B68934313430B600B681A4203D181 -S315080002506A21264801F0B8FA8021254BC9021A6896 -S315080002600A4380211A601A6849020A4380211A60E3 -S315080002701A00890210681E4B0842FBD059681D4AAD -S315080002800A40A42189030A430F215A60DA6A8A437D -S31508000290110001220A438021DA621A6849040A43D6 -S315080002A080211A601A0089041068114B0842FBD095 -S315080002B0F0215A688A435A6059680F4A0A4003214E -S315080002C05A605A688A43110002220A430C215A606E -S315080002D05A680A40082AFBD1084800F0E7F801F0F6 -S315080002E02FFA01F03BFAFCE700200240A0210008A3 -S315080002F000100240FF7FC2FFFFF8FFFF006CDC0220 -S31508000300F0B50125334B8DB09A6990262A439A6138 -S315080003109A6900242A400592059A80225969920210 -S315080003201143596159692027114004910499802184 -S315080003305869C902084358615869F605014003918E -S31508000340039980215869090308435861586901408F -S3150800035002910299D96930001143D961D9690A40D5 -S315080003600192019A8022D96992041143D961DB6905 -S3150800037006A91A400092009B0697079508940994C7 -S315080003800A9400F049FA8023B7629B0106A912482D -S31508000390069307940A9400F03FFA0C231E3F06A919 -S315080003A0300006930797089409940A940B9500F071 -S315080003B033FAC0239B000693032306A9089307482C -S315080003C00133079709940A940B9300F025FA0DB0A8 -S315080003D0F0BDC0460010024000080048000400486E -S315080003E010B590242023E405A362114800F09EF975 -S315080003F0104800F09BF9200000F098F90E4B0F4AC0 -S31508000400D9690A40DA61D9690D4A1140D961586932 -S315080004100C490140596158690B49014059615969AC -S315080004200A4001215A619A698A439A6110BDC046F9 -S31508000430000800480004004800100240FFFFFFFDC6 -S31508000440FFFFFDFFFFFFF7FFFFFFFBFF0121114B3A -S315080004501A680A431A6058680F4A02405A601868B0 -S315080004600E4A02401A6018680D4A02401A60586817 -S315080004700C4A02400F205A60DA6A8243DA62186B25 -S31508000480094A02401A635A6B8A435A6300229A60E1 -S315080004907047C046001002400CB8FF08FFFFF6FE82 -S315080004A0FFFFFBFFFFFFC0FFACFEF0FF014B18602C -S315080004B07047C046C000002030B5036885B0040008 -S315080004C00D00DB072FD4EA684968036811432A69D7 -S315080004D01143AA6911432D4A13400B43036042682E -S315080004E02B4B1340AA68134343608268294B134079 -S315080004F06A6913438360284B98423FD0274B98423A -S3150800050040D0274B984228D0264B98420ED0264BEF -S3150800051098420BD0254B984208D0254B984205D0D7 -S31508000520244B984202D0002005B030BD01A800F047 -S315080005306FF803980028F6D029680029F3D080239D -S31508000540AA691B029A420CD04B08181801F04CFDF8 -S315080005500004000CE0600120E6E7122000F074F8C1 -S31508000560E8E74B084000C01801F03EFD124B034077 -S315080005700007400F1843E0600120D5E7002000F08F -S3150800058063F8D7E7102000F05FF8D3E7F369FFEFC9 -S31508000590FFCFFFFFFFFCFFFF00380140004400408B -S315080005A000480040004C0040005000400014014044 -S315080005B000180140001C0140F0FF00000C2170B536 -S315080005C0104A53680B40082B05D00C2B01D00E4857 -S315080005D070BD0E48FCE75368C0225202134093428E -S315080005E00DD10A480F25074BD96A5C6829400131A5 -S315080005F001F0FAFCA40C2C4002346043E8E70248F8 -S31508000600F0E7C0460010024000127A00006CDC02D7 -S3150800061010B50400FFF7D2FF084A2060536808495E -S315080006201B061B0FCB5CD84060605368054A5B0508 -S315080006305B0FD35CD840A06010BDC04600100240D6 -S31508000640A8210008B821000810B5031E18D10320F8 -S315080006502C4C236B184002283DD0032846D001288D -S3150800066021D0FFF7ABFF626827491206120F8A5C92 -S315080006706368D0405B05254A5B0FD35CD84010BD44 -S31508000680102813D1C0231F4C9B02226B13408022D3 -S31508000690520513431E4A93422ED01E4A934225D032 -S315080006A01D4A9342DDD1FFF789FFE8E70020122BA8 -S315080006B0E5D1C023134C1B03226B1340902252052D -S315080006C01343164A934217D0154A934209D0154A3E -S315080006D09342C6D1E7E7236A1840431E9841C003F0 -S315080006E0CDE723689B07CAD50F48C8E723680020CB -S315080006F09B07C4D50C48C2E7206A8007C00FC00311 -S31508000700BDE7C04600100240A8210008B82100082D -S31508000710000002100000031000000110000008127B -S3150800072000000C120000041200127A009022030046 -S31508000730D20590421CD02C4A904225D02B4A904292 -S315080007402ED02B4A904237D02A4A904240D02A4A85 -S315080007500020934200D070478021284BC9039A6A2B -S3150800076001300A439A62996A254A0A409A62F2E770 -S315080007708021224B89029A6A01200A439A62996A61 -S31508000780204A0A409A62E6E780211C4BC9029A6A07 -S3150800079001200A439A62996A1B4A0A409A62DAE772 -S315080007A08021164B09039A6A01200A439A62996ABC -S315080007B0164A0A409A62CEE78021104B49039A6A84 -S315080007C001200A439A62996A114A0A409A62C2E764 -S315080007D080210A4B89039A6A01200A439A62996A18 -S315080007E00C4A0A409A62B6E7000400480008004826 -S315080007F0000C004800100048001400480010024091 -S31508000800FFFFBFFFFFFFFDFFFFFFFBFFFFFFF7FF38 -S31508000810FFFFEFFFFFFFDFFFF0B547460D6880B427 -S315080008204A68002D24D0012300249C466346A34031 -S315080008302B4019D01E005E437700BF19FF43724351 -S315080008400568B8463D40154305604A68551E012DA2 -S315080008502AD942460F69C56877432A403A43C26097 -S315080008604A68022A11D00D682B000134E340DDD115 -S31508000870013A012A05D84268CB68AA435D43154365 -S315080008804560012004BC9046F0BDFF2B14D8330008 -S315080008907343026A1D01ED1AAA434D696B4313435C -S315080008A003624A680D68DFE747468D6882687543C4 -S315080008B03A402A438260CCE71B0A5B435B43426AA1 -S315080008C01D01ED1AAA434D696B43134343624A68F7 -S315080008D0C9E7C046014B18687047C046C0000020EB -S315080008E0F0B54E4657464546E0B42F4F06003B7EC8 -S315080008F089460220012B41D001233B7633682B48D9 -S31508000900012B34D000F090F8002834D101234A4650 -S315080009105B421360B3687568DB025B199D422AD295 -S315080009200023234C98460AE080231B019C467268E4 -S3150800093065449446B368DB026344AB421CD943461C -S315080009400222FB61236992461343236140236561B2 -S31508000950226916481343236100F066F85246236954 -S31508000960934323610028DFD04B461D6004E000F066 -S315080009705BF8002807D0012000233B761CBC904674 -S315080009809946A246F0BD0425094CF8612369074833 -S315080009902B432361402322691343236100F044F863 -S315080009A02369AB432361E7E7C806002050C300006C -S315080009B00020024010B50C4BDA680023D20605D594 -S315080009C00A4A0233D1690B43D3611023064AD16818 -S315080009D004220A4205D0012104481343C46921436D -S315080009E0C161014AD36010BD00200240C80600203C -S315080009F0054B01201A69120604D50020034A5A60DD -S31508000A00034A5A607047C0460020024023016745E2 -S31508000A10AB89EFCD8023034A002011690B4313618C -S31508000A207047C04600200240F8B5040000F0A2FF57 -S31508000A30124E0700012501E0631C13D1F3680F4A23 -S31508000A401D42F9D12023D1680B4214D10B4BDA6829 -S31508000A50D20603D4DB6800205B0702D5FFF7AAFF9E -S31508000A600120F8BD002C04D000F084FFC01B84428E -S31508000A70E4D20320F5E7D360E8E7C0460020024049 -S31508000A80F0B54D4644465F465646F0B4994683B09F -S31508000A90294B019298461B7E04000D000220012B6B -S31508000AA006D103B03CBC90469946A246AB46F0BD7B -S31508000AB00123424621481376FFF7B6FF002833D1B3 -S31508000AC0012C35D0022C35D00423013BDBB25B0068 -S31508000AD09A460023AA1C924400269B4618E04A46DA -S31508000AE0DA401300424659460127154CD16122695E -S31508000AF09BB23A43226111482B80FFF795FF236981 -S31508000B00BB43236100280FD10235103655450BD05B -S31508000B1020235B42F318E2D520234A469B1B9A40C2 -S31508000B20019BF3401343DDE7002342461376B8E7FB -S31508000B300123CAE70223C8E7C806002050C30000FD -S31508000B400020024070B5002814DB032483082040E7 -S31508000B50FC342600134AC0259446C0008901864005 -S31508000B60214081409B006344AD005A59B24311436A -S31508000B70595170BD03240F23C0B203402040FC34F2 -S31508000B802500094AC00094468901854021408140D4 -S31508000B90083B9B089B006344DA69AA431143D96161 -S31508000BA0E7E7C04600E100E000ED00E00A4A431E20 -S31508000BB0012093420ED8C020084A094953600B6A9F -S31508000BC000061B021B0A03430B62002300209360E6 -S31508000BD0073313607047C046FFFFFF0010E000E0D0 -S31508000BE000ED00E0F0B50124260080254B694A6A2D -S31508000BF09E400368AD005B5917023B4A1A403B000A -S31508000C001343234387240268A4005351F34305681A -S31508000C102A591A402A51CA69002A19D10568103C6E -S31508000C202A591A402A51CA68056814048A8814433E -S31508000C304A694832D200545105688A68AC46140499 -S31508000C400A8814434A694832D20062445460CA6921 -S31508000C50012A2DD081248A690568A400002A23D197 -S31508000C602A591A402A510A690468002A16D1852287 -S31508000C709200A5582B40A3500B6A012B05D1872259 -S31508000C80016892008B581E438E508022016801200D -S31508000C9092008B5883438B500020F0BD852292002A -S31508000CA0A3583343A350E7E72A5932432A51DAE7D0 -S31508000CB083240568A4002A5932432A510A6805681C -S31508000CC014048A8814434A694832D2005451056884 -S31508000CD08A68AC4614048A8914434A694832D200A1 -S31508000CE062445460B6E7C046FFC0FFFF7047C0467F -S31508000CF0F8B5051E00D186E03D23C35CDBB2002BA8 -S31508000D0000D182E002213D23E9542A6801261368AE -S31508000D108B43136001232A6811680B43136000F0A4 -S31508000D2029FE070004E000F025FEC01B0A2860D84B -S31508000D302B6801225C683440F5D059680A425FD0B6 -S31508000D40AA69012A66D080211A688A431A60EB6963 -S31508000D502A68012B00D17EE0402113688B4313607B -S31508000D602B6A2A68012B00D170E0202113688B4377 -S31508000D7013606B6A2A68012B63D0102113688B43B2 -S31508000D801360AB6A2A68012B56D0082113688B4377 -S31508000D901360EB6A2A68012B49D0042113688B4338 -S31508000DA01360EA68AB68296813432A690124134368 -S31508000DB06A6913436A68013A1343CB6101212A68B9 -S31508000DC013688B43136000F0D5FD060004E000F0BD -S31508000DD0D1FD801B0A2822D82B6801215A681442A3 -S31508000DE0F5D15B680B400BD12B643D230020E954F9 -S31508000DF005E03D2303220320EA54013BEC54F8BDE9 -S31508000E0004223D23EA540120F9E73C228354FFF7E4 -S31508000E106DFF77E719687F320A431A6097E703225E -S31508000E203D23EA540022013BEA540320E7E7116810 -S31508000E3003330B431360B4E7116807330B4313609E -S31508000E40A7E711680F330B4313609AE711681F333E -S31508000E500B4313608DE711683F330B4313607FE73D -S31508000E60F0B54E4645465746E0B4036805009A680D -S31508000E700E00520103D49A68120100D49BE03C226A -S31508000E80A95C0220012900D190E00121A9543C3136 -S31508000E906A5CD2B2322A00D1CCE0622A00D1C6E01E -S31508000EA0222A00D190E012226A549A68002452013C -S31508000EB004D402229C682401E40F141BC0210127D4 -S31508000EC022019B1849005858384058502B6B98688F -S31508000ED08046002800D09AE0286887187858804607 -S31508000EE0186840058446D86843460343604603436A -S31508000EF07B500F27296B0B693B400B612B689918B0 -S31508000F00C2235B00C858B843C8502968286B89189B -S31508000F10CF5800693843C8502B6B524F59692B6814 -S31508000F209B188933FF3319602B6B99692B689B18BB -S31508000F308D33FF3319602B68C0219C460123624418 -S31508000F40490050580343535000F014FD464B82465F -S31508000F509846464B99462A680AE045493B408C46DE -S31508000F606344591E8B41DBB2002B10D0731C37D15A -S31508000F709368002CF1D0012C29D041460B403D49FD -S31508000F808C466344591E8B41DBB2002BEED13D22C1 -S31508000F90AB5CDBB2522B56D0722B51D0422B4CD0C5 -S31508000FA00123AB5400223C230020EA541CBC904683 -S31508000FB09946A246F0BD9A68D20000D55FE704229A -S31508000FC03D23C2540120F1E720326A546DE74946B1 -S31508000FD00B4029498C466344591E8B41DBB2C3E753 -S31508000FE0002E06D000F0C6FC5346C01A8642B2D27E -S31508000FF02A6803213D23E954002C27D180239168D0 -S315080010000B43936000223C230320EA54CEE72F6863 -S31508001010B946914448464746405807433800DF6872 -S315080010205B683843DB0003434846435061E7722256 -S315080010306A543AE752226A5437E7203BAB54B1E781 -S315080010406223AB54AEE73223AB54ABE793688021F7 -S31508001050012C03D009040B439360D3E709020B4321 -S315080010609360CFE7010000040000011000010008AA -S31508001070FFFFFFFB0000FFEF00FFFFF7F0B5474655 -S315080010803C2380B41600C25C04000D000220012A2D -S3150800109000D1B0E00122E254002900D0AEE00133CD -S315080010A0E25C222A00D1C4E0E25C422A00D1C0E018 -S315080010B0E25C622A00D1BCE0E25C722A00D1B8E0A8 -S315080010C0E25CD2B2322A00D1E6E0522A00D1E9E047 -S315080010D0122A00D1E3E02222E25400F04BFC032757 -S315080010E0804622680AE0D3683B4019004B424B41D0 -S315080010F0DBB2002B0CD0731C00D0B2E0002DF2D06E -S3150800110013693B4019004B424B41DBB2002BF2D12D -S31508001110002D00D0BBE0636B290004261B310801B3 -S31508001120125832409A6000D0ACE022688258520DBC -S315080011301A6001200F260A01216851584908014002 -S31508001140D9602168891849683140196121688C4637 -S31508001150624452681D621204120EDA6121682A017D -S315080011608918B931FF310968197521688918B931A3 -S31508001170FF310968090A597521688918B931FF319B -S315080011800968090C997521688918B931FF31096808 -S31508001190090ED97521688918BD31FF310968197694 -S315080011A021688918BD31FF310968090A597621680D -S315080011B08918BD31FF310968090C997621688C4672 -S315080011C06244BD32FF321268120EDA762268002DAA -S315080011D037D12023D1680B43D3603D22A35CDBB211 -S315080011E0622B65D0722B66D0422B37D0A0540022D2 -S315080011F03C230020E25404BC9046F0BD01290BD0E4 -S315080012003D22A35CDBB2222B43D0422B4DD0122BBE -S3150800121014D03223A35460E73D23E25C322A08D077 -S31508001220E25C522A05D0E25C622A02D0E35C722BA9 -S31508001230E6D100223C230220E254DCE74033A354E3 -S315080012404BE7202311690B4313613D22A35CDBB2F4 -S31508001250622B36D0722B31D0522BC7D11223A3540E -S31508001260C5E7002E06D000F085FB4346C01A864225 -S3150800127000D336E703223D23E2540022013BE25421 -S315080012800320B8E722688258D2085A6051E7A36B50 -S3150800129042E76223A35420E76222E2541DE7303274 -S315080012A0E2541AE77222E25417E77223A35414E7AA -S315080012B03223A3549BE75223A35498E74223A3540B -S315080012C095E72223A35492E70121002210B5064B85 -S315080012D0494219611A61D960DA6099629A62FFF720 -S315080012E07FF8002010BDC0460010024010B504006B -S315080012F0FFF7F0FAFA21890000F076FEFFF756FCB0 -S315080013000120002221004042FFF71CFC002010BDEE -S31508001310102310B5054A002011680B431360FFF728 -S31508001320E5FFFEF7EDFF002010BDC0460020024095 -S31508001330FEE7C046014B18807047C04650010020A2 -S3150800134010B500F007FB0E4C236898420FD30D4BDF -S315080013501A78002A0CD000221A7090232032DB0556 -S315080013609A6200F0F7FA084B1B881818206010BD1F -S3150800137001321A7090231F32DB059A61F1E7C046E5 -S315080013804C01002052010020500100209023202209 -S31508001390DB059A627047C04610B5FFF7F7FF024BA8 -S315080013A018698004C00F10BD0008004810B56420F5 -S315080013B0FFF7C0FF10BDC04610B5FFF7C1FF10BD4F -S315080013C000224321044B44205A5400211A709A647F -S315080013D01A5299705970704754010020024B1878B8 -S315080013E0431E9841C0B27047540100200021432390 -S315080013F0014AD1547047C04654010020F8B5037815 -S315080014000500934CFF2B0CD02278012A00D0F8BD9A -S315080014103733DBB2352B00D9FFE08E4A9B00D35811 -S315080014209F4600220125E370EF3B627023716271CB -S31508001430257000F07DF9A07100F06AF9E07100F0FE -S3150800144067F908224423000A20726572A572E252DF -S3150800145000F0A2FA4323E35C012B05D04423E15EA6 -S315080014600029D4DD89B207E0FE2302220221E370B7 -S31508001470EE3B23713433E25201224323E01CE2544B -S3150800148000F02EF9C3E700F053F96B78013898425B -S315080014905CDDFF230122E370BB3BE2526978002939 -S315080014A000D0C7E000F08CFA0028D3D1FE23022230 -S315080014B0E370CD3B23711333E2524323E35C012BE4 -S315080014C0D2D04423E15AD7E700F0B0FCFF2301222B -S315080014D0E370BB3BE252F0E74168A06C00F064FAA7 -S315080014E00028F3D1E2E70025FF232571E370657133 -S315080014F000F01EF907224423A071E5712572657272 -S31508001500E252DAE7FF23E3704668A76C0025002E4F -S3150800151008D03B78013EED18EDB2013700F0A2F88D -S31508001520002EF6D1002201230021E57123712D0E2C -S315080015306271A2714333083221726172A572E25256 -S31508001540BBE700F0F5F86B7898426EDCFE230222C2 -S31508001550E370DC3B23712233E252AEE7FE23E370ED -S315080015600023022223714433E252A6E7FF2362785E -S31508001570E3700023627106222371A371E37123725B -S315080015804433E25299E70023237063709EE7A66C02 -S3150800159000F0CEF86A1C411E300000F001FA00285F -S315080015A084D0FF23E37000F0C3F8A36C01229C46A5 -S315080015B0442301386044A064E2527EE7FF23E370C7 -S315080015C043680122A3644423E25276E7FF23E370CB -S315080015D0214B0721A3640023082223716371A37199 -S315080015E023726372A3724433E171E25265E700F035 -S315080015F09FF86A789042A9DDA16C92B2201D00F08E -S315080016004FFCFF23A26CE370944644226B78634434 -S31508001610A3646B780133A3521CE7FE230222E3700E -S31508001620DE3B23712433E25247E76968201DA16433 -S315080016306A78E4E7AA1CA06C00F0B2F9002800D189 -S3150800164034E7A26C6B7894466344A36402E7C04609 -S3150800165054010020C02100089822000810B5FFF7A1 -S31508001660A5FE10BD10B5FFF7A7FE10BD10B5FFF714 -S31508001670A7FE00F027FC0123034C237000F0BEF8F8 -S315080016800023237010BDC046C400002010B582B0E8 -S315080016906B46104CD91D200000F072FC012811D0B1 -S315080016A06B462000D91D00F0E3F8012801D002B0EE -S315080016B010BD0022084B20001A706B46D979FFF737 -S315080016C09DFEF4E7044B18706B462000D979FFF7A6 -S315080016D095FEE5E7A0010020C40000207047C0463B -S315080016E070B50A4D06002B780C00012B08D0002B8C -S315080016F003D1E1B2300000F09BF8FFF777FE70BD2A -S31508001700C9B200F01DFC2B78F1E7C046C4000020E2 -S31508001710054B40201B78013BDBB2022B02D8034A5B -S315080017205B00985A7047C046C4000020A0220008F3 -S3150800173010B5FFF7EDFF10BD10B5FFF74FFE10BD52 -S3150800174010B500F06FFBFFF789FF00F0DDF800F039 -S3150800175023F9FFF78BFF00F027F810BD10B5FFF748 -S3150800176081FF00F0E9F8FFF791FF00F001F810BDDE -S3150800177010B5FFF7E1FF012803D0094C2378012BA8 -S3150800178000D010BD00F0E6F8064B1B68F533FF33B2 -S315080017909842F6D30023237000F048FBF1E7C046D1 -S315080017A0E0010020E40100200122054B10B51A7063 -S315080017B000F0D0F8034B1860FFF7DAFF10BDC046FB -S315080017C0E0010020E401002010B5FFF74BFFFCE71D -S315080017D070B5094C80B2208500F0BCF80A300500C7 -S315080017E0802605E0FFF73EFF00F0B4F8854202D3F5 -S315080017F0E3691E42F6D070BD00440040E12310B5EF -S315080018001B0288B001930C220023084C01A9200072 -S31508001810029303930493059206930793FEF74CFEEF -S31508001820012322681343236008B010BD004400401A -S3150800183070B504000D00402912D82800ADB2FFF794 -S31508001840C7FF002D0BD0013DADB201356519FFF775 -S3150800185009FF20780134FFF7BBFFAC42F7D170BD12 -S3150800186081210248FFF7B0FFE7E7C046A822000833 -S31508001870F8B5204D0E002C78002C06D11E4BDA69DF -S31508001880920626D400242000F8BD20241A4AD369DB -S315080018901C4015D0194C1A492378978CCA185770CA -S315080018A001330A78DBB223709A42EBD192B2013146 -S315080018B000F0F6FA00232B70237801243370E2E750 -S315080018C000F048F80F4B1B6864339842DAD92C703D -S315080018D0D8E79B8C0A4ADBB21370013B3F2BD1D861 -S315080018E000F038F8074B1860044B1C7001232B7066 -S315080018F0C9E7C046E901002000440040E80100208D -S31508001900F0010020EC0100200022054B05491A6071 -S31508001910596005219A601960034B1A607047C046E2 -S3150800192010E000E07FBB0000340200200022014BDB -S315080019301A60704710E000E0044B1B68DB0303D510 -S31508001940034A1368013313607047C04610E000E08D -S3150800195034020020054B1B68DB0302D4044B1868CD -S315080019607047034B1A68501C1860F9E710E000E04E -S3150800197034020020054B1B68DB0302D4044B1868AD -S315080019807047034B1A68501C1860F9E710E000E02E -S31508001990340200207047C04610B500F0FFF810BDAD -S315080019A010B500F0FFF810BD10B500F02BF910BD0A -S315080019B010B500F0EDF910BD10B500F02FFA10BD06 -S315080019C010B500F0BDF9002801D000F00DFA10BDE1 -S315080019D0F0B547460F4B80B4984607001C00002513 -S315080019E00D4E00E02668FFF73DFEBE4204D8636848 -S315080019F09C466644B74207D301350C34122DF1D103 -S31508001A00FF2004BC9046F0BD6B005D19AD0045444F -S31508001A10287AF6E7D022000800280008F8B54F46CD -S31508001A204646C0B407000068FFF7D2FF030000204F -S31508001A30FF2B25D0FEF7DCFF81239B009946042364 -S31508001A405B42DB1B3D1DB944984605E023689E4270 -S31508001A5012D104354D4517D043465C193B682E68AC -S31508001A609C466444FFF7FEFD320000232100022055 -S31508001A70FFF706F80028E9D00024FEF7CBFF200080 -S31508001A800CBC90469946F8BD0124F6E70F4B70B595 -S31508001A9004000D00984217D00D4A914207D0FFF76F -S31508001AA0BDFF002801D0EB0502D0002070BD1C0048 -S31508001AB02368AB4206D02000802220C0920029006D -S31508001AC000F0EEF92000F1E7024CECE738020020BE -S31508001AD0002800083C040020F0B5454657464E4607 -S31508001AE0E0B41E004B0A5B029A46036880460C0067 -S31508001AF015005A1C38D09A4507D040465146FFF77C -S31508001B00C5FF804600282DD00368E41A43461F1DEA -S31508001B101B4B4444994601339C460434E24406E090 -S31508001B202B78013E237001350134002E14D0FFF7BF -S31508001B3099FDE31B4B45F3D940465146FFF7A6FFEF -S31508001B40804600280ED0071D3C002B78013E2370E6 -S31508001B5001350134002EEAD101201CBC9046994675 -S31508001B60A246F0BD0020F8E753460700802208C7C2 -S31508001B7092005146380000F093F943461B68BAE7CD -S31508001B80FF0100000123034A5B421360024A136007 -S31508001B907047C0463C0400203802002010B5FFF705 -S31508001BA0F1FF10BD134B70B516004A1E04000D0058 -S31508001BB01B1A9A4201D9002070BDFFF709FFFF28BA -S31508001BC0F9D0601E4019FFF703FFFF28F3D00A4A31 -S31508001BD0630A5B02934206D02B00320021000748B5 -S31508001BE0FFF77AFFE8E72B00320021000448FFF7E9 -S31508001BF073FFE1E7FFFF0308002800083C04002004 -S31508001C0038020020F0B54E4657464546E0B44A4BE2 -S31508001C104A1E86B004000E001B1A9A4206D90020F6 -S31508001C2006B01CBC90469946A246F0BDFFF7D0FE0A -S31508001C30013C0500A019FFF7CBFE8046FF2DEED02C -S31508001C40FF28ECD0002300240293042D5DD9162822 -S31508001C505BD8854259D8394B1F0099460523143756 -S31508001C603E009A4602E033780C369A46FFF7FAFCAD -S31508001C7055455AD00134E4B2122CF4D101235B4203 -S31508001C809A463C000526002501E026780C34FFF725 -S31508001C90E9FCB04543D00135EDB2122DF5D1012648 -S31508001CA076420525002401E03D780C37FFF7DAFC7B -S31508001CB0A8452ED00134E4B2122CF5D100235246A1 -S31508001CC0B51AED18002303930123ED0AADB2049269 -S31508001CD005930024FEF78CFE002D0BD117E0802219 -S31508001CE012019446049B01340193A4B263440493FD -S31508001CF0A5420CD9FFF7B6FC02A903A8FEF7F0FD2A -S31508001D000028ECD00024FEF785FE200088E7012491 -S31508001D10F9E763001C19A4004C446368CFE76B001D -S31508001D205D194B46AD005E59BBE763001C194B466F -S31508001D30A4001B599A46A4E7FFFF0308D02200080F -S31508001D4000B5114B83B01A680120013219D0986882 -S31508001D505A68844662441100DA680C4894461A693F -S31508001D60614494465A69614494469A696144944622 -S31508001D70DA6961448B185B4201AA04210193FFF7D3 -S31508001D8011FF03B000BDC04638020020C028000875 -S31508001D900D4B18680D4B1B68C0180D4B1B68C018F7 -S31508001DA00C4B1B68C0180C4B1B68C0180B4B1B68E8 -S31508001DB0C0180B4B1B68C0180A4B1B68C018434257 -S31508001DC05841C0B27047C0460028000804280008D9 -S31508001DD0082800080C2800081028000814280008FD -S31508001DE018280008C028000810B50A4803680133F7 -S31508001DF003D0FFF713FE002808D00748036801330D -S31508001E0005D0FFF70BFE431E9841C0B210BD012056 -S31508001E10FCE7C046380200203C0400200048704712 -S31508001E200028000810B500F0DBF810BD70B582B0C8 -S31508001E30FFF7BEFD002801D102B070BDFFF7ACFA6E -S31508001E400028F9D0FFF74AFCFFF770FDFFF73CFAC8 -S31508001E500120114A80259169AD0501439161936975 -S31508001E6003400193019BFFF7A7FD06000400C03657 -S31508001E702D1A23782B550134FFF7F4FBB442F8D119 -S31508001E800323064A11680B431360FFF795FD446860 -S31508001E9000F0A8F8A047CFE7001002400000014074 -S31508001EA070B5551EADB2002A0AD00C006D18013562 -S31508001EB0461A237833550134FFF7D4FBAC42F8D1E0 -S31508001EC070BDC04630B5184B184C00252360184B1A -S31508001ED08BB02363174B200063638023DB022361E7 -S31508001EE080235B0363610C23A5616360E56125625A -S31508001EF06562A562E562A560E560FEF7F9FE0E4A31 -S31508001F00012300920D4A0793029204220893694618 -S31508001F100D332000059506950195039204950993BE -S31508001F20FEF760FE0BB030BD00640040800600205E -S31508001F30400600205C060020E0CC0000E0FF000020 -S31508001F4070B505000C480D4A036B1A600023026B36 -S31508001F509360026BD360036B19610023002907D0D5 -S31508001F60026BEC5CD21801331475DAB29142F7D8D9 -S31508001F703221FEF775FF70BD80060020E1070000DC -S31508001F80F8B5154C06000D00002200212000FFF7C9 -S31508001F9075F80023002805D1626B104917680300FD -S31508001FA08F4201D01800F8BD9768002FFAD113693F -S31508001FB0002B0ED00023D218127D0133F255626B26 -S31508001FC0DBB211691F008B42F5D3C9B22970012310 -S31508001FD0E8E70021FAE7C046800600206706000009 -S31508001FE072B6704762B67047002243088B4274D3B4 -S31508001FF003098B425FD3030A8B4244D3030B8B42FC -S3150800200028D3030C8B420DD3FF22090212BA030C04 -S315080020108B4202D31212090265D0030B8B4219D3E5 -S3150800202000E0090AC30B8B4201D3CB03C01A524105 -S31508002030830B8B4201D38B03C01A5241430B8B424D -S3150800204001D34B03C01A5241030B8B4201D30B0336 -S31508002050C01A5241C30A8B4201D3CB02C01A52415D -S31508002060830A8B4201D38B02C01A5241430A8B4220 -S3150800207001D34B02C01A5241030A8B4201D30B0209 -S31508002080C01A5241CDD2C3098B4201D3CB01C01A23 -S31508002090524183098B4201D38B01C01A524143092D -S315080020A08B4201D34B01C01A524103098B4201D31B -S315080020B00B01C01A5241C3088B4201D3CB00C01A88 -S315080020C0524183088B4201D38B00C01A5241430800 -S315080020D08B4201D34B00C01A5241411A00D2014625 -S315080020E0524110467047FFE701B5002000F006F898 -S315080020F002BDC0460029F7D076E770477047C0464C -S31508002100084B10B50400002B02D0002100E000BFE8 -S31508002110054B1868836A002B00D098472000FFF704 -S3150800212007F9C04600000000A82300080E4B70B54A -S3150800213000251E000D4CE41AA410A54204D0AB00DD -S31508002140F35898470135F8E700F01EF8084B0025C4 -S315080021501E00084CE41AA410A54204D0AB00F3589C -S3150800216098470135F8E770BD2801002028010020AE -S31508002170280100202C01002003008218934202D077 -S3150800218019700133FAE77047F8B5C046F8BC08BCC1 -S315080021909E467047F8B5C046F8BC08BC9E467047D0 -S315080021A06D61696E2E6300000000000000000000EB -S315080021B001020304060708090000000001020304DF -S315080021C08E1500081A1600081A160008AC1400081E -S315080021D01A1600081A160008C814000886140008FB -S315080021E0D8140008E61400081A1600081A1600087B -S315080021F01A1600081A1600081A1600081A160008F1 -S315080022001A1600081A1600081A1600081A160008E0 -S315080022101A1600081A1600081A1600081A160008D0 -S315080022201A1600081A1600081A1600081A160008C0 -S315080022301A1600081A1600081A1600081A160008B0 -S315080022401A1600081A1600081A1600081A160008A0 -S315080022501A1600081A1600081A1600081A16000890 -S315080022601A1600081A160008041500084215000870 -S31508002270EE150008BC1500081A1600081A160008FC -S315080022801A160008CC1500081A1600085C1500086E -S315080022906C150008861500084F70656E424C540090 -S315080022A008000000000000002E2E2F2E2E2F2E2EA6 -S315080022B02F536F757263652F41524D434D305F53EF -S315080022C0544D333246302F756172742E6300000008 -S315080022D0002800080008000005000000003000087B -S315080022E0000800000600000000380008000800008A -S315080022F00700000000400008000800000800000071 -S315080023000048000800080000090000000050000806 -S31508002310000800000A000000005800080008000035 -S315080023200B00000000600008000800000C00000018 -S3150800233000680008000800000D0000000070000892 -S31508002340000800000E0000000078000800080000E1 -S315080023500F00000000800008008000001000000048 -S31508002360000001080080000011000000008001083C -S315080023700080000012000000000002080080000033 -S31508002380130000000080020800800000140000000E -S315080023900000030800800000150000000080030804 -S315080023A00080000016000000C800002000000000A1 -S30D080023B070DDFF7F010000004B -S315080023B800127A0004000000000000000000000077 -S315080023C800000000000000000000000000000000F7 -S315080023D800000000000000000000000000000000E7 -S315080023E800000000000000000000000000000000D7 -S315080023F800000000000000000000000000000000C7 -S3150800240800000000000000000000000000000000B6 -S315080024180000000000000000E9000008C1000008EC +S31508000210FEE7FEE7FEE7FEE730010020880600203D +S315080002200121114B11481A680A431A605A6802409C +S315080002305A601A680E4802401A601A680D48024049 +S315080002401A605A680C4802400F205A60DA6A8243DC +S31508000250DA621A6B094802401A635A6B8A435A6370 +S3150800026000229A607047C046001002400CB8FF088A +S31508000270FFFFF6FEFFFFFBFFFFFFC0FFACFEF0FF30 +S3150800028090220300D205904227D02C4A904218D0DB +S315080002902B4A904239D02B4A904242D02A4A904261 +S315080002A027D02A4A0020934216D18022284BD2030F +S315080002B0996A01300A439A629A6A26490A409A62FA +S315080002C00AE080220120224BD202996A0A439A62E6 +S315080002D09A6A21490A409A62704780221C4B920208 +S315080002E0996A01200A439A629A6A1C490A409A62E4 +S315080002F0F2E78022164B9203996A01200A439A6212 +S315080003009A6A17490A409A62E6E78022104B120356 +S31508000310996A01200A439A629A6A12490A409A62BD +S31508000320DAE780220A4B5203996A01200A439A6245 +S315080003309A6A0D490A409A62CEE7C0460004004808 +S3150800034000080048000C0048001000480014004847 +S3150800035000100240FFFFBFFFFFFFFBFFFFFFFDFF8F +S31508000360FFFFDFFFFFFFF7FFFFFFEFFFF0B5C64612 +S315080003700C6800B54E68002C2ED001230022984642 +S3150800038043469340234023D01D0004685D43A4469A +S315080003906C006419E44367466E4327403E43066093 +S315080003A04E68013E012E07D88668B44667468E68B1 +S315080003B027406E433E438660C668B44667460E6964 +S315080003C03C406E433443C4604E68022E11D00C681C +S315080003D023000132D340D3D1013E012E05D843680C +S315080003E0CA68A343544323434360012004BC904690 +S315080003F0F0BD4C69FF2B0AD86D432E01761B654369 +S31508000400036AB3431D4305624E680C68E0E71B0A9E +S315080004105B435B435C43456A1E01F61AB5432E00EF +S315080004202500354345624E68D1E7C04610B50C4BEA +S31508000430DA680023D20605D502210A4AD3690B4396 +S31508000440D3611023064AD16804220A4205D0012442 +S3150800045004481343C1692143C161014AD36010BDF1 +S315080004600020024068060020064B00201A69120682 +S3150800047006D5054A5A60054A5A6018690006C00F2B +S315080004807047C0460020024023016745AB89EFCD7F +S315080004908021034A002013690B4313617047C04645 +S315080004A000200240F8B5050001F0FCF8134C0700DF +S315080004B0012601E06B1C0FD1E3681E42FAD1202306 +S315080004C0E268134211D10D4BDA68D20612D4DB6802 +S315080004D000205B070ED4F8BD002D04D001F0E2F829 +S315080004E0C01BA842E8D90320F5E7E360034BDA68A6 +S315080004F0D206ECD5FFF79AFF0120ECE70020024070 +S31508000500F0B54E465746DE464546E0B59A4683B0B0 +S315080005102A4B019299461B7E04000E00012B48D0F7 +S3150800052001254B4626481D76FFF7BCFF002836D125 +S31508000530012C40D0023C63425C4104236442AC4334 +S31508000540A0469C46E044002300259B4618E05346F7 +S31508000550D3404A46594601271A4CD16122699BB2B3 +S315080005603A43226116483380FFF79CFF2369BB4351 +S315080005702361002813D10135EBB2023698450ED90E +S3150800058020222B0152429A18E1D520225146D21A2E +S3150800059091400A000199D9400B001343D9E700237B +S315080005A04A46137603B03CBC90469946A246AB46EB +S315080005B0F0BD0220F6E701239846C4E76806002046 +S315080005C050C3000000200240014B18687047C0461F +S315080005D0C0000020F0B54F464646D646C0B5304F57 +S315080005E006003B7E8946012B57D001233B760368DC +S315080005F02C48012B34D0FFF755FF002834D10123AE +S315080006004A465B421360B3687568DB025B199D4214 +S315080006102AD20023244C98460AE080231B019C46D4 +S31508000620726865449446B368DB026344AB421CD9DE +S31508000630022243469246FB6123691A481343236103 +S31508000640656123693E3213432361FFF72BFF524648 +S315080006502369934323610028DFD04B461D6004E0DD +S31508000660FFF720FF002807D0012000233B761CBC9B +S3150800067090469946A246F0BD042540220A4CF861E8 +S31508000680236908482B432361236913432361FFF732 +S3150800069009FF2369AB432361E7E70220E7E7C04682 +S315080006A06806002050C30000002002407047C0467C +S315080006B070B5041E00D17DE02023C35C002B00D159 +S315080006C070E002212268022513688B43136000F04C +S315080006D0E9FF060004E000F0E5FF801B0A2857D86A +S315080006E023685A681542F6D101211A6801250A437A +S315080006F01A6000F0D7FF060004E000F0D3FF801B65 +S315080007000A2845D823685A681542F6D0227E012A57 +S315080007104BD080211A688A431A60627E2368012AB0 +S315080007205ED040211A688A431A60A27E2368012A8D +S3150800073051D020211A688A431A60E27E2368012A6A +S3150800074044D010211A680A431A60227F2368012AB6 +S3150800075037D008211A688A431A60627F2368012AFB +S315080007602AD004211A688A431A60E268A3682168B5 +S315080007701343226900201343626913436268013AEE +S315080007801343CB610023012263622033E25408E05D +S315080007908023626A9B021343636205222023012099 +S315080007A0E25470BDFFF782FF8BE780211A680A437F +S315080007B01A60B2E70120F4E704211A680A431A60AE +S315080007C0D3E708211A680A431A60C6E710211A688F +S315080007D08A431A60B9E720211A680A431A60ACE707 +S315080007E040211A680A431A609FE7C046202330B59D +S315080007F0C35C013B012B06D98023426ADB02134303 +S315080008004362012030BD802401220368A4001859E0 +S315080008108725104318511F204C69AD00204082409F +S31508000820D443585920405851C869002815D1103D5D +S31508000830585920405851C8680504888805434869AE +S315080008404830C000C55088680504088805434869CB +S315080008504830C00018184560C869012815D1832595 +S31508000860AD0058591043585108680504888805434F +S3150800087048694830C000C55088680504888905431A +S3150800088048694830C0001818456081258869AD0058 +S31508000890002820D15859204058510869002814D1F9 +S315080008A08525AD00585904405C51096A012904D1CF +S315080008B08720800019580A431A5080210120890090 +S315080008C05A5882435A5000209CE78524A400185998 +S315080008D010431851E9E7585910435851DDE7C04607 +S315080008E0202270B5835C0400DBB2012B06D080237E +S315080008F0426A1B0313434362012070BD02218154DF +S31508000900016801250A689A430A6000F0CBFE0600D2 +S3150800091004E000F0C7FE801B0A2806D823685B6837 +S315080009202B40F6D163620020E7E78023626A9B02C8 +S3150800093013436362052220230120E254DDE7C04603 +S31508000940F0B52024045D0568013CAD68012C51D83A +S31508000950E0246405254254D0AD01AD0F032D57D0D0 +S315080009600124AC401C608B68002B58D10B685C05D1 +S31508000970CB681C432B00076818331E01F451046822 +S315080009801B01A4460C6963445C600B7D2D01012B99 +S3150800099008D1C2248021036864005B191E594900E6 +S315080009A031431951537911791B020B439179090483 +S315080009B00B43D1790906194303685B198D33FF3355 +S315080009C01960537811781B0219439378D2781B045F +S315080009D00B4312061A43036801215B198933FF3357 +S315080009E01A60C022036852005D19AB5800200B43F9 +S315080009F0AB5005E08023426ADB02134343620120C1 +S31508000A00F0BD8023426A9B03134343620120F7E744 +S31508000A108023426A1B04134343620120F0E74C68B3 +S31508000A20CE68E4003343A4E72023C25C0023013ADE +S31508000A30012A06D80368890698680840431A581E8A +S31508000A40834118007047C046F0B52024045D013C78 +S31508000A50012C00D974E00568002909D1EC68A407BF +S31508000A6009D18023426A9B03134343620120F0BDE8 +S31508000A702C69A407F5D00C001B34260177590425E8 +S31508000A803D40956063D005687559ED085560056861 +S31508000A9024016559AD07ED0FD56005682D196E68F7 +S31508000AA00F253540156105682D196D682D042D0E25 +S31508000AB095610568AC4664446468240C546104680E +S31508000AC00A01A418B934FF3424681C700468A418F1 +S31508000AD0B934FF342468240A5C700468A418B9344D +S31508000AE0FF342468240C9C700468A418B934FF34B5 +S31508000AF02468240EDC700468A418BD34FF34246806 +S31508000B001C710468A418BD34FF342468240A5C7177 +S31508000B100468A418BD34FF342468240C9C71046846 +S31508000B20A4466244BD32FF321268120EDA710268B8 +S31508000B30002911D1D36820310B43D360002096E7F2 +S31508000B408023426ADB021343436201208FE705686C +S31508000B5075596D0D15609AE72021136900200B431E +S31508000B60136184E7014B18607047C046C000002037 +S31508000B7070B5036884B004000D00DB072FD44B68FA +S31508000B80C96802680B4329690B43A9690B432D49B8 +S31508000B900A401343036043682B4A1340AA68134369 +S31508000BA043608368294A13406A6913438360284B64 +S31508000BB0984217D0274B98422FD0274B984230D0CF +S31508000BC0264B984224D0264B984221D0254B984252 +S31508000BD01ED0254B98421BD0244B984218D0002093 +S31508000BE004B070BD002000F04FF90028F7D029683E +S31508000BF00029F4D08023AA694E081B029A4214D011 +S31508000C00801901F057F90004000CE0600120E7E7BD +S31508000C1001A800F01DF90398E7E7102000F034F961 +S31508000C20E3E7122000F030F9DFE74000801901F011 +S31508000C3041F90F4B03400007400F1843E0600120BD +S31508000C40CEE7C046F369FFEFFFCFFFFFFFFCFFFFCC +S31508000C50003801400044004000480040004C004075 +S31508000C60005000400014014000180140001C0140DB +S31508000C70F0FF0000FF22032330B51400C5B22B4055 +S31508000C80DB009C4089010A40E4439A4000280BDBBC +S31508000C900C4B80089C46C023800060449B00C158CA +S31508000CA00C402243C25030BD0F2307492B408C46C7 +S31508000CB0083B9B089B006344D9690C402243DA61D0 +S31508000CC0F1E7C04600E100E000ED00E00A4A431EF5 +S31508000CD0012093420ED8C021084A09485360036A86 +S31508000CE009061B021B0A0B430362002300209360BC +S31508000CF0073313607047C046FFFFFF0010E000E0AF +S31508000D0000ED00E00121002210B5064B49421961A9 +S31508000D101A61D960DA6099629A6200F049FA00208D +S31508000D2010BDC0460010024010B50400FFF74CFC89 +S31508000D30FA21890001F0BEF8FFF7C8FF012000225A +S31508000D4021004042FFF796FF002010BD102110B584 +S31508000D50054A002013680B431360FFF7E5FF00F010 +S31508000D60B7F9002010BDC0460020024070B5012426 +S31508000D70F8268025154B16491A6822431A601A6800 +S31508000D80B2432A431A60134A5A60134A1A601A6809 +S31508000D900A401A6000225A605A63586B0F49084085 +S31508000DA058630420596BB14329435963596BA143CE +S31508000DB05963596B81435963FF21DA621A6398684C +S31508000DC009040143996001209A6070BD0010024031 +S31508000DD0FFFFFBFF0CF8FFF0FFFFF6FEFFFFFEFF2D +S31508000DE00C2070B5144B5A681040082809D00C38E6 +S31508000DF043425841114B40421840114B9C466044AF +S31508000E0070BDC0225868520210400E4A0F249446FC +S31508000E106044421E90410C4A404210400B4AD96A2F +S31508000E2094462140604401315D6801F043F8AD0CF9 +S31508000E302C4002346043E3E700100240005A620285 +S31508000E4000127A000080FEFF00A69DFD006CDC0201 +S31508000E5010B50400FFF7C4FF084A20605368084924 +S31508000E601B061B0FCB5CD84060605368054A5B05C0 +S31508000E705B0FD35CD840A06010BDC046001002408E +S31508000E80682000087820000810B5002818D12F4CD3 +S31508000E900330236B184002284AD003283CD0012887 +S31508000EA021D0FFF79DFF626829491206120F8A5C56 +S31508000EB06368D0405B05274A5B0FD35CD84010BDFA +S31508000EC0102813D1C022214C9202236B1A4080238A +S31508000ED05B051343204A934230D0204A93421BD0E5 +S31508000EE01F4A9342DDD1FFF77BFFE8E712282AD194 +S31508000EF0C022164C1203236B1A4090235B0513433A +S31508000F00184A93421AD0184A934205D0174A934270 +S31508000F10C7D1FFF765FFD2E702202368184043428E +S31508000F205841134B40421840124B9C466044C6E752 +S31508000F30236A1840431E9841C003C0E7206A800709 +S31508000F40C00FC003BBE70020B9E7C0460010024047 +S31508000F50682000087820000800000210000003102E +S31508000F60000001100000081200000C120000041214 +S31508000F7000EE85FF00127A00FEE7C046014B188096 +S31508000F807047C0464C01002010B500F07DFB0E4CA2 +S31508000F90236898420FD30D4B1A78002A0CD00022EA +S31508000FA01A7090232032DB059A6200F06DFB084B1D +S31508000FB01B881B18236010BD01321A7090231F323C +S31508000FC0DB059A61F1E7C046500100204E0100207A +S31508000FD04C01002090232022DB059A627047C04608 +S31508000FE010B5044B00201B699B0402D5FFF7F2FFDE +S31508000FF0012010BD0008004810B56420FFF7BEFFA9 +S3150800100010BDC04610B5FFF7BFFF10BD10B5FFF7FE +S315080010109DFE012228490B68934313430B600B6816 +S315080010201A4243D08022254BD20219680A431A6015 +S315080010308022196852020A431A60802292021968AD +S315080010401142FCD05A681E491140A42292030A4351 +S315080010500F215A60DA6A8A430E390A43DA62802215 +S31508001060196852040A431A608022144B92041968BC +S315080010701142FCD0F0215A688A435A605A681149CD +S315080010800A4003215A605A688A4301390A435A605A +S315080010900C220A494B681340082BFBD10A48FFF774 +S315080010A061FD00F0C9F800F0D5F8FCE76A210748A9 +S315080010B000F0B6F8B6E7C04600200240001002402D +S315080010C0FF7FC2FFFFF8FFFF006CDC0280200008EC +S315080010D0F0B50125334B8DB09A6980242A439A616D +S315080010E09A69E4022A400592059A80225969920271 +S315080010F01143596159699026114004910499586918 +S315080011002027204358615969F60521408024039118 +S3150800111003995869240320435861596930002140CE +S3150800112002910299D96900241143D961D9690A4003 +S3150800113080210192019ADA6989040A43DA61DB6936 +S3150800114006970B40009306A9009B079508940994F7 +S315080011500A94FFF70BF98023B7629B0106A9124888 +S31508001160069307940A94FFF701F90C231E3F06A974 +S31508001170300006930797089409940A940B95FFF78D +S31508001180F5F8C0239B000693032306A9089307488E +S315080011900133079709940A940B93FFF7E7F80DB004 +S315080011A0F0BDC04600100240000800480004004890 +S315080011B010B59024FFF7DAFD2023E405A362114851 +S315080011C0FFF75EF81048FFF75BF82000FFF758F8BE +S315080011D00E4B0F49DA690F480A40DA61D9690E4A97 +S315080011E00140D96159691140596159690B4A114041 +S315080011F0596101215A6902405A619A698A439A617A +S3150800120010BDC0460008004800040048001002400F +S31508001210FFFFFFFDFFFFFDFFFFFFF7FFFFFFFBFFE0 +S3150800122010B500F005F8FCE710B5FFF7E5FE10BDB0 +S3150800123010B5FFF7E7FE10BD10B500F0C7FDFFF7C4 +S31508001240F3FF00F0FBF900F015FE00F03DF800F0A2 +S315080012502BF810BD10B5FFF7EBFF00F007FA00F00A +S3150800126043F800F001F810BD10B500F099F8012810 +S3150800127003D00A4C2378012B00D010BD00F004FAE5 +S31508001280074B084A1B6812689B18F533FF339842C8 +S31508001290F3D30023237000F09DFDEEE758010020EC +S315080012A0540100205C0100200122054B10B51A707C +S315080012B000F0EAF9034B1860FFF7D6FF10BDC046E9 +S315080012C0580100205C01002010B500F071F800F00C +S315080012D095FA0123034C237000F00AFA00232370C1 +S315080012E010BDC046C400002010B582B06B46134C32 +S315080012F0D91D200000F028FB012808D06B462000E5 +S31508001300D91D00F02FFA01280FD002B010BD0C4BE2 +S3150800131018706B462000D97900F066F86B462000F5 +S31508001320D91D00F01FFA0128EFD10022044B200036 +S315080013301A706B46D97900F057F8E6E76001002085 +S31508001340C40000207047C04670B50A4C06002378D2 +S315080013500D00012B09D0002B02D000F03DF870BD1E +S31508001360E9B2300000F0DEF9F7E7C9B200F0C2FAD8 +S315080013702378F0E7C4000020054B40201B78013B8A +S31508001380DBB2022B02D8034A5B00985A7047C04664 +S31508001390C40000208820000810B5FFF7EDFF10BD37 +S315080013A010B500F011F8431E9841C0B210BDC046F2 +S315080013B000224321034B5A5401319A645A521A8027 +S315080013C09A707047A0010020024B1878431E984176 +S315080013D0C0B27047A001002043230021014AD1541E +S315080013E07047C046A0010020F8B503780500904C68 +S315080013F0FF2B0BD02278012A28D13733DBB2352BC5 +S3150800140000D900E18B4A9B00D3589F460122E3701E +S31508001410EF3B2280A380FFF7AFFFA071FFF7BCFF69 +S31508001420E071FFF7B9FF012544230822000A20725C +S315080014306572A572E25200F01DFD4323E35C012BA1 +S3150800144014D04423E15E002900DDEEE0F8BD00F08B +S3150800145025FD0028F1D1FE230222E370CD3B23713E +S315080014601333E2524323E35C012B0ED1FE230222FF +S315080014700221E370EE3B23713433E2524323012207 +S31508001480E01CE254FFF760FFE0E74423E15AF5E782 +S3150800149000F0A0FCFF230122E370BB3BE252E1E728 +S315080014A0FFF76AFF6B780138984200DCB3E0FF2348 +S315080014B00122E370BB3BE25269780029C7D0AA1C17 +S315080014C0A06C00F0DBFC0028C5D0A26C6B789446B3 +S315080014D06344A364B1E74168A06C00F0D3FC00281C +S315080014E0D8D1B8E70025FF23A580E370FFF744FFAE +S315080014F000230722E3714423A0712581E252B1E754 +S31508001500FF23E3704768A66C002F00D18BE0002507 +S31508001510F71933780136ED18EDB2FFF789FEB742B1 +S31508001520F7D101230022A3800023E571227262729B +S315080015302D0EA37108324433A572E25292E7FFF7E3 +S315080015401BFF6B78834266D26968201DA1646A789E +S3150800155000F080FCFF23A26CE370944644226B786B +S315080015606344A3646B780133A3527BE7FFF704FF58 +S315080015706A7890424FD9201DA16CE9E7FE23E370F3 +S315080015800023022223714433E2526BE7FF23E37000 +S315080015900023627823716271E38023720622442352 +S315080015A0E2525FE70023238074E7A66CFFF7E4FEA8 +S315080015B06A1C411E300000F061FC002800D14AE791 +S315080015C0FF23E370FFF7D8FEA36C01229C46442351 +S315080015D001386044A064E25244E7FF23E37043689D +S315080015E00122A3644423E2523CE7134B0822A36476 +S315080015F0FF23E370E023DB04636000232381A372E7 +S315080016004423E2522EE7FE230222E370DE3B2371D7 +S315080016102433E25226E7FE230222E370DC3B2371E1 +S315080016202233E2521EE700257BE789B226E7C04649 +S31508001630A001002090200008682100080022054B20 +S3150800164005491A60596005219A601960034B1A60AA +S315080016507047C04610E000E07FBB0000EC010020A8 +S315080016600022014B1A60704710E000E0044B1B682B +S31508001670DB0303D5034A1368013313607047C0467A +S3150800168010E000E0EC010020044B1A68044B1868CF +S31508001690D20301D5013018607047C04610E000E05B +S315080016A0EC010020044B1A68044B1868D20301D5D4 +S315080016B0013018607047C04610E000E0EC010020D9 +S315080016C07047C04670B5094C80B22085FFF7DCFF2D +S315080016D00A300500802605E0FFF7AAFDFFF7D4FFCC +S315080016E0A84202D8E3691E42F6D070BD0044004005 +S315080016F0E12310B51B0288B001930C220023084C85 +S3150800170001A9200002930393049305920693079375 +S31508001710FFF72EFA012223681343236008B010BD91 +S315080017200044004070B506000C008DB240290FD861 +S315080017300800FFF7C7FF002D09D00024FFF778FD42 +S31508001740305D0134FFF7BEFFA3B29D42F6D870BDE7 +S3150800175081210348FFF764FD2000FFF7B3FFECE79C +S3150800176070210008F8B5204D0E002C78002C16D1F3 +S315080017701E4BDA69920602D400242000F8BD9B8C21 +S315080017801B4ADBB21370013B3F2BF5D8FFF77CFFF2 +S31508001790184B1860184B1C7001232B70EDE720249A +S315080017A0124AD3691C4015D0134C11492378978CDB +S315080017B0CA18577001330A78DBB223709A42DBD114 +S315080017C092B2013100F046FB00232B7023780124E6 +S315080017D03370D2E7FFF758FF064B1B68643398420D +S315080017E0CAD92C70C8E7C046310200200044004020 +S315080017F0F00100203402002032020020F0B5D6465F +S315080018004F464646C0B58CB002A8FFF721FBFA2121 +S31508001810049B89001800019300F04CFB00232C4F11 +S3150800182098462C4BBC1C8246243702250526994629 +S3150800183002E0267865780234721901325101891A54 +S31508001840890089188900504600F0BAFB002905D19D +S3150800185083B29846013B9BB24B4534D9A742E8D19F +S315080018601D48AF21FFF7DCFC40461C4D1C4E1D4CA5 +S315080018701D4B0027236080235B04A3616060A78358 +S315080018802000A760E76026616561FEF711FF174A29 +S3150800189001230292164A0993049204220A9302A982 +S315080018A00D33200005920B93079708970397069721 +S315080018B0FEF79CFF2000FFF713F80CB01CBC9046FF +S315080018C09946A246F0BD013E013D36042D05CEE7F8 +S315080018D0C0210008FF030000982100080000F0FF5F +S315080018E00000FFFF3802002000640040E0CC000042 +S315080018F0E0FF000030B5124B89B002930023114C6B +S31508001900020004930593069101AB02A92000FFF794 +S3150800191017F8002801D009B030BDFFF7B5FE323000 +S31508001920050005E0FFF784FCFFF7AEFEA842F2D8F3 +S3150800193001992000FFF778F80028F3D1EBE7C046B5 +S31508001940E10700003802002010B58AB003000C0039 +S3150800195003AA00210A48FFF777F80023002803D1D5 +S31508001960084A0399914202D018000AB010BD059A98 +S315080019700192002AF8D1079B23700123F4E7C04699 +S315080019803802002067060000F8B507000D4D00264E +S315080019900D4C01E0AC680C35FFF74AFCBC4204D894 +S315080019A02B689C466444BC4204D80136122EF1D1F9 +S315080019B0FF20F8BD73009E19044BB6009E19307AB5 +S315080019C0F7E7C046E821000800280008E4210008D7 +S315080019D0F8B54746CE4680B507000068FFF7D4FF3E +S315080019E0FF2825D0FEF740FD3B1D984680239B0027 +S315080019F00025994605E023689E4211D104354D45D8 +S31508001A0018D03B68EC1843465B191E68FFF710FCB4 +S31508001A103200002321000220FEF772FD0028EAD0DA +S31508001A200024FEF735FD20000CBC90469946F8BD0B +S31508001A300024F8E70124F4E770B50F4C06000D0002 +S31508001A40A04214D00D4B99420BD123689D4206D073 +S31508001A502000802220C09200290000F0FBF9200017 +S31508001A6070BDFFF7B5FF002803D03400EDE7044C3E +S31508001A70EBE70024F3E7C0466404002000280008CA +S31508001A8060020020F0B54646D6464F46C0B5984691 +S31508001A904B0A5B029A46036806000C0015005A1C9E +S31508001AA035D09A4529D10434E41A1E4B341999467F +S31508001AB001339C46371DE244A84405E02B780135DE +S31508001AC023700134454512D0FFF7B2FBE21B4A45A5 +S31508001AD0F4D930005146FFF7AFFF061E15D0071D93 +S31508001AE03C002B780135237001344545ECD10120A3 +S31508001AF01CBC90469946A246F0BD30005146FFF7F9 +S31508001B009BFF061E01D00368CDE70020F0E7534689 +S31508001B100700802208C792005146380000F09AF95B +S31508001B203368BEE7FF0100000123034A5B421360E6 +S31508001B30024A13607047C046600200206404002011 +S31508001B40134B70B516004A1E04000D001B1A9A4264 +S31508001B5001D9002070BDFFF717FFFF28F9D0601ED6 +S31508001B604019FFF711FFFF28F3D00A4A630A5B0200 +S31508001B70934206D02B00320021000748FFF782FF68 +S31508001B80E8E72B00320021000448FFF77BFFE1E776 +S31508001B90FFFF0308002800086002002064040020F4 +S31508001BA0F0B5CE46474680B54C4B4A1E87B0040072 +S31508001BB00D001B1A9A4206D90024200007B00CBC57 +S31508001BC090469946F0BDFFF7DFFE0600601E4019F5 +S31508001BD0FFF7DAFE0500FF2EEED0FF28ECD0002333 +S31508001BE0002402938642E8D8042EE6D91628E4D8BB +S31508001BF03B4F0533B846994605E043461B78994658 +S31508001C000C239C46E044FFF713FB4E455FD0013496 +S31508001C10E4B2122CF1D101235B42984605233E001B +S31508001C209946002402E033780C369946FFF700FB04 +S31508001C304D4545D00134E4B2122CF4D101235B4260 +S31508001C4099460526002401E03E780C37FFF7F0FA9E +S31508001C50B5422ED00134E4B2122CF5D10023414608 +S31508001C604A46551AED18002303930123ED0AADB22F +S31508001C70049105930024FEF7F7FB002D0BD116E01F +S31508001C80802212019446049B01340193A4B2634452 +S31508001C900493A5420BD0FFF7CBFA02A903A8FEF7D7 +S31508001CA099FC0028ECD00024FEF7F2FB85E7012416 +S31508001CB0FAE763001C190B4BA4001C196368CEE7EE +S31508001CC063001C19074BA400E3589946B9E763005B +S31508001CD01C19044BA400E35898469FE7FFFF030826 +S31508001CE0F8210008E421000800B5114A83B01368FA +S31508001CF001331AD0916853688C46D16863448C4680 +S31508001D00116963448C46516963448C4691696344FE +S31508001D108C46D26963449B185B4201AA0421054894 +S31508001D200193FFF70DFF03B000BD0120FBE7C04696 +S31508001D3064040020C02800080D4B18680D4B1B686A +S31508001D40C0180D4B1B68C0180C4B1B68C0180C4BF1 +S31508001D501B68C0180B4B1B68C0180B4B1B68C018B8 +S31508001D600A4B1B68C01843425841C0B27047C04668 +S31508001D700028000804280008082800080C2800087D +S31508001D80102800081428000818280008C028000889 +S31508001D9010B50A48036801330BD1094803680133B3 +S31508001DA001D1012010BDFFF713FE431E9841C0B2B2 +S31508001DB0F8E7FFF70DFE0028EFD1F3E764040020EB +S31508001DC060020020004870470028000810B500F09F +S31508001DD06DF810BD70B582B000F058F8002801D132 +S31508001DE002B070BDFFF7FCF80028F9D0FFF7AAFA91 +S31508001DF0FFF736FCFEF786FF0123134A134D916958 +S31508001E0019439161926913400193019B00F042F8CE +S31508001E10802306009B05E02109068C469A19624430 +S31508001E2012785C1C1A70FFF703FA2300AC42F2D151 +S31508001E300321074A13680B43136000F02BF8446824 +S31508001E4000F036F8A047CBE700100240C00000209B +S31508001E500000014070B5002A0BD05218461A95B2F8 +S31508001E600B784C1C8B55FFF7E3F9A3B22100AB4264 +S31508001E70F6D170BD10B5FFF757FE10BD10B5FFF7C8 +S31508001E805FFE10BD10B5FFF78BFE10BD10B5FFF74E +S31508001E9053FF10BD10B5FFF795FF10BD10B5FFF73E +S31508001EA023FF002801D0FFF773FF10BD72B67047F5 +S31508001EB062B67047002243088B4274D303098B42EB +S31508001EC05FD3030A8B4244D3030B8B4228D3030CFC +S31508001ED08B420DD3FF22090212BA030C8B4202D39E +S31508001EE01212090265D0030B8B4219D300E0090AC6 +S31508001EF0C30B8B4201D3CB03C01A5241830B8B42CF +S31508001F0001D38B03C01A5241430B8B4201D34B03B7 +S31508001F10C01A5241030B8B4201D30B03C01A52411C +S31508001F20C30A8B4201D3CB02C01A5241830A8B42A1 +S31508001F3001D38B02C01A5241430A8B4201D34B028A +S31508001F40C01A5241030A8B4201D30B02C01A5241EE +S31508001F50CDD2C3098B4201D3CB01C01A52418309A2 +S31508001F608B4201D38B01C01A524143098B4201D3DC +S31508001F704B01C01A524103098B4201D30B01C01A07 +S31508001F805241C3088B4201D3CB00C01A5241830881 +S31508001F908B4201D38B00C01A524143088B4201D3AE +S31508001FA04B00C01A5241411A00D20146524110460E +S31508001FB07047FFE701B5002000F006F802BDC046ED +S31508001FC00029F7D076E770477047C046084B10B52A +S31508001FD00400002B02D0002100E000BF054B186862 +S31508001FE0836A002B00D098472000FEF7C5FFC0463D +S31508001FF000000000BC22000870B500260C4D0D4CF0 +S31508002000641BA410A64209D1002600F021F80A4D47 +S315080020100A4C641BA410A64205D170BDB300EB5848 +S3150800202098470136EEE7B300EB5898470136F2E7D2 +S315080020302801002028010020280100202C0100206A +S3150800204003001218934200D1704719700133F9E75B +S31508002050F8B5C046F8BC08BC9E467047F8B5C046F9 +S31508002060F8BC08BC9E46704700000000000000004F +S315080020700102030406070809000000000102030420 +S315080020806D61696E2E630000080000000000000004 +S31508002090AA150008061600080616000856140008B1 +S315080020A0061600080616000890140008A014000872 +S315080020B0D6140008E41400080616000806160008D8 +S315080020C00616000806160008061600080616000872 +S315080020D00616000806160008061600080616000862 +S315080020E00616000806160008061600080616000852 +S315080020F00616000806160008061600080616000842 +S315080021000616000806160008061600080616000831 +S315080021100616000806160008061600080616000821 +S315080021200616000806160008061600080616000811 +S315080021300616000806160008001500083E150008D1 +S315080021406C150008DA1500080616000806160008B9 +S3150800215006160008EA150008061600087C15000889 +S315080021608C150008A41500084F70656E424C540083 +S315080021702E2E2F2E2E2F2E2E2F536F757263652F10 +S3150800218041524D434D305F53544D333246302F72D2 +S31508002190733233322E6300002E2E2F2E2E2F2E2E24 +S315080021A02F536F757263652F41524D434D305F5300 +S315080021B0544D333246302F63616E2E6300000000A3 +S315080021C005020602060307030803090309040A04AD +S315080021D00B040C040C050D050E050F050F0610065D +S315080021E01007100800280008000800000500000075 +S315080021F0003000080008000006000000003800084B +S315080022000008000007000000004000080008000061 +S315080022100800000000480008000800000900000047 +S3150800222000500008000800000A00000000580008D6 +S31508002230000800000B00000000600008000800000D +S315080022400C00000000680008000800000D000000EF +S3150800225000700008000800000E0000000078000862 +S31508002260000800000F000000008000080080000041 +S3150800227010000000000001080080000011000000A6 +S31508002280008001080080000012000000000002081B +S315080022900080000013000000008002080080000093 +S315080022A0140000000000030800800000150000006C +S315080022B0008003080080000016000000C800002007 +S309080022C0000000000C +S30D080022C444DEFF7F0100000063 +S315080022CC00127A0004000000000000000000000064 +S315080022DC00000000000000000000000000000000E4 +S315080022EC00000000000000000000000000000000D4 +S315080022FC00000000000000000000000000000000C4 +S3150800230C00000000000000000000000000000000B3 +S3150800231C00000000000000000000000000000000A3 +S3150800232C0000000000000000E9000008C1000008D9 S70508000000F2 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/stm32f0xx_hal_conf.h index 5fdd5e99..41f530fd 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.elf b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.elf index dc66fea4ca5576b8f63cc473e41c49332706e231..cc38d94868060006e5f27a824b74d7b30b24d815 100644 GIT binary patch delta 246917 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 z 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%0Af*aG3o!^@fhH4{d}e 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 SFW1v@zgd{6-X2sXlKBs?y delta 190204 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

    p`vxD`;N5CVZ7j;uPV*Hvqpb-1RNJf2qQq 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 Yl9iY#e0^eC4Tdw*OVy3edKk3fKNTPqn*aa+ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.map b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.map index 7ac9d52d..b326f984 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.map +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.map @@ -1,256 +1,238 @@ - -bin/demoprog_stm32f091.elf: file format elf32-littlearm -bin/demoprog_stm32f091.elf -architecture: arm, flags 0x00000112: -EXEC_P, HAS_SYMS, D_PAGED -start address 0x08002800 - -Program Header: -0x70000001 off 0x000049dc vaddr 0x080049dc paddr 0x080049dc align 2**2 - filesz 0x00000008 memsz 0x00000008 flags r-- - LOAD off 0x00000000 vaddr 0x08000000 paddr 0x08000000 align 2**16 - filesz 0x000049e4 memsz 0x000049e4 flags r-x - LOAD off 0x000100c0 vaddr 0x200000c0 paddr 0x080049e4 align 2**16 - filesz 0x0000006c memsz 0x000001b8 flags rw- -private flags = 5000200: [Version5 EABI] [soft-float ABI] - -Sections: -Idx Name Size VMA LMA File off Algn - 0 .text 000021dc 08002800 08002800 00002800 2**2 - CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .ARM.exidx 00000008 080049dc 080049dc 000049dc 2**2 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 2 .data 0000006c 200000c0 080049e4 000100c0 2**2 - CONTENTS, ALLOC, LOAD, DATA - 3 .bss 0000014c 2000012c 08004a50 0001012c 2**2 - ALLOC - 4 .stack_dummy 00000100 20000278 20000278 00010130 2**3 - CONTENTS, READONLY - 5 .ARM.attributes 00000028 00000000 00000000 00010230 2**0 - CONTENTS, READONLY - 6 .comment 0000006e 00000000 00000000 00010258 2**0 - CONTENTS, READONLY - 7 .debug_line 00005d38 00000000 00000000 000102c6 2**0 - CONTENTS, READONLY, DEBUGGING - 8 .debug_info 00006a41 00000000 00000000 00015ffe 2**0 - CONTENTS, READONLY, DEBUGGING - 9 .debug_abbrev 000016bd 00000000 00000000 0001ca3f 2**0 - CONTENTS, READONLY, DEBUGGING - 10 .debug_aranges 00000620 00000000 00000000 0001e100 2**3 - CONTENTS, READONLY, DEBUGGING - 11 .debug_ranges 00000560 00000000 00000000 0001e720 2**0 - CONTENTS, READONLY, DEBUGGING - 12 .debug_macro 00018365 00000000 00000000 0001ec80 2**0 - CONTENTS, READONLY, DEBUGGING - 13 .debug_str 00087109 00000000 00000000 00036fe5 2**0 - CONTENTS, READONLY, DEBUGGING - 14 .debug_frame 00000ef0 00000000 00000000 000be0f0 2**2 - CONTENTS, READONLY, DEBUGGING - 15 .debug_loc 00002deb 00000000 00000000 000befe0 2**0 - CONTENTS, READONLY, DEBUGGING -SYMBOL TABLE: -08002800 l d .text 00000000 .text -080049dc l d .ARM.exidx 00000000 .ARM.exidx -200000c0 l d .data 00000000 .data -2000012c l d .bss 00000000 .bss -20000278 l d .stack_dummy 00000000 .stack_dummy -00000000 l d .ARM.attributes 00000000 .ARM.attributes -00000000 l d .comment 00000000 .comment -00000000 l d .debug_line 00000000 .debug_line -00000000 l d .debug_info 00000000 .debug_info -00000000 l d .debug_abbrev 00000000 .debug_abbrev -00000000 l d .debug_aranges 00000000 .debug_aranges -00000000 l d .debug_ranges 00000000 .debug_ranges -00000000 l d .debug_macro 00000000 .debug_macro -00000000 l d .debug_str 00000000 .debug_str -00000000 l d .debug_frame 00000000 .debug_frame -00000000 l d .debug_loc 00000000 .debug_loc -00000000 l df *ABS* 00000000 obj/startup_stm32f0xx.o -00000100 l *ABS* 00000000 Stack_Size -00000000 l *ABS* 00000000 Heap_Size -080029b6 l .text 00000000 .flash_to_ram_loop_end -080029ac l .text 00000000 .flash_to_ram_loop -080029e4 l .text 00000000 .fill_zero_bss -080029e0 l .text 00000000 .loop_zero_bss -00000000 l df *ABS* 00000000 crtstuff.c -080049d8 l O .text 00000000 __EH_FRAME_BEGIN__ -080028c4 l F .text 00000000 __do_global_dtors_aux -2000012c l .bss 00000000 completed.8603 -20000128 l O .data 00000000 __do_global_dtors_aux_fini_array_entry -080028ec l F .text 00000000 frame_dummy -20000130 l .bss 00000000 object.8608 -20000124 l O .data 00000000 __frame_dummy_init_array_entry -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv6-m/crt0.o -00000000 l df *ABS* 00000000 timer.c -00000000 l df *ABS* 00000000 main.c -00000000 l df *ABS* 00000000 system_stm32f0xx.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_uart.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc_ex.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_gpio.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_cortex.c -00000000 l df *ABS* 00000000 stm32f0xx_hal_can.c -00000000 l df *ABS* 00000000 stm32f0xx_hal.c -00000000 l df *ABS* 00000000 _exit.c -00000000 l df *ABS* 00000000 led.c -20000148 l O .bss 00000004 timer_counter_last.6700 -2000014c l O .bss 00000001 led_toggle_state.6699 -00000000 l df *ABS* 00000000 boot.c -20000150 l O .bss 00000070 uartHandle -200001c0 l O .bss 00000001 xcpCtoRxLength.6720 -200001c4 l O .bss 00000024 canRxMessage -200001e8 l O .bss 00000041 xcpCtoReqPacket.6719 -20000229 l O .bss 00000001 xcpCtoRxInProgress.6721 -2000022c l O .bss 00000044 canHandle -080049b0 l O .text 00000024 canTiming -20000270 l O .bss 00000004 xcpCtoRxStartTime.6722 -00000000 l df *ABS* 00000000 _udivsi3.o -080045d8 l .text 00000000 .udivsi3_skip_div0_test -00000000 l df *ABS* 00000000 _divsi3.o -080046ec l .text 00000000 .divsi3_skip_div0_test -00000000 l df *ABS* 00000000 _dvmd_tls.o -00000000 l df *ABS* 00000000 exit.c -00000000 l df *ABS* 00000000 init.c -00000000 l df *ABS* 00000000 memcpy-stub.c -00000000 l df *ABS* 00000000 memset.c -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv6-m/crti.o -00000000 l df *ABS* 00000000 /opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv6-m/crtn.o -00000000 l df *ABS* 00000000 impure.c -200000c4 l O .data 00000060 impure_data -00000000 l df *ABS* 00000000 crtstuff.c -080049d8 l O .text 00000000 __FRAME_END__ -00000000 l df *ABS* 00000000 -20000128 l .data 00000000 __init_array_end -20000124 l .data 00000000 __preinit_array_end -20000124 l .data 00000000 __init_array_start -20000124 l .data 00000000 __preinit_array_start -08004988 g O .text 00000008 APBPrescTable -20000278 g .stack_dummy 00000000 __HeapBase -00000000 g *ABS* 00000000 __HEAP_SIZE -200000c0 g .data 00000000 __data_start__ -08003b28 g F .text 00000020 HAL_RCC_GetPCLK1Freq -08003d24 g F .text 00000068 HAL_NVIC_SetPriority -08002a16 w F .text 00000002 TIM1_CC_IRQHandler -080029f0 w F .text 00000002 HardFault_Handler -08002a12 w F .text 00000002 ADC1_COMP_IRQHandler -08002a74 g F .text 0000000c SysTick_Handler -08003d18 g F .text 0000000c HAL_GPIO_WritePin -080029fc w F .text 00000002 PVD_IRQHandler -08003b1c g F .text 0000000c HAL_RCC_GetHCLKFreq -080029f4 w F .text 00000002 PendSV_Handler -080029ee w F .text 00000002 NMI_Handler -080049e4 g .ARM.exidx 00000000 __exidx_end -08002a3a w F .text 00000002 BootRAM -080038d8 g F .text 00000090 HAL_RCC_GetSysClockFreq -08002a28 w F .text 00000002 I2C1_IRQHandler -080049e4 g .ARM.exidx 00000000 __etext -08002af4 g F .text 000000d4 HAL_MspInit -08003de4 w F .text 00000002 HAL_SYSTICK_Callback -08003b48 g F .text 000001d0 HAL_GPIO_Init -0800493c g F .text 00000012 memcpy -200000c0 g O .data 00000004 SystemCoreClock -080045d8 g F .text 0000010a .hidden __udivsi3 -20000278 g .stack_dummy 00000000 __HeapLimit -2000012c g .bss 00000000 __bss_start__ -08002a2c w F .text 00000002 SPI1_IRQHandler -08003df0 g F .text 0000010c HAL_CAN_ConfigFilter -08002a1c w F .text 00000002 TIM6_DAC_IRQHandler -08002c2c g F .text 00000244 UART_SetConfig -20000274 g O .bss 00000004 uwTick -08003d8c g F .text 00000038 HAL_SYSTICK_Config -080049dc g .text 00000000 __exidx_start -080049d4 g O .text 00000004 _global_impure_ptr -080048f0 g F .text 0000004c __libc_init_array -08002a34 w F .text 00000002 USART3_4_IRQHandler -08002924 g F .text 00000000 _mainCRTStartup -08002a06 w F .text 00000002 EXTI2_3_IRQHandler -08003efc w F .text 00000002 HAL_CAN_MspInit -08004960 g F .text 00000000 _init -08002a2a w F .text 00000002 I2C2_IRQHandler -080044e4 g F .text 0000001c BootActivate -08002a26 w F .text 00000002 TIM17_IRQHandler -00000000 w *UND* 00000000 __libc_fini_array -080029fe w F .text 00000002 RTC_IRQHandler -08002fbc g F .text 0000013c HAL_UART_Receive -0800299c g F .text 0000003c Reset_Handler -0800433c g F .text 00000020 HAL_Init -08002f50 g F .text 0000006c UART_WaitOnFlagUntilTimeout -0800437c g F .text 00000010 LedInit -08002e70 g F .text 000000e0 UART_AdvFeatureConfig -00000000 w *UND* 00000000 __sf_fake_stderr -00000000 w *UND* 00000000 __deregister_frame_info -20000278 g .stack_dummy 00000000 end -080046ec g F .text 00000000 .hidden __aeabi_idiv -2000012c g .data 00000000 __data_end__ -08002a24 w F .text 00000002 TIM16_IRQHandler -20000278 g .bss 00000000 __bss_end__ -00000100 g *ABS* 00000000 __STACK_SIZE -08002a1a w F .text 00000002 TIM3_IRQHandler -08002a08 w F .text 00000002 EXTI4_15_IRQHandler -08002a02 w F .text 00000002 RCC_IRQHandler -00000000 w *UND* 00000000 __call_exitprocs -08002a0c w F .text 00000002 DMA1_Channel1_IRQHandler -080029f8 w F .text 00000002 Default_Handler -08002924 g F .text 00000000 _start -08004978 g O .text 00000010 AHBPrescTable -080030f8 g F .text 0000008c UART_CheckIdleState -08002a36 w F .text 00000002 CEC_IRQHandler -08002a20 w F .text 00000002 TIM14_IRQHandler -08002a10 w F .text 00000002 DMA1_Channel4_5_IRQHandler -08003968 g F .text 000001b4 HAL_RCC_ClockConfig -00000000 w *UND* 00000000 software_init_hook -08002a1e w F .text 00000002 TIM7_IRQHandler -08002a22 w F .text 00000002 TIM15_IRQHandler -08002a04 w F .text 00000002 EXTI0_1_IRQHandler -08002a38 w F .text 00000002 USB_IRQHandler -080048c0 w F .text 00000002 .hidden __aeabi_ldiv0 -0800436c w F .text 0000000c HAL_GetTick -08002a2e w F .text 00000002 SPI2_IRQHandler -00000000 w *UND* 00000000 __sf_fake_stdin -0800494e g F .text 00000010 memset -08002800 g .text 000000c4 __isr_vector -08002a80 g F .text 00000074 main -080045d8 g F .text 00000000 .hidden __aeabi_uidiv -080029f2 w F .text 00000002 SVC_Handler -00000000 w *UND* 00000000 hardware_init_hook -20000278 g .stack_dummy 00000000 __end__ -080046ec g F .text 000001cc .hidden __divsi3 -080043dc g F .text 00000108 BootComInit -08002bc8 g F .text 00000060 SystemInit -0800496c g F .text 00000000 _fini -08002c28 w F .text 00000002 HAL_UART_MspInit -00000000 w *UND* 00000000 atexit -08004318 w F .text 00000024 HAL_InitTick -20008000 g .bss 00000000 __StackTop -0800435c w F .text 00000010 HAL_IncTick -08002a0a w F .text 00000002 TS_IRQHandler -080029fa w F .text 00000002 WWDG_IRQHandler -0800438c g F .text 00000050 LedToggle -08002a18 w F .text 00000002 TIM2_IRQHandler -08002a0e w F .text 00000002 DMA1_Channel2_3_IRQHandler -08003dc4 g F .text 00000020 HAL_SYSTICK_CLKSourceConfig -08003f00 g F .text 0000017a HAL_CAN_Init -20008000 g *ABS* 00000000 __stack -080046e4 g F .text 00000008 .hidden __aeabi_uidivmod -20007f00 g *ABS* 00000100 __StackLimit -08002a32 w F .text 00000002 USART2_IRQHandler -08003364 g F .text 00000574 HAL_RCC_OscConfig -080048c4 g F .text 0000002c exit -080031f0 g F .text 00000174 HAL_RCCEx_PeriphCLKConfig -00000000 w *UND* 00000000 __sf_fake_stdout -08004500 g F .text 000000d8 BootComCheckActivationRequest -080048c0 w F .text 00000002 .hidden __aeabi_idiv0 -08002a00 w F .text 00000002 FLASH_IRQHandler -08004378 w F .text 00000002 _exit -08002a30 w F .text 00000002 USART1_IRQHandler -08003de8 g F .text 00000008 HAL_SYSTICK_IRQHandler -08003184 g F .text 0000006c HAL_UART_Init -08002a14 w F .text 00000002 TIM1_BRK_UP_TRG_COM_IRQHandler -0800407c g F .text 0000029a HAL_CAN_Receive -08002a6c g F .text 00000008 TimerGet -00000000 w *UND* 00000000 _Jv_RegisterClasses -080048b8 g F .text 00000008 .hidden __aeabi_idivmod -08002a44 g F .text 00000026 TimerInit -00000000 w *UND* 00000000 __register_frame_info - - + +bin/demoprog_stm32f091.elf: file format elf32-littlearm +bin/demoprog_stm32f091.elf +architecture: armv6s-m, flags 0x00000112: +EXEC_P, HAS_SYMS, D_PAGED +start address 0x08002800 + +Program Header: +0x70000001 off 0x000046a8 vaddr 0x080046a8 paddr 0x080046a8 align 2**2 + filesz 0x00000008 memsz 0x00000008 flags r-- + LOAD off 0x00000000 vaddr 0x08000000 paddr 0x08000000 align 2**16 + filesz 0x000046b0 memsz 0x000046b0 flags r-x + LOAD off 0x000100c0 vaddr 0x200000c0 paddr 0x080046b0 align 2**16 + filesz 0x0000006c memsz 0x00000174 flags rw- +private flags = 5000200: [Version5 EABI] [soft-float ABI] + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 00001ea8 08002800 08002800 00002800 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .ARM.exidx 00000008 080046a8 080046a8 000046a8 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 2 .data 0000006c 200000c0 080046b0 000100c0 2**2 + CONTENTS, ALLOC, LOAD, DATA + 3 .bss 00000108 2000012c 0800471c 0001012c 2**2 + ALLOC + 4 .stack_dummy 00000100 20000238 20000238 00010130 2**3 + CONTENTS, READONLY + 5 .ARM.attributes 00000028 00000000 00000000 00010230 2**0 + CONTENTS, READONLY + 6 .comment 00000075 00000000 00000000 00010258 2**0 + CONTENTS, READONLY + 7 .debug_line 00008cc1 00000000 00000000 000102cd 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_info 0000eafe 00000000 00000000 00018f8e 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_abbrev 00002788 00000000 00000000 00027a8c 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_aranges 000006b0 00000000 00000000 0002a218 2**3 + CONTENTS, READONLY, DEBUGGING + 11 .debug_str 000883c4 00000000 00000000 0002a8c8 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_loc 00004518 00000000 00000000 000b2c8c 2**0 + CONTENTS, READONLY, DEBUGGING + 13 .debug_ranges 00000698 00000000 00000000 000b71a4 2**0 + CONTENTS, READONLY, DEBUGGING + 14 .debug_macro 000187a7 00000000 00000000 000b783c 2**0 + CONTENTS, READONLY, DEBUGGING + 15 .debug_frame 00000f9c 00000000 00000000 000cffe4 2**2 + CONTENTS, READONLY, DEBUGGING +SYMBOL TABLE: +08002800 l d .text 00000000 .text +080046a8 l d .ARM.exidx 00000000 .ARM.exidx +200000c0 l d .data 00000000 .data +2000012c l d .bss 00000000 .bss +20000238 l d .stack_dummy 00000000 .stack_dummy +00000000 l d .ARM.attributes 00000000 .ARM.attributes +00000000 l d .comment 00000000 .comment +00000000 l d .debug_line 00000000 .debug_line +00000000 l d .debug_info 00000000 .debug_info +00000000 l d .debug_abbrev 00000000 .debug_abbrev +00000000 l d .debug_aranges 00000000 .debug_aranges +00000000 l d .debug_str 00000000 .debug_str +00000000 l d .debug_loc 00000000 .debug_loc +00000000 l d .debug_ranges 00000000 .debug_ranges +00000000 l d .debug_macro 00000000 .debug_macro +00000000 l d .debug_frame 00000000 .debug_frame +00000000 l df *ABS* 00000000 obj/startup_stm32f0xx.o +00000100 l *ABS* 00000000 Stack_Size +00000000 l *ABS* 00000000 Heap_Size +0800299e l .text 00000000 .flash_to_ram_loop_end +08002994 l .text 00000000 .flash_to_ram_loop +080029cc l .text 00000000 .fill_zero_bss +080029c8 l .text 00000000 .loop_zero_bss +00000000 l df *ABS* 00000000 crtstuff.c +080046a4 l O .text 00000000 __EH_FRAME_BEGIN__ +080028c4 l F .text 00000000 __do_global_dtors_aux +2000012c l .bss 00000001 completed.8879 +20000128 l O .data 00000000 __do_global_dtors_aux_fini_array_entry +080028ec l F .text 00000000 frame_dummy +20000130 l .bss 00000018 object.8884 +20000124 l O .data 00000000 __frame_dummy_init_array_entry +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o +00000000 l df *ABS* 00000000 system_stm32f0xx.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_can.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_cortex.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_gpio.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_uart.c +00000000 l df *ABS* 00000000 stm32f0xx_hal.c +00000000 l df *ABS* 00000000 stm32f0xx_hal_rcc_ex.c +00000000 l df *ABS* 00000000 _exit.c +00000000 l df *ABS* 00000000 timer.c +00000000 l df *ABS* 00000000 led.c +20000148 l O .bss 00000001 led_toggle_state.6820 +2000014c l O .bss 00000004 timer_counter_last.6821 +00000000 l df *ABS* 00000000 main.c +00000000 l df *ABS* 00000000 boot.c +20000150 l O .bss 00000028 canHandle +20000178 l O .bss 00000070 rs232Handle +200001e8 l O .bss 00000041 xcpCtoReqPacket.6840 +20000229 l O .bss 00000001 xcpCtoRxInProgress.6842 +2000022a l O .bss 00000001 xcpCtoRxLength.6841 +2000022c l O .bss 00000004 xcpCtoRxStartTime.6843 +0800467c l O .text 00000024 canTiming +00000000 l df *ABS* 00000000 _udivsi3.o +08004490 l .text 00000000 .udivsi3_skip_div0_test +00000000 l df *ABS* 00000000 _dvmd_tls.o +00000000 l df *ABS* 00000000 exit.c +00000000 l df *ABS* 00000000 init.c +00000000 l df *ABS* 00000000 memset.c +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/thumb/v6-m/nofp/crti.o +00000000 l df *ABS* 00000000 c:/progra~2/gnutoo~1/82018-~1/bin/../lib/gcc/arm-none-eabi/8.2.1/thumb/v6-m/nofp/crtn.o +00000000 l df *ABS* 00000000 impure.c +200000c4 l O .data 00000060 impure_data +00000000 l df *ABS* 00000000 crtstuff.c +080046a4 l O .text 00000000 __FRAME_END__ +00000000 l df *ABS* 00000000 +20000128 l .data 00000000 __init_array_end +20000124 l .data 00000000 __preinit_array_end +20000124 l .data 00000000 __init_array_start +20000124 l .data 00000000 __preinit_array_start +08004654 g O .text 00000008 APBPrescTable +20000238 g .stack_dummy 00000000 __HeapBase +00000000 g *ABS* 00000000 __HEAP_SIZE +200000c0 g .data 00000000 __data_start__ +0800321c g F .text 00000020 HAL_RCC_GetPCLK1Freq +0800362c g F .text 00000064 HAL_NVIC_SetPriority +080029fe w F .text 00000002 TIM1_CC_IRQHandler +080029d8 w F .text 00000002 HardFault_Handler +080029fa w F .text 00000002 ADC1_COMP_IRQHandler +080040c4 g F .text 0000000c SysTick_Handler +080038b0 g F .text 0000000c HAL_GPIO_WritePin +080029e4 w F .text 00000002 PVD_IRQHandler +08003210 g F .text 0000000c HAL_RCC_GetHCLKFreq +080029dc w F .text 00000002 PendSV_Handler +080029d6 w F .text 00000002 NMI_Handler +080046b0 g .ARM.exidx 00000000 __exidx_end +08002a22 w F .text 00000002 BootRAM +08002fcc g F .text 000000a0 HAL_RCC_GetSysClockFreq +08002a10 w F .text 00000002 I2C1_IRQHandler +080046b0 g .ARM.exidx 00000000 __etext +080041a4 g F .text 000000d4 HAL_MspInit +080036e8 w F .text 00000002 HAL_SYSTICK_Callback +080036f4 g F .text 000001bc HAL_GPIO_Init +200000c0 g O .data 00000004 SystemCoreClock +0800348a g F .text 00000060 HAL_CAN_Start +08004490 g F .text 0000010a .hidden __udivsi3 +20000238 g .stack_dummy 00000000 __HeapLimit +2000012c g .bss 00000000 __bss_start__ +08002a14 w F .text 00000002 SPI1_IRQHandler +08003390 g F .text 000000fa HAL_CAN_ConfigFilter +08002a04 w F .text 00000002 TIM6_DAC_IRQHandler +080038c0 g F .text 00000278 UART_SetConfig +20000230 g O .bss 00000004 uwTick +08003690 g F .text 00000038 HAL_SYSTICK_Config +080046a8 g .text 00000000 __exidx_start +080046a0 g O .text 00000004 _global_impure_ptr +080045d4 g F .text 00000048 __libc_init_array +08002a1c w F .text 00000002 USART3_4_IRQHandler +0800290c g F .text 00000000 _mainCRTStartup +080029ee w F .text 00000002 EXTI2_3_IRQHandler +0800323c w F .text 00000002 HAL_CAN_MspInit +0800462c g F .text 00000000 _init +08002a12 w F .text 00000002 I2C2_IRQHandler +08004394 g F .text 0000001c BootActivate +08002a0e w F .text 00000002 TIM17_IRQHandler +080029e6 w F .text 00000002 RTC_IRQHandler +08003c84 g F .text 00000148 HAL_UART_Receive +08002984 g F .text 0000003c Reset_Handler +08003eec g F .text 00000020 HAL_Init +080040d0 g F .text 00000010 LedInit +08003c18 g F .text 0000006c UART_WaitOnFlagUntilTimeout +08003b38 g F .text 000000e0 UART_AdvFeatureConfig +20000238 g .stack_dummy 00000000 end +2000012c g .data 00000000 __data_end__ +08002a0c w F .text 00000002 TIM16_IRQHandler +20000234 g .bss 00000000 __bss_end__ +00000100 g *ABS* 00000000 __STACK_SIZE +08002a02 w F .text 00000002 TIM3_IRQHandler +080029f0 w F .text 00000002 EXTI4_15_IRQHandler +080029ea w F .text 00000002 RCC_IRQHandler +080029f4 w F .text 00000002 DMA1_Channel1_IRQHandler +080029e0 w F .text 00000002 Default_Handler +0800290c g F .text 00000000 _start +08004644 g O .text 00000010 AHBPrescTable +08003dcc g F .text 0000008c UART_CheckIdleState +08002a1e w F .text 00000002 CEC_IRQHandler +08002a08 w F .text 00000002 TIM14_IRQHandler +080029f8 w F .text 00000002 DMA1_Channel4_5_IRQHandler +0800306c g F .text 000001a4 HAL_RCC_ClockConfig +08002a06 w F .text 00000002 TIM7_IRQHandler +08002a0a w F .text 00000002 TIM15_IRQHandler +080029ec w F .text 00000002 EXTI0_1_IRQHandler +08002a20 w F .text 00000002 USB_IRQHandler +080045a4 w F .text 00000002 .hidden __aeabi_ldiv0 +08003f1c w F .text 0000000c HAL_GetTick +08002a16 w F .text 00000002 SPI2_IRQHandler +0800461c g F .text 00000010 memset +08002800 g .text 000000c4 __isr_vector +08004130 g F .text 00000074 main +080034ea g F .text 00000140 HAL_CAN_GetRxMessage +08004490 g F .text 00000000 .hidden __aeabi_uidiv +080029da w F .text 00000002 SVC_Handler +20000238 g .stack_dummy 00000000 __end__ +08004278 g F .text 0000011c BootComInit +08002a2c g F .text 00000060 SystemInit +08004638 g F .text 00000000 _fini +080038bc w F .text 00000002 HAL_UART_MspInit +08003ec8 w F .text 00000024 HAL_InitTick +20008000 g .bss 00000000 __StackTop +08003f0c w F .text 00000010 HAL_IncTick +080029f2 w F .text 00000002 TS_IRQHandler +080029e2 w F .text 00000002 WWDG_IRQHandler +080040e0 g F .text 00000050 LedToggle +08002a00 w F .text 00000002 TIM2_IRQHandler +080029f6 w F .text 00000002 DMA1_Channel2_3_IRQHandler +080036c8 g F .text 00000020 HAL_SYSTICK_CLKSourceConfig +0800323e g F .text 00000152 HAL_CAN_Init +20008000 g *ABS* 00000000 __stack +0800459c g F .text 00000008 .hidden __aeabi_uidivmod +20007f00 g *ABS* 00000100 __StackLimit +08002a1a w F .text 00000002 USART2_IRQHandler +08002a8c g F .text 00000540 HAL_RCC_OscConfig +080045a8 g F .text 0000002c exit +08003f28 g F .text 0000016c HAL_RCCEx_PeriphCLKConfig +080043b0 g F .text 000000e0 BootComCheckActivationRequest +080045a4 w F .text 00000002 .hidden __aeabi_idiv0 +080029e8 w F .text 00000002 FLASH_IRQHandler +08004094 w F .text 00000002 _exit +08002a18 w F .text 00000002 USART1_IRQHandler +080036ea g F .text 00000008 HAL_SYSTICK_IRQHandler +08003e58 g F .text 00000070 HAL_UART_Init +080029fc w F .text 00000002 TIM1_BRK_UP_TRG_COM_IRQHandler +080040bc g F .text 00000008 TimerGet +08004096 g F .text 00000026 TimerInit + + diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.srec b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.srec index 6796cb9d..54649875 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.srec +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/bin/demoprog_stm32f091.srec @@ -1,552 +1,501 @@ S01E000062696E2F64656D6F70726F675F73746D3332663039312E7372656329 -S31508002800008000209D290008EF290008F12900080A +S315080028000080002085290008D7290008D929000852 S3150800281000000000000000000000000000000000AA -S31508002820000000000000000000000000F329000876 -S315080028300000000000000000F5290008752A0008BD -S31508002840FB290008FD290008FF290008012A0008BD -S31508002850032A0008052A0008072A0008092A00088A -S315080028600B2A00080D2A00080F2A0008112A00085A -S31508002870132A0008152A0008172A0008192A00082A -S315080028801B2A00081D2A00081F2A0008212A0008FA -S31508002890232A0008252A0008272A0008292A0008CA -S315080028A02B2A00082D2A00082F2A0008312A00089A -S315080028B0332A0008352A0008372A0008392A00086A +S31508002820000000000000000000000000DB2900088E +S315080028300000000000000000DD290008C54000086F +S31508002840E3290008E5290008E7290008E92900081E +S31508002850EB290008ED290008EF290008F1290008EE +S31508002860F3290008F5290008F7290008F9290008BE +S31508002870FB290008FD290008FF290008012A00088D +S31508002880032A0008052A0008072A0008092A00085A +S315080028900B2A00080D2A00080F2A0008112A00082A +S315080028A0132A0008152A0008172A0008192A0008FA +S315080028B01B2A00081D2A00081F2A0008212A0008CA S315080028C0EE11AA5510B5064C2378002B07D1054BF7 S315080028D0002B02D0044800E000BF0123237010BD7E -S315080028E02C01002000000000D8490008084B10B54C -S315080028F0002B03D00749084800E000BF07480368D3 -S31508002900002B00D110BD064B002BFBD09847F9E7EA -S315080029100000000030010020D84900082C010020E2 -S3150800292000000000164B002B00D1144B9D46402298 -S3150800293092029A1A924600218B460F461348144A69 -S31508002940121A02F004F80F4B002B00D098470E4BD2 -S31508002950002B00D098470020002104000D000D48E8 -S31508002960002802D00C4800E000BF01F0C1FF20009B -S31508002970290000F085F801F0A5FFC0460000080010 -S315080029800080002000000000000000002C0100204C -S3150800299078020020000000000000000008498D466B -S315080029A00849094A094B9B1A05DD002408591051A4 -S315080029B004349C42FADB0648804706480047000074 -S315080029C000800020E4490008C00000202C010020F7 -S315080029D0C92B0008252900081849194A002301E0CF -S315080029E00B6004319142FBD300F04AF8FEE7FEE79C +S315080028E02C01002000000000A4460008044B10B587 +S315080028F0002B03D00349044800E000BF10BDC046C2 +S315080029000000000030010020A4460008164B002BEA +S3150800291000D1144B9D46402292029A1A92460021F3 +S315080029208B460F461348144A121A01F077FE0F4BCE +S31508002930002B00D098470E4B002B00D0984700205C +S31508002940002104000D000D48002802D00C4800E0C4 +S3150800295000BF01F03FFE2000290001F0E9FB01F06D +S3150800296023FEC0460000080000800020000000008A +S31508002970000000002C0100203402002000000000A6 +S315080029800000000008498D460849094A094B9B1A68 +S3150800299005DD00240859105104349C42FADB064828 +S315080029A0804706480047000000800020B04600081F +S315080029B0C00000202C0100202D2A00080D2900083F +S315080029C01849194A002301E00B6004319142FBD3F0 +S315080029D001F0AEFBFEE7FEE7FEE7FEE7FEE7FEE7F1 +S315080029E0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B1 S315080029F0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7A1 S31508002A00FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE790 S31508002A10FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE780 -S31508002A20FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE770 -S31508002A30FEE7FEE7FEE7FEE7FEE7FEE72C010020DD -S31508002A407802002010B501F069F8FA21890001F032 -S31508002A50C3FD01F09BF9042001F0B4F9002200211E -S31508002A600120404201F05EF910BDC04610B501F0E4 -S31508002A707DFC10BD10B501F071FC01F0B5F910BD73 -S31508002A8000B599B001F05AFC01230B9305220C926C -S31508002A90033A1492802252021592A02292031692A9 -S31508002AA017930BA800F05EFC002800D0FEE707236A -S31508002AB00093053B01930023029303930121684683 -S31508002AC000F052FF002800D0FEE7022304930023FB -S31508002AD0079304A800F08CFB002800D0FEE701F05D -S31508002AE04DFCFFF7AFFF01F079FC01F04FFC01F058 -S31508002AF007FDFAE7F0B58BB0314B9A6901252A43F1 -S31508002B009A619A692A400092009A5969802292022B -S31508002B1011435961596911400191019958698021F8 -S31508002B20C902084358615869014002910299D96956 -S31508002B301143D961D9690A400392039AD969802257 -S31508002B4092041143D961DB691A400492049B00225E -S31508002B5000210520404201F0E5F80022002102206C -S31508002B60404201F0DFF8002200210120404201F036 -S31508002B70D9F82023059306950024079408949027EE -S31508002B80FF0505A9380000F0DFFF0C230593022690 -S31508002B90069607940894099505A9380000F0D4FF0D -S31508002BA0C0239B00059306960794032308930133D5 -S31508002BB0099305A9034800F0C7FF0BB0F0BDC0464E -S31508002BC00010024000040048114B1A6801210A430C -S31508002BD01A6058680F4A02405A6018680E4A02403E -S31508002BE01A6018680D4A02401A6058680C4A024072 -S31508002BF05A60DA6A0F208243DA62186B094A024081 -S31508002C001A635A6B8A435A6300229A607047C04611 -S31508002C10001002400CB8FF08FFFFF6FEFFFFFBFF9F -S31508002C20FFFFC0FFACFEF0FF7047C04670B504005A -S31508002C3000680368A1682269114362691143E26961 -S31508002C4011437D4A13400B430360226851687B4B4E -S31508002C500B40E1680B43536020688368A169226AC8 -S31508002C601143774A13400B4383602568754B9D4291 -S31508002C700FD1754B1B6B03221340012B00D196E035 -S31508002C80002B49D0022B00D197E0032B00D188E016 -S31508002C9099E06E4B9D4216D16B4B1A6BC0239B0273 -S31508002CA0134080225202934200D180E002D8002BC2 -S31508002CB032D088E08022920293427ED0C0229202CD -S31508002CC093426ED07FE0624B9D4215D15E4B1A6BE4 -S31508002CD0C0231B0313408022D202934267D002D836 -S31508002CE0002B19D06FE080221203934265D0C022D0 -S31508002CF01203934255D066E0564B9D424BD0564B35 -S31508002D009D4248D0554B9D4245D0554B9D4242D099 -S31508002D10544B9D4257D13EE080231B02E2699A42FA -S31508002D207DD100F001FF400063685B08C018616848 -S31508002D3001F052FC83B2002024E0636858084A4B2D -S31508002D409C466044616801F047FC83B2002019E0A4 -S31508002D5000F0C2FD400063685B08C018616801F0B6 -S31508002D603BFC83B200200DE06368580880235B02B1 -S31508002D709C466044616801F02FFC83B2002001E0A4 -S31508002D80012000230F221900914322681B075B0FBD -S31508002D900B43D3604EE080231B02E2699A423ED180 -S31508002DA0BFE780231B02E2699A4213D1C5E7802355 -S31508002DB01B02E2699A4219D1CAE780231B02E2691B -S31508002DC09A421FD1D0E780231B02E2699A42D7D0E4 -S31508002DD001202FE061684808244B9C46604401F0B6 -S31508002DE0FBFB0004000CE860002023E000F074FD03 -S31508002DF061684B08181801F0EFFB0004000CE86046 -S31508002E00002017E06168480880231B029C4660443E -S31508002E1001F0E2FB0004000CE86000200AE000F084 -S31508002E2083FE61684B08181801F0D6FB0004000CF5 -S31508002E30E860002070BDC046F369FFEFFFCFFFFFD3 -S31508002E40FFF4FFFF00380140001002400044004034 -S31508002E5000480040004C004000500040001401406B -S31508002E6000180140001C01400024F40000127A00FA -S31508002E70436ADB0706D5026851682C4B0B40816A0A -S31508002E800B435360436A9B0706D502685168284B73 -S31508002E900B40C16A0B435360436A5B0706D5026859 -S31508002EA05168244B0B40016B0B435360436A1B0765 -S31508002EB006D502685168204B0B40416B0B435360A3 -S31508002EC0436ADB0606D5026891681C4B0B40816B8A -S31508002ED00B439360436A9B0606D502689168184BB4 -S31508002EE00B40C16B0B439360436A5B0612D50268BD -S31508002EF05168144B0B40016C0B43536080235B03F2 -S31508002F00026C9A4206D1026851680F4B0B40416C1D -S31508002F100B435360436A1B0606D501684A680B4B88 -S31508002F201340826C13434B607047C046FFFFFDFF9A -S31508002F30FFFFFEFFFFFFFBFFFF7FFFFFFFEFFFFF28 -S31508002F40FFDFFFFFFFFFEFFFFFFF9FFFFFFFF7FF1B -S31508002F50F0B5474680B407000C0016009846069D53 -S31508002F601DE06B1C1CD0002D05D001F0FFF943466F -S31508002F70C01A854213D23A6811680F4B0B4013608A -S31508002F803A68936801218B43936020236922BB54D6 -S31508002F900132BB5400224833FA54032008E03A6849 -S31508002FA0D36923401B1B59424B41B342D9D0002059 -S31508002FB004BC9046F0BDC0465FFEFFFFF0B557461D -S31508002FC04646C0B485B004000F0016001D006A23EB -S31508002FD0C35C0220202B00D086E0002900D180E0C7 -S31508002FE00138002A00D17FE080235B01A2689A425B -S31508002FF004D12369002B01D1CB0775D46823E35C80 -S315080030000220012B70D001226823E2540023E366D4 -S3150800301021326A33E25401F0A9F903905823E652A3 -S315080030200233E652A3688022520193420AD12369E9 -S31508003030002B03D12F4A5C33E2521EE0FF225C23A9 -S31508003040E2521AE0002B0AD12369002B03D1FF2292 -S315080030505C33E25211E07F225C23E2520DE08022CB -S315080030605205934209D12369002B03D17F225C3391 -S31508003070E25202E03F225C23E2525C23E35A9A467C -S315080030805A2680235B0198461FE0A35B013B9BB24F -S31508003090A3530095039B002220212000FFF758FF29 -S315080030A0002820D1A368434509D12369002B06D1FE -S315080030B023689B8C524613403B80023705E0236801 -S315080030C09B8C524613403B700137A35B9BB2002B87 -S315080030D0DBD120226A33E2540022023BE25400206C -S315080030E002E0012000E0032005B00CBC90469A4699 -S315080030F0F0BDC046FF01000030B583B004000023D0 -S31508003100C36601F033F9050023681A4A934205D0CD -S31508003110194A934202D0194A934220D11B681B07C9 -S315080031200CD5174B00932B00002280218903200021 -S31508003130FFF70EFF03000320002B19D123681B6835 -S315080031405B070CD50E4B00932B0000228021C90388 -S315080031502000FFF7FDFE03000320002B08D12023E3 -S315080031606922A3540132A35400224833E2540020B2 -S3150800317003B030BD0038014000440040004800401C -S31508003180FFFFFF0110B5041E2ED06923C35C002B78 -S3150800319004D100226833C254FFF746FD242269236E -S315080031A0E2542268136801218B4313602000FFF75D -S315080031B03DFD012819D0636A002B02D02000FFF7D5 -S315080031C057FE22685168094B0B4053602268936882 -S315080031D02A218B4393602268116801230B431360ED -S315080031E02000FFF789FF00E0012010BDFFB7FFFFB1 -S315080031F0F0B54F464646C0B483B004000368DB0307 -S3150800320063D5504BDB690025DB000AD44D4AD169EA -S3150800321080235B051943D161D26913400193019B51 -S315080032200135494B1B68DB0515D4474A13688021CD -S3150800323049000B43136001F099F88046424F8026F7 -S31508003240760005E001F092F84346C01A642870D863 -S315080032503B683342F6D03B4B1A6AC0239B001340A7 -S3150800326026D0C022920061680A40934220D0354B8E -S31508003270186A364A0240196A80267602314319626C -S315080032801E6A3349314019621A62C30710D501F024 -S315080032906DF881462B4F02262E4B984605E001F025 -S315080032A065F84B46C01A404545D83B6A1E42F6D0DB -S315080032B0244A116A254B0B4061680B431362012DA2 -S315080032C003D1D169244B0B40D3612368DB0706D5AC -S315080032D01C4A136B03218B43A1680B4313632368B2 -S315080032E09B0706D5174A116B1C4B0B40E1680B432D -S315080032F0136323685B0306D5124A116B184B0B4000 -S3150800330021690B43136323689B0606D50D4A136B85 -S3150800331010218B4361690B431363002023685B0507 -S315080033200AD508490B6B40229343A26913430B63E2 -S3150800333002E0032000E0032003B00CBC9046994647 -S31508003340F0BDC0460010024000700040FFFCFFFFC1 -S31508003350FFFFFEFF88130000FFFFFFEFFFFFFCFFE4 -S31508003360FFFFF3FFF0B54F464646C0B483B00400EE -S315080033700368DB076DD5CA4B5B680C221340042B28 -S315080033800DD0C74B5B681340082B11D1C44B5A6844 -S31508003390C0235B02134080225202934208D1C04BDD -S315080033A01B689B0355D501206368002B51D185E224 -S315080033B06368012B06D1BA4A1368802149020B4378 -S315080033C0136022E0002B09D1B54B1968B54A0A40AB -S315080033D01A601968B44A0A401A6016E0052B0BD120 -S315080033E0AF4B1A688021C9020A431A601A688021FD -S315080033F049020A431A6008E0A94B1968A94A0A4013 -S315080034001A601968A84A0A401A606368002B10D027 -S3150800341000F0ACFF0700A24E8025AD0205E000F0E3 -S31508003420A5FFC01B642800D927E233682B42F6D0D3 -S315080034300FE000F09BFF0700994E8025AD0205E0DE -S3150800344000F094FFC01B642800D918E233682B42A9 -S31508003450F6D123689B0758D5914B5B680C221A4214 -S315080034600DD08F4B5B681340082B1AD18C4B5A68CA -S31508003470C0235B02134080221202934211D1884B6B -S315080034801B689B0704D50120E368012B00D015E2D1 -S3150800349083490B682269D200F820834313430B60E3 -S315080034A033E0E368002B1CD07D4A116801230B43E7 -S315080034B0136000F05BFF0700794E022505E000F077 -S315080034C055FFC01B022800D9DBE133681D42F6D040 -S315080034D073490B682269D200F820834313430B60B3 -S315080034E013E06F4A136801218B43136000F03EFF17 -S315080034F007006B4E022505E000F038FFC01B0228C6 -S3150800350000D9C0E133681D42F6D123681B072BD5C5 -S31508003510E369002B14D0624A516A01230B435362B4 -S3150800352000F024FF07005E4E022505E000F01EFFAE -S31508003530C01B022800D9A8E1736A1D42F6D013E021 -S31508003540574A536A01218B43536200F00FFF070065 -S31508003550534E022505E000F009FFC01B022800D9DA -S3150800356095E1736A1D42F6D123685B0700D482E0B1 -S315080035704B4BDB6900229046DB000BD4484AD169E5 -S3150800358080235B051943D161D26913400193019BDE -S3150800359001239846454B1B68DB0515D4434A136837 -S315080035A0802149000B43136000F0E0FE05003F4F01 -S315080035B08026760005E000F0D9FE401B642800D975 -S315080035C067E13B683342F6D0A368012B04D1344A3D -S315080035D0116A0B43136220E0002B09D1304B1A6A9B -S315080035E001218A431A621A6A03318A431A6214E06D -S315080035F0052B09D12A4B196A04220A431A62196A49 -S3150800360001220A431A6208E0254B1A6A01218A43F5 -S315080036101A621A6A03318A431A62A368002B11D008 -S3150800362000F0A4FE81461E4F0226214D06E000F05A -S315080036309DFE4B46C01AA84200D92CE13B6A1E42A1 -S31508003640F5D010E000F092FE8146154F0226184D7F -S3150800365006E000F08BFE4B46C01AA84200D91CE1D2 -S315080036603B6A1E42F5D14346012B04D10C4AD16967 -S31508003670104B0B40D3612368DB0656D56369012BD3 -S315080036802CD1074B596B04220A435A63596B012202 -S315080036900A435A6300F06AFE0700014E022511E04C -S315080036A000100240FFFFFEFFFFFFFBFF0070004017 -S315080036B088130000FFFFFFEF00F058FEC01B02282A -S315080036C000D9ECE0736B1D42F6D07F494B6BA269BB -S315080036D0D200F820834313434B6326E005330CD10D -S315080036E0794A536B04218B435363536BA169C90011 -S315080036F0F82083430B43536317E0734B596B04223B -S315080037000A435A635A6B01218A435A6300F02EFE14 -S3150800371007006D4E022505E000F028FEC01B0228B2 -S3150800372000D9BEE0736B1D42F6D123689B0649D5C6 -S31508003730654B5B680C2213400C2B0BD0624B5B6805 -S315080037401340082B10D1604B5B68C022520213400D -S31508003750934209D15C4B5B6BDB0333D50120236AAB -S31508003760012B00D0AAE02DE0236A002B16D0564A7A -S31508003770536B802149020B43536300F0F7FD0700A2 -S31508003780514E80256D0205E000F0F0FDC01B0228B1 -S3150800379000D988E0736B2B42F6D013E04A4A516B86 -S315080037A04A4B0B40536300F0E1FD0700464E802567 -S315080037B06D0204E000F0DAFDC01B022875D8736BB1 -S315080037C02B42F7D1636A0020002B77D03E4A526815 -S315080037D00C210A40082A6AD0022B38D13A4A1168C5 -S315080037E03B4B0B40136000F0C1FD0700364E8025A9 -S315080037F0AD0404E000F0BAFDC01B022859D83368AE -S315080038002B42F7D1304BDA6A0F218A43216B0A43E0 -S31508003810DA625A68E06AA16A08432E490A400243F6 -S315080038205A601A68802149040A431A6000F09EFD0E -S315080038300600254D8024A40404E000F097FD801BB3 -S31508003840022838D82B682342F7D0002036E01E4AD3 -S3150800385011681F4B0B40136000F088FD06001A4DD7 -S315080038608024A40404E000F081FD801B022824D8EB -S315080038702B682342F7D1002020E003201EE0032016 -S315080038801CE003201AE0032018E0032016E00320BA -S3150800389014E0032012E0032010E003200EE00320CA -S315080038A00CE003200AE0032008E0032006E00120DC -S315080038B004E0032002E0032000E0032003B00CBC70 -S315080038C090469946F0BDC04600100240FFFFFEFF35 -S315080038D0FFFFFFFEFF7FC2FF10B588B01E4C102207 -S315080038E0210004A801F02AF82100103110226846A8 -S315080038F001F024F8194B5A680C231340082B03D0FF -S315080039000C2B25D1164824E0910C0F20014004AB5E -S315080039105C5C124BDB6A03406946C95CC0235B02E8 -S315080039201A4080235B029A4204D10E4800F054FEE6 -S3150800393060430EE0C0235B029A4204D1084800F0B7 -S315080039404BFE604305E0074800F046FE604300E092 -S31508003950044808B010BDC04690490008001002404F -S31508003960006CDC0200127A00F8B54F464646C0B431 -S3150800397005000C00634B1B68012213408B420BD2D7 -S31508003980604A136801218B432343136013680B4075 -S3150800399001209C4200D0B1E02B689B0706D55A4A05 -S315080039A05368F0218B43A9680B4353602B68DB07E8 -S315080039B072D56B68012B05D1534A12680120920310 -S315080039C016D49BE0022B05D14F4A126801209201BA -S315080039D00ED493E0032B05D14B4A526B0120D20338 -S315080039E006D48BE0484A12680120920700D485E085 -S315080039F045494A680320824313434B6000F0B6FCEE -S31508003A0006006B68012B11D105E000F0AFFC801BA6 -S31508003A10484505D96BE03C4B98460C273B4B9946E5 -S31508003A2043465B683B40042BEFD135E0022B11D1AE -S31508003A3005E000F09BFC801B484505D959E0324B50 -S31508003A4098460C27314B994643465B683B40082B02 -S31508003A50EFD121E0032B0BD02B4B98460C272B4B91 -S31508003A60994615E000F082FC801B484505D942E0DE -S31508003A70254B98460C27254B994643465B683B40A1 -S31508003A800C2BEFD108E000F071FC801B484534D8B8 -S31508003A9043465B681F42F6D11A4B1B680122134046 -S31508003AA09C420AD2174A136801218B4323431360A9 -S31508003AB013680B4001209C4220D12B685B0706D572 -S31508003AC011494A68124B1340EA6813434B60FFF7E3 -S31508003AD003FF0D4B5B681B061B0F0E4AD35CD840D1 -S31508003AE00D4B1860002000F017FC002006E00320AC -S31508003AF004E0032002E0032000E003200CBC90460B -S31508003B009946F8BD002002400010024088130000C4 -S31508003B10FFF8FFFF78490008C0000020014B18682D -S31508003B207047C046C0000020044B5B685B055B0F0E -S31508003B30034AD35C034A1068D84070470010024015 -S31508003B4088490008C0000020F0B55F4656464D4635 -S31508003B504446F0B485B00B68002B00D1C7E00024BA -S31508003B6010229046654A85186A426A410526B21AA5 -S31508003B7001920122A24092461A4000D1B1E04B6858 -S31508003B804646B343022B15D1E3089B00C3181D6AAA -S31508003B90A94607262640B6000F252F00B740BB4684 -S31508003BA04F465D46AF43B9460F69B7403E004D469E -S31508003BB02E431E6206686300994603234F46BB40A0 -S31508003BC0DB4335001D404F68032637404E46B74055 -S31508003BD03E002E4306604E684746BE43013E012E10 -S31508003BE012D886681E40CF684D46AF403E43866071 -S31508003BF046685546AE43B2464D682E0901252E4005 -S31508003C00A64055462E434660C66833408E684F46E2 -S31508003C10BE403343C3604B68DB0062D5384B9E69B0 -S31508003C2001252E439E619B692B400393039BA308A2 -S31508003C309B00344DAC4663449E6803272740BD006D -S31508003C40A9460F252F004D46AF40BE439025ED05EA -S31508003C50A8420BD02C4DA8420BD02C4DA8420BD015 -S31508003C602B4DA8420BD0019DAA460AE00025AA467C -S31508003C7007E00125AA4604E00225AA4601E0032535 -S31508003C80AA4657464D46AF403E439E60214B1B68A9 -S31508003C90D543A9464D68ED0302D44D462B4000E0B6 -S31508003CA013431C4E336076684B689B0302D44B461D -S31508003CB01E4000E01643174B5E609E684B68DB02A9 -S31508003CC002D44B461E4000E01643124B9E60DB684A -S31508003CD04D68AD0202D44A46134000E013430D4A2C -S31508003CE0D36001340B681A00E24000D041E705B002 -S31508003CF03CBC90469946A246AB46F0BD00F0FFB7DD -S31508003D000010024000000140000400480008004876 -S31508003D10000C004800040140002A01D0816100E03F -S31508003D208162704770B5002816DAC0B20F230340C7 -S31508003D30083B9B089B00134A94466344DA690324AC -S31508003D402040C000FC3425008540AA438901214053 -S31508003D5081401143D96113E083089B000A4A9446BF -S31508003D606344C025AD005A5903242040C000FC34E2 -S31508003D7026008640B24389012140814011435951AA -S31508003D8070BDC04600ED00E000E100E0431E0A4AAF -S31508003D90012093420ED8094A536009490B6A1B024F -S31508003DA01B0AC020000603430B62002393600733F7 -S31508003DB0136000207047C046FFFFFF0010E000E0D8 -S31508003DC000ED00E0042805D1054A116804230B43D9 -S31508003DD0136004E0024A136804218B43136070479A -S31508003DE010E000E07047C04610B5FFF7FBFF10BDB6 -S31508003DF0F0B5012426004B699E408025AD00036876 -S31508003E005B594A6A17023C4A1A403B00134323434C -S31508003E100268535105688724A4002A59F3431A40B7 -S31508003E202A51CA69002A18D10568103C2A591A402D -S31508003E302A51CA6814048A8814434A694832D20047 -S31508003E40056854518A6814040A8814434A69483232 -S31508003E50D2000568AC4662445460CA69012A19D181 -S31508003E6005688324A4002A5932432A510A6814048F -S31508003E708A8814434A694832D200056854518A68C8 -S31508003E8014048A8914434A694832D2000568AC4644 -S31508003E90624454608A69002A06D105688124A40010 -S31508003EA02A591A402A5105E005688124A4002A598E -S31508003EB032432A510A69002A06D1046885229200EB -S31508003EC0A5582B40A35005E0046885229200A35804 -S31508003ED03343A3500B6A012B05D101688722920050 -S31508003EE08B581E438E500168802292008B58012001 -S31508003EF083438B500020F0BDFFC0FFFF7047C046CC -S31508003F0070B5041E00D1B6E03D23C35C002B04D176 -S31508003F1000223C33C254FFF7F1FF02213D23E1544E -S31508003F20226813688B4313602268116801230B43C8 -S31508003F30136000F01BFA060001250CE000F016FAE3 -S31508003F40801B0A2807D903223D23E2540022013B9D -S31508003F50E254032090E023685A681542EED05A6866 -S31508003F60D20700D482E0A269012A04D119687F32F7 -S31508003F700A431A6003E01A6880218A431A60E369D3 -S31508003F80012B05D1226811683F330B43136004E007 -S31508003F902268136840218B431360236A012B05D1DD -S31508003FA0226811681F330B43136004E02268136804 -S31508003FB020218B431360636A012B05D1226811689F -S31508003FC00F330B43136004E02268136810218B43F8 -S31508003FD01360A36A012B05D12268116807330B43C6 -S31508003FE0136004E02268136808218B431360E36AB0 -S31508003FF0012B05D12268116803330B43136004E0D3 -S315080040002268136804218B4313602168A368E26859 -S31508004010134322691343626913436268013A1343DF -S31508004020CB612268136801218B43136000F09EF967 -S31508004030060001250CE000F099F9801B0A2807D92B -S3150800404003223D23E2540022013BE254032013E0FD -S3150800405023685A681542EED15B68DB0706D400234D -S31508004060236401223D33E254002005E004223D2367 -S31508004070E254012000E0012070BDC046F0B5474675 -S3150800408080B404000D0016003C23C35C0220012BFB -S3150800409000D13DE101223C23E254002900D033E15E -S315080040A00133E35C222B0BD03D23E35C422B07D084 -S315080040B03D23E35C622B03D03D23E35C722B19D1CD -S315080040C000223C23E254022022E13D23E35C322B0A -S315080040D00BD03D23E35C522B07D03D23E35C622BD8 -S315080040E003D03D23E35C722B1DD100223C23E2540E -S315080040F002200DE13D23E35CDBB2322B07D0522BC5 -S3150800410009D0122B0BD142222B33E25423E0622230 -S315080041103D23E2541FE072223D23E2541BE0222293 -S315080041203D23E25417E03D23E35CDBB2222B07D0A4 -S31508004130422B09D0122B0BD152222B33E2540AE020 -S3150800414062223D23E25406E072223D23E25402E055 -S3150800415032223D23E25400F009F98046032711E094 -S31508004160731C0FD0002E05D000F000F94346C01A84 -S31508004170864207D203223D23E2540022013BE25441 -S315080041800320C5E0002D07D12368DB683B401A00F1 -S3150800419053425341DBB206E023681B693B401A00D1 -S315080041A053425341DBB2002BDAD1002D01D1636BA8 -S315080041B000E0A36B2A001B32120121685258042121 -S315080041C00A409A6007D12A001B3212012168525808 -S315080041D0520D1A6006E02A001B3212012168525855 -S315080041E0D2085A602A001B321201216851588907E1 -S315080041F0C90FD9602168891849680F2001401961DB -S3150800420021688C46624452681204120EDA611D62F5 -S315080042102A0121688918B931FF3109681975216899 -S315080042208918B931FF310968090A59752168891849 -S31508004230B931FF310968090C997521688918B931AE -S31508004240FF310968090ED97521688918BD31FF3112 -S315080042500968197621688918BD31FF310968090A84 -S31508004260597621688918BD31FF310968090C997694 -S3150800427021688C466244BD32FF321268120EDA7625 -S31508004280002D0ED12268D16820230B43D3603D232D -S31508004290E35CDBB2622B17D0722B19D0422B1BD1F1 -S315080042A00EE02268116920230B4313613D23E35C6A -S315080042B0DBB2622B18D0722B1AD0522B1CD10FE00E -S315080042C012223D23E2541AE032223D23E25416E03C -S315080042D052223D23E25412E001223D23E2540EE02D -S315080042E012223D23E2540AE022223D23E25406E04C -S315080042F042223D23E25402E001223D23E2540022F9 -S315080043003C23E254002003E0012900D1DDE60AE758 -S3150800431004BC9046F0BDC04610B50400FFF7FEFB8E -S31508004320FA21890000F058F9FFF730FD0022210034 -S3150800433001204042FFF7F6FC002010BD10B5064AE2 -S31508004340116810230B4313600020FFF7E5FFFEF703 -S31508004350D1FB002010BDC04600200240024A136867 -S31508004360013313607047C04674020020014B186879 -S315080043707047C04674020020FEE7C04610B500220A -S3150800438020219020C005FFF7C7FC10BD10B5FEF729 -S315080043906DFB04000F4B1B68C31AF422FF329342CD -S315080043A017D90D4B1B78002B09D1F33AFF3A0A4B64 -S315080043B01A7020219020C005FFF7AEFC07E0002206 -S315080043C0054B1A7020219020C005FFF7A5FC014B6C -S315080043D01C6010BD480100204C010020F0B55F4666 -S315080043E056464D464446F0B48BB03448344B0360C9 -S315080043F0E1231B02436000238360C360036183617A -S315080044000C334361FEF7BEFE2E4D24239A46AA447A -S3150800441000239846F533FF3399462B4B9B462F7856 -S315080044206E78BC1901344B465C432100274800F0DE -S3150800443043FA002909D12100244800F057F983B22C -S315080044409846013B9BB25B4504D902355545E6D1F2 -S31508004450002600271E4C1F4B2360002525631E4B94 -S315080044606363A561E56125626562A562E562A5608B -S31508004470E560013F3F042761013E36056661434614 -S3150800448063602000FFF73CFD059506950123079319 -S31508004490124A00920195124A029204220392049546 -S315080044A008930D33099369462000FFF7A1FC0BB06A -S315080044B03CBC90469946A246AB46F0BD500100204A -S315080044C000440040B0490008FF03000080BB00001C -S315080044D02C02002000640040C4010020E0CC00004B -S315080044E0E0FF0000BFF34F8F034A044BDA60BFF3C7 -S315080044F04F8FC046FDE7C0460400FA0500ED00E010 -S3150800450010B52E4B1B78002B16D101222C492D48AD -S31508004510FEF754FD00283BD1294B1B78013B3F2B66 -S3150800452036D8FEF7A3FA284B18600122234B1A70D7 -S315080045300022264B1A702BE0244B19780131204BA8 -S315080045405918002301221F48FEF738FD002815D107 -S315080045501E4A13780133DBB21370194A12789A424D -S3150800456016D10022154B1A70154B5B78FF2B0FD10D -S31508004570134B9B78002B0BD1FFF7B4FFFEF776FAA7 -S31508004580114B1B686433984202D900220B4B1A70F0 -S31508004590002200210E48FFF771FD00280DD10C4BB3 -S315080045A05B6B0C4A1968914207D19A68002A04D1B4 -S315080045B09B8AFF2B01D1FFF795FF10BD290200202A -S315080045C0E80100205001002070020020C0010020F0 -S315080045D02C02002067060000002243088B4274D391 -S315080045E003098B425FD3030A8B4244D3030B8B42E6 -S315080045F028D3030C8B420DD3FF22090212BA030CEF -S315080046008B4202D31212090265D0030B8B4219D3CF -S3150800461000E0090AC30B8B4201D3CB03C01A5241EF -S31508004620830B8B4201D38B03C01A5241430B8B4237 -S3150800463001D34B03C01A5241030B8B4201D30B0320 -S31508004640C01A5241C30A8B4201D3CB02C01A524147 -S31508004650830A8B4201D38B02C01A5241430A8B420A -S3150800466001D34B02C01A5241030A8B4201D30B02F3 -S31508004670C01A5241CDD2C3098B4201D3CB01C01A0D -S31508004680524183098B4201D38B01C01A5241430917 -S315080046908B4201D34B01C01A524103098B4201D305 -S315080046A00B01C01A5241C3088B4201D3CB00C01A72 -S315080046B0524183088B4201D38B00C01A52414308EA -S315080046C08B4201D34B00C01A5241411A00D201460F -S315080046D0524110467047FFE701B5002000F0F0F898 -S315080046E002BDC0460029F7D076E7704703460B435C -S315080046F07FD4002243088B4274D303098B425FD3CD -S31508004700030A8B4244D3030B8B4228D3030C8B42F8 -S315080047100DD3FF22090212BA030C8B4202D31212DE -S31508004720090265D0030B8B4219D300E0090AC30BB3 -S315080047308B4201D3CB03C01A5241830B8B4201D360 -S315080047408B03C01A5241430B8B4201D34B03C01A49 -S315080047505241030B8B4201D30B03C01A5241C30AC1 -S315080047608B4201D3CB02C01A5241830A8B4201D332 -S315080047708B02C01A5241430A8B4201D34B02C01A1C -S315080047805241030A8B4201D30B02C01A5241CDD2C1 -S31508004790C3098B4201D3CB01C01A524183098B420C -S315080047A001D38B01C01A524143098B4201D34B01F5 -S315080047B0C01A524103098B4201D30B01C01A524158 -S315080047C0C3088B4201D3CB00C01A524183088B42DF -S315080047D001D38B00C01A524143088B4201D34B00C8 -S315080047E0C01A5241411A00D201465241104670473A -S315080047F05DE0CA0F00D04942031000D3404253403F -S3150800480000229C4603098B422DD3030A8B4212D3FE -S31508004810FC22890112BA030A8B420CD38901921130 -S315080048208B4208D3890192118B4204D389013AD06D -S31508004830921100E08909C3098B4201D3CB01C01A42 -S31508004840524183098B4201D38B01C01A5241430955 -S315080048508B4201D34B01C01A524103098B4201D343 -S315080048600B01C01A5241C3088B4201D3CB00C01AB0 -S31508004870524183088B4201D38B00C01A5241D9D2C8 -S3150800488043088B4201D34B00C01A5241411A00D249 -S315080048900146634652415B10104601D34042002B45 -S315080048A000D54942704763465B1000D3404201B5C4 -S315080048B0002000F005F802BD0029F8D016E7704779 -S315080048C07047C046084B10B50400002B02D00021E3 -S315080048D000E000BF054B1868836A002B00D0984794 -S315080048E02000FFF749FDC04600000000D449000833 -S315080048F00E4B70B500251E000D4CE41AA410A542F7 -S3150800490004D0AB00F35898470135F8E700F028F8CB -S31508004910084B00251E00084CE41AA410A54204D032 -S31508004920AB00F35898470135F8E770BD240100201D -S31508004930240100202401002028010020002310B5AE -S315080049409A4203D0CC5CC4540133F9E710BD030086 -S315080049508218934202D019700133FAE770470000B3 -S31508004960F8B5C046F8BC08BC9E467047F8B5C046C0 -S31508004970F8BC08BC9E467047000000000000000016 -S3150800498001020304060708090000000001020304E7 -S3150800499002030405060708090A0B0C0D0E0F101072 -S315080049A00102030405060708090A0B0C0D0E0F1071 -S315080049B005020602060307030803090309040A0495 -S315080049C00B040C040C050D050E050F050F06100645 -S311080049D010071008C400002000000000BA -S30D080049DC48DFFF7F010000001F -S315080049E400127A0000000000000000000000000029 -S315080049F400000000000000000000000000000000A5 -S31508004A040000000000000000000000000000000094 -S31508004A140000000000000000000000000000000084 -S31508004A240000000000000000000000000000000074 -S31508004A340000000000000000000000000000000064 -S31108004A4400000000ED280008C528000846 +S31508002A20FEE7FEE72C01002034020020114B1A684D +S31508002A3001210A431A605A680F4802405A601A6808 +S31508002A400E4802401A601A680D4802401A605A6811 +S31508002A500C4802405A60DA6A0F208243DA621A6B1F +S31508002A60094802401A635A6B8A435A6300229A60DD +S31508002A707047C046001002400CB8FF08FFFFF6FE7C +S31508002A80FFFFFBFFFFFFC0FFACFEF0FFF0B5CE4631 +S31508002A90474680B583B004000368DB072BD5BD4BDA +S31508002AA05A680C231340042B1DD0BA4B5A680C23C2 +S31508002AB01340082B0ED06368012B43D0002B5AD144 +S31508002AC0B44B1A68B4490A401A601A68B3490A40EE +S31508002AD01A603DE0AF4B5B68C02252021340802269 +S31508002AE052029342E7D1AB4B1B689B0303D563683D +S31508002AF0002B00D15BE223689B077DD5A54B5B685D +S31508002B000C221A4268D0A34B5A680C231340082B90 +S31508002B1059D0E368002B00D195E09E4A136801213D +S31508002B200B43136001F0FAF907009A4E0225336841 +S31508002B301D4200D07EE001F0F1F9C01B0228F6D94B +S31508002B40032072E0934A116880235B020B431360EB +S31508002B506368002B27D001F0E1F907008D4E802528 +S31508002B60AD0233682B42C6D101F0D8F9C01B6428E0 +S31508002B70F7D9032059E0052B09D0864B1A688649F0 +S31508002B800A401A601A6885490A401A60E0E7814BCC +S31508002B9019688022D2020A431A60196880225202F2 +S31508002BA00A431A60D4E701F0B9F90700794E80257F +S31508002BB0AD0233682B429ED001F0B0F9C01B6428E1 +S31508002BC0F7D9032031E0734B5B68C02252021340E9 +S31508002BD08022120293429CD16E4B1B689B0703D539 +S31508002BE00120E368012B20D16A490A682369DB00C2 +S31508002BF0F820824313430B6023681B074BD5E36910 +S31508002C00002B34D0634A536A01210B43536201F007 +S31508002C1085F907005F4E0225736A1D423BD101F014 +S31508002C207DF9C01B0228F7D9032003B00CBC9046D7 +S31508002C309946F0BD57490A682369DB00F8208243A4 +S31508002C4013430B60D8E7534A136801218B4313607B +S31508002C5001F064F907004F4E022533681D42CBD0B8 +S31508002C6001F05CF9C01B0228F7D90320DDE7494AC1 +S31508002C70536A01218B43536201F050F90700454E10 +S31508002C800225736A1D4206D001F048F9C01B0228C6 +S31508002C90F7D90320C9E723685B0700D487E03D4BD3 +S31508002CA0DB6900229046DB000BD43A4AD1698020C2 +S31508002CB040050143D161D36903400193019B012378 +S31508002CC09846374B1B68DB050ED5A368012B21D028 +S31508002CD0002B38D12F4B1A6A01218A431A621A6AC5 +S31508002CE003318A431A621AE02D4A116880235B0071 +S31508002CF00B43136001F012F90500294F8026760070 +S31508002D003B683342E1D101F009F9401B6428F7D941 +S31508002D1003208AE71F4A136A01210B431362A3683B +S31508002D20002B26D001F0FAF881461A4F02261D4DCF +S31508002D303B6A1E4238D101F0F1F84B46C01AA84248 +S31508002D40F6D9032071E7052B09D0124B1A6A01211F +S31508002D508A431A621A6A03318A431A62DFE70D4BFD +S31508002D601A6A04210A431A621A6A03390A431A625A +S31508002D70D5E701F0D3F88146064F0226094D3B6A8E +S31508002D801E4211D001F0CAF84B46C01AA842F6D91D +S31508002D9003204AE700100240FFFFFEFFFFFFFBFF8C +S31508002DA000700040881300004346012B3CD023687E +S31508002DB0DB0610D56369012B3CD005335BD17E4A0F +S31508002DC0536B04218B435363516BA369DB00F820D3 +S31508002DD081430B43536323689B0674D5764B5A6825 +S31508002DE00C2313400C2B65D0734B5A680C231340E5 +S31508002DF0082B58D0236A002B00D186E06E4A516B07 +S31508002E0080235B020B43536301F088F807006A4E80 +S31508002E1080256D02736B2B4255D101F07FF8C01BDC +S31508002E200228F7D9032000E7634AD36963490B40B0 +S31508002E30D361BCE7604B5A6B04210A435A635A6B49 +S31508002E4003390A435A6301F069F807005A4E022506 +S31508002E50736B1D4206D101F061F8C01B0228F7D931 +S31508002E600320E2E654494A6BA369DB00F820824353 +S31508002E7013434B63AFE7504B5A6B04210A435A631B +S31508002E805A6B03398A435A6301F048F807004A4ED9 +S31508002E900225736B1D429ED001F040F8C01B022824 +S31508002EA0F7D90320C1E6444B5B68C022520213409F +S31508002EB093429FD1404B5B6BDB0304D50120236A09 +S31508002EC0012B00D0B1E6636A0020002B00D1ACE6E6 +S31508002ED0394A51680C220A40082A6AD0022B29D09E +S31508002EE0354A136836490B40136001F017F8060097 +S31508002EF0314D8024A4042B68234256D001F00EF8E5 +S31508002F00801B0228F7D903208FE62B4A536B2D49DD +S31508002F100B40536301F002F80700274E80256D0227 +S31508002F20736B2B42CFD000F0F9FFC01B0228F7D9EC +S31508002F3003207AE6204A136821490B40136000F003 +S31508002F40EDFF07001C4E8025AD0433682B4206D0E2 +S31508002F5000F0E4FFC01B0228F7D9032065E6164BEC +S31508002F60DA6A0F218A43216B0A43DA625968E26AF0 +S31508002F70A06A0243144801400A435A60196880222D +S31508002F8052040A431A6000F0C9FF06000A4D80245D +S31508002F90A4042B68234206D100F0C0FF801B022838 +S31508002FA0F7D9032041E600203FE600203DE6012050 +S31508002FB03BE6012039E6C04600100240FFFFFFEF5E +S31508002FC0FFFFFFFEFFFFFEFFFF7FC2FF30B589B0A0 +S31508002FD004AA214B180032C832C2110002680A60DE +S31508002FE06A46103313CB13C21B6813601B4B5B680E +S31508002FF00C20184008280AD00C3843425841404251 +S31508003000174B1840174B9C46604409B030BD990CC5 +S315080030100F22114004A8445C1049C96A0A4069464F +S31508003020895CC0225202134080225202934208D081 +S31508003030C0225202934209D00A4801F029FA604395 +S31508003040E3E7084801F024FA6043DEE7064801F0A2 +S315080030501FFA6043D9E7C0465C46000800100240E4 +S31508003060005A620200127A00006CDC02F8B5CE46FD +S31508003070474680B504000D005F4B1A6801231340CC +S315080030808B420BD25C490B68012293432B430B609E +S315080030900B681A400120AA4200D0A7E023689B07C4 +S315080030A006D5564A5368F0218B43A1680B435360F3 +S315080030B02368DB0770D56268012A09D0022A2CD05A +S315080030C0032A30D04D4B1B689B0706D401208DE0A0 +S315080030D04A4B1B689B0300D48CE048494B68032085 +S315080030E0834313434B6000F019FF06006368012B06 +S315080030F01FD0022B2ED0032B3DD0404B98460C27D1 +S315080031003F4B994643465B681F4245D000F006FF91 +S31508003110801B4845F6D9032068E0384B1B689B019D +S31508003120DBD4012062E0354B5B6BDB03D5D4012091 +S315080031305CE0324B98460C27314B994643465B6810 +S315080031403B40042B28D000F0E9FE801B4845F5D902 +S3150800315003204BE0294B98460C27294B99464346B2 +S315080031605B683B40082B17D000F0D8FE801B48450B +S31508003170F5D903203AE0214B98460C27204B99466F +S3150800318043465B683B400C2B06D000F0C7FE801B0D +S315080031904845F5D9032029E0174B1A68012313403F +S315080031A0AB420AD914490B68012293432B430B609F +S315080031B00B681A400120AA4218D123685B0706D576 +S315080031C00E4A53680F490B40E1680B435360FFF7FB +S315080031D0FDFE0A4B5B681B061B0F0B4AD35CD840E7 +S315080031E00A4B1860002000F06FFE00200CBC9046C9 +S315080031F09946F8BD0120F9E7002002400010024078 +S3150800320088130000FFF8FFFF44460008C0000020AE +S31508003210014B18687047C046C0000020044B5B6825 +S315080032205B055B0F034AD35C034A1068D8407047B6 +S315080032300010024054460008C0000020704770B5D0 +S31508003240041E00D1A2E02023C35C002B1BD02268F9 +S31508003250136802218B43136000F060FE0600022506 +S3150800326023685A68154211D000F058FE801B0A28B8 +S31508003270F6D9626A80239B021343636220230522E0 +S31508003280E254012070BDFFF7D9FFE0E71A68012173 +S315080032900A431A6000F042FE0600012523685A68B0 +S315080032A015420ED100F03AFE801B0A28F6D9626A4A +S315080032B080239B021343636220230522E2540120E4 +S315080032C0E0E7227E012A3ED01A6880218A431A60E6 +S315080032D0637E012B3CD02268136840218B43136020 +S315080032E0A37E012B3AD02268136820218B431360F2 +S315080032F0E37E012B38D02268136810210B43136034 +S31508003300237F012B36D02268136808218B4313606C +S31508003310637F012B34D02268136804218B43136022 +S315080033202168A368E2681343226913436269134359 +S315080033306268013A1343CB6100236362203301229A +S31508003340E25400209EE71A6880210A431A60BFE704 +S315080033502268136840210B431360C1E7226813688B +S3150800336020210B431360C3E72268136810218B439F +S315080033701360C5E72268136808210B431360C7E783 +S315080033802268136804210B431360C9E7012079E713 +S3150800339030B52023C35C013B012B06D9426A802342 +S315080033A0DB0213434362012030BD03688024A40076 +S315080033B018590122104318511F204C692040824099 +S315080033C08725AD005859D44320405851C86900286C +S315080033D014D1103D585920405851C86805048888AA +S315080033E0054348694830C000C55088680504088800 +S315080033F0054348694830C00018184560C86901285F +S315080034001AD0886900282ED18125AD005859204048 +S315080034105851086900282CD18525AD005859044013 +S315080034205C51096A01292AD0802189005A5801204D +S3150800343082435A500020B7E78325AD0058591043F8 +S315080034405851086805048888054348694830C0000B +S31508003450C550886805048889054348694830C0000E +S3150800346018184560CDE78125AD00585910435851C5 +S31508003470CFE78524A400185910431851D1E78720AF +S31508003480800019580A431A50CEE770B50400202365 +S31508003490C35C012B06D0426A80231B031343436295 +S315080034A0012070BD1F330222C2540268136801212D +S315080034B08B43136000F032FD0600012523685B6824 +S315080034C01D420ED000F02AFD801B0A28F6D9626A32 +S315080034D080239B021343636220230522E2540120C2 +S315080034E0DFE7002363620020DBE770B52024045D74 +S315080034F0013C012C00D991E000290AD10468E4684E +S31508003500A40711D1426A80239B0313434362012017 +S315080035108AE004682469A40706D1426A80239B03CB +S315080035201343436201207FE00C001B342401056825 +S31508003530655904242C40946061D10C001B34240185 +S3150800354005686459640D14600C001B342401056871 +S315080035506559AD07ED0FD56005682D196E680F25FD +S315080035603540156105682D196D682D042D0E956178 +S315080035700568AC4664446468240C54610A0104680E +S31508003580A418B934FF3424681C700468A418B93424 +S31508003590FF342468240A5C700468A418B934FF341C +S315080035A02468240C9C700468A418B934FF34246871 +S315080035B0240EDC700468A418BD34FF3424681C711A +S315080035C00468A418BD34FF342468240A5C710468AE +S315080035D0A418BD34FF342468240C9C710468A446DE +S315080035E06244BD32FF321268120EDA7100290ED11A +S315080035F00268D36820310B43D360002014E00C0026 +S315080036001B34240105686459E40854609CE7026881 +S31508003610136920210B431361002005E0426A8023C9 +S31508003620DB0213434362012070BD000070B5002819 +S3150800363014DB8408A400144B9C466444C026B600D8 +S31508003640A55903221040C000FF231A008240954363 +S3150800365089010B4083401D43A55170BDC0B20F229E +S315080036600240083A92089200084BD318DD690324F1 +S315080036702040C000FF2214008440A54389010A4067 +S3150800368082402A43DA61E8E700E100E000ED00E065 +S3150800369001380A4B98420FD8094A50600948036A0C +S315080036A01B021B0AC02109060B4303620023936011 +S315080036B007331360002070470120FCE7FFFFFF0077 +S315080036C010E000E000ED00E0042805D0054A136884 +S315080036D004218B4313607047024A136804210B4385 +S315080036E01360F8E710E000E0704710B5FFF7FCFF3D +S315080036F010BD0000F0B5DE4657464E464546E0B5D5 +S3150800370085B00A68002A00D1BDE000230124A4463A +S315080037100F34A2460D3CA14680246405A3465D4CA1 +S315080037200419651EAC41043401943AE0DC08A4008F +S315080037300419276A07251D40AD000F22AA409743A2 +S315080037400A69AA4015003D43256234E00025B540C4 +S315080037503D43A560504C2468009AD5434A68D20375 +S3150800376000D584E02C404C4E346074684A68920355 +S3150800377000D57FE02C40484E7460B4684A68D2028F +S315080037807BD42C40444EB460F4684A68920277D4DD +S3150800379022002A40404CE26001330A681400DC40EB +S315080037A071D066469E4032400092F5D04C68554628 +S315080037B0AC43022CBAD004685F004D46BD40ED43C9 +S315080037C02C40A0464C684A461440BC404246144326 +S315080037D004604C6852469443013C012C11D8846815 +S315080037E02C40A046CC68BC404246144384604468DA +S315080037F0B44326004A681409624614409C40344380 +S315080038004460C4682C408D68BD402543C5604A683D +S315080038105C462242C0D0214CA56962461543A56183 +S31508003820A46914400394039C9C08A4001C4A90466F +S315080038304444A5684E461E40B6000F27B740BD4310 +S315080038402F009025ED05A84200D17FE7154DA84227 +S3150800385007D0154DA84206D0144DA84205D0019DA3 +S3150800386075E7654673E7022571E74D466FE7009AE7 +S31508003870144378E7009A14437DE7009A144381E7D6 +S31508003880009A224386E705B03CBC90469946A24674 +S31508003890AB46F0BD00F0FFB700040140001002403F +S315080038A0000001400004004800080048000C0048D9 +S315080038B0002A01D0816170478162FCE770470000E9 +S315080038C070B5040001680A68836800690343606983 +S315080038D00343E06903438A48024013430B602268A6 +S315080038E0536888490B40E1680B43536021688A682E +S315080038F0A369206A03438448024013438B60256802 +S31508003900824B9D4222D0824B9D4235D0814B9D42AF +S3150800391000D172E0804B9D4200D199E07F4B9D42D9 +S3150800392000D195E07E4B9D4200D191E07D4B9D42B2 +S3150800393000D18DE07C4B9D4200D189E080231B029B +S31508003940E2699A4200D17DE0012055E0774B1A6B77 +S3150800395003231340012B00D1AEE0002B33D0022BFA +S3150800396000D1BBE0032B1BD080231B02E2699A42DD +S3150800397000D16AE001203FE06C4B1B6BC02292022B +S31508003980134080225202934200D195E019D9802231 +S315080039909202934200D1A1E0C02292029342E3D15F +S315080039A080231B02E2699A423ED061684808604B50 +S315080039B09C46604400F06CFD0004000CE8600020A2 +S315080039C01AE0002BD0D180231B02E2699A4244D127 +S315080039D0FFF724FC400063685B08C018616800F0C4 +S315080039E057FD83B200200F22190091430A0021686F +S315080039F01B075B0F1343CB6070BD4C4B1B6BC02280 +S31508003A00120313408022D202934233D017D9802260 +S31508003A10120393423FD0C02212039342A4D18023BB +S31508003A201B02E2699A42C0D163685808414B9C461A +S31508003A306044616800F02CFD83B20020D3E7002BB8 +S31508003A40C1D091E701200023CDE701200023CAE772 +S31508003A5080231B02E2699A42BAD0FFF7DFFB61684E +S31508003A6024684B08181800F013FD0004000CE060E9 +S31508003A700020C1E780231B02E2699A4221D1FFF7A1 +S31508003A80A5FA400063685B08C018616800F000FD8D +S31508003A9083B20020A7E780231B02E2699A4222D15B +S31508003AA06368580880235B029C466044616800F09E +S31508003AB0EFFC83B2002096E780231B02E2699A4254 +S31508003AC0DDD0FFF783FA616824684B08181800F000 +S31508003AD0DFFC0004000CE06000208DE780231B0259 +S31508003AE0E2699A42DCD06168480880231B029C463A +S31508003AF0604400F0CDFC0004000CE86000207BE781 +S31508003B00F369FFEFFFCFFFFFFFF4FFFF0038014027 +S31508003B100044004000480040004C0040005000406F +S31508003B200014014000180140001C0140001002402A +S31508003B3000127A000024F400436ADB0706D50268FF +S31508003B4053682C490B40816A0B435360436A9B07B1 +S31508003B5006D50268536828490B40C16A0B4353606F +S31508003B60436A5B0706D50268536824490B40016B14 +S31508003B700B435360436A1B0706D5026853682049FE +S31508003B800B40416B0B435360436ADB0606D502685C +S31508003B9093681C490B40816B0B439360436A9B06F1 +S31508003BA006D50268936818490B40C16B0B439360AE +S31508003BB0436A5B060BD50268536814490B40016CCF +S31508003BC00B43536080235B03026C9A420AD0436A14 +S31508003BD01B0606D5026853680D490B40816C0B43DA +S31508003BE053607047026853680A490B40416C0B439F +S31508003BF05360ECE7FFFFFDFFFFFFFEFFFFFFFBFF44 +S31508003C00FF7FFFFFFFEFFFFFFFDFFFFFFFFFEFFF76 +S31508003C10FFFFF7FFFFFF9FFFF0B5C64600B5070099 +S31508003C200C0016009846069D3A68D36923401B1B6C +S31508003C3059424B41B3421ED16B1CF6D0002D05D01C +S31508003C4000F06CF94346C01AA842EDD93A681368E1 +S31508003C500B490B4013603A689368A331FF318B43D5 +S31508003C60936020236922BB540132BB544833002297 +S31508003C70FA54032000E0002004BC9046F0BDC0467C +S31508003C805FFEFFFFF0B5D646474680B585B004000F +S31508003C900D00170098466A23C35C202B00D085E0E8 +S31508003CA0002900D188E0002A00D187E080235B0143 +S31508003CB082689A4221D06823E35C012B00D17FE019 +S31508003CC068230122E2540023E3666A332132E25470 +S31508003CD000F024F903905823E7520233E752A36809 +S31508003CE08022520193420FD0002B1CD12369002B4E +S31508003CF015D15C33FF22E25219E00369002BDAD1B1 +S31508003D00CB07D8D5012052E02369002B03D15C33B9 +S31508003D102D4AE2520BE05C23FF22E25207E05C23C5 +S31508003D207F22E25203E080225205934206D05C23AA +S31508003D30E35A9A465A278026760110E02369002B13 +S31508003D4003D15C337F22E252F1E75C233F22E25241 +S31508003D50EDE723689B8C524613402B700135E35BD5 +S31508003D609BB2002B1AD0E35B013B9BB2E35343465D +S31508003D700093039B002220212000FFF74DFF002817 +S31508003D8020D1A368B342E4D12369002BE1D123688B +S31508003D909B8C524613402B800235E0E76A3320227B +S31508003DA0E254023B0022E254002000E0022005B063 +S31508003DB00CBC90469A46F0BD0120F8E70120F6E7CC +S31508003DC00220F4E70320F2E7FF01000030B583B0D4 +S31508003DD004000023C36600F0A1F8050023681A4A08 +S31508003DE0934205D0194A934202D0194A934206D102 +S31508003DF01B681B070ED423681B685B0717D4202390 +S31508003E006922A3540132A35448330022E254002005 +S31508003E1003B030BD80210F4B00932B00002289038D +S31508003E202000FFF7F9FE0028E5D00320F0E78021FF +S31508003E30084B00932B000022C9032000FFF7ECFE75 +S31508003E400028DCD00320E3E70038014000440040A6 +S31508003E5000480040FFFFFF0110B5041E30D069235B +S31508003E60C35C002B22D069232422E25422681368FB +S31508003E7001218B4313602000FFF722FD012814D08F +S31508003E80636A002B18D1226853680E490B405360A9 +S31508003E90226893682A218B4393602268136829391C +S31508003EA00B4313602000FFF791FF10BD6833002213 +S31508003EB0C254FFF703FDD6E72000FFF73DFEE2E711 +S31508003EC00120F2E7FFB7FFFF10B50400FFF7A0F9DE +S31508003ED0FA21890000F0DCFAFFF7DAFB012000225C +S31508003EE021004042FFF7A2FB002010BD10B5064A8C +S31508003EF0136810210B4313600020FFF7E5FF00F05D +S31508003F0051F9002010BDC04600200240024A13683D +S31508003F10013313607047C04630020020014B186811 +S31508003F207047C04630020020F0B5CE46474680B5F9 +S31508003F3083B004000368DB0336D54E4BDB690025E6 +S31508003F40DB000AD44B4AD169802040050143D16180 +S31508003F50D36903400193019B0135474B1B68DB0579 +S31508003F605AD5444B1B6AC0229200134013D061688D +S31508003F700A409A420FD03F4B186A404A02401E6ACE +S31508003F808021490231431962196A3D4E314019624E +S31508003F901A62C30757D4374A136A38490B4061680F +S31508003FA00B431362012D60D02368DB0706D5314A1F +S31508003FB0136B03218B43A1680B43136323689B0789 +S31508003FC006D52C4A136B2F490B40E1680B43136344 +S31508003FD023685B0306D5274A136B2B490B402169D7 +S31508003FE00B43136323689B0606D5224A136B1021DD +S31508003FF08B4361690B431363002023685B0506D571 +S315080040001C4A136B40218B43A1690B43136303B00E +S315080040100CBC90469946F0BD174A116880235B0090 +S315080040200B431360FFF77AFF8046134F802676000E +S315080040303B68334295D1FFF771FF4346C01A64289F +S31508004040F6D90320E3E7FFF769FF8146094F022601 +S315080040500E4B98463B6A1E429DD1FFF75FFF4B46C3 +S31508004060C01A4045F6D90320D1E7D36908490B4061 +S31508004070D36199E70010024000700040FFFCFFFF83 +S31508004080FFFFFEFFFFFFFCFFFFFFF3FF88130000A3 +S31508004090FFFFFFEFFEE710B5FFF7BAF8FA21890030 +S315080040A000F0F6F9FFF7F4FA0420FFF70DFB0120FC +S315080040B0002200214042FFF7B9FA10BD10B5FFF7FC +S315080040C02DFF10BD10B5FFF721FFFFF70EFB10BD42 +S315080040D010B5902000222021C005FFF7E9FB10BD8E +S315080040E010B5FFF7EBFF04000F4B1B68C31AF42249 +S315080040F0FF3293420ED90D4B1B78002B0BD10B4B7D +S31508004100F33AFF3A1A7090202021C005FFF7D0FB3A +S31508004110054B1C6010BD054B00221A70902020210B +S31508004120C005FFF7C5FBF3E74C0100204801002056 +S3150800413000B599B0FFF7DAFE01230B9305220C921E +S31508004140033A1492802252021592A02292031692E2 +S3150800415017930BA8FEF79AFC002800D0FEE7072362 +S315080041600093053B019300230293039301216846BC +S31508004170FEF77CFF002800D0FEE702230493002305 +S31508004180079304A8FFF7D0FE002800D0FEE7FFF744 +S315080041909FFFFFF780FF00F06FF8FFF7A1FF00F021 +S315080041A007F9FAE7F0B58BB0314B9A6901252A432E +S315080041B09A619A692A400092009A59698022920265 +S315080041C0114359615969114001910199586980242F +S315080041D0E402204358615969214002910299D9693C +S315080041E01143D961D9690A400392039ADA69802191 +S315080041F089040A43DA61DB690B400493049B0520B2 +S31508004200002200214042FFF711FA02200022002175 +S315080042104042FFF70BFA0120002200214042FFF737 +S3150800422005FA2023059306950024079408949027F9 +S31508004230FF0505A93800FFF75DFA0C23059302264A +S31508004240069607940894099505A93800FFF752FAC7 +S31508004250C0239B000593069607940323089301330E +S31508004260099305A90348FFF745FA0BB0F0BDC04608 +S315080042700010024000040048F0B5DE464F464646A8 +S31508004280C0B58CB03B483C4B0360E1231B0243603E +S3150800429000238360C36003610C2242618361C361AA +S315080042A003624362FFF7D8FDFEF7B8FFFA218900DB +S315080042B000F0EEF80190314D24239B46AB440023D1 +S315080042C099462F4B984602E002355D4519D02F785E +S315080042D06E78BA1901325401A41AA400A418A400CD +S315080042E02100019800F05AF90029EDD12100019822 +S315080042F000F0CEF883B29946013B9BB24345E3D81A +S3150800430001E0002600271F4C1F4B23600025257659 +S315080043106576A57601239846E37625776577A560C1 +S31508004320E560013F3F042761013E360566614B465D +S3150800433063602000FEF783FF0795089543460993B7 +S31508004340124B02930395124B049304230593069587 +S3150800435043460A930D330B9302A92000FFF718F87A +S315080043602000FFF792F80CB01CBC90469946A3466D +S31508004370F0BDC04678010020004400407C46000895 +S31508004380FF0300005001002000640040E0CC00005C +S31508004390E0FF0000BFF34F8F034B044ADA60BFF318 +S315080043A04F8FC046FDE7C04600ED00E00400FA0561 +S315080043B000B58BB02F4B1B78002B24D101222E4938 +S315080043C02E48FFF75FFC00280DD001AB03AA002199 +S315080043D02B48FFF78AF8002803D12A4B039A9A42FA +S315080043E03CD00BB000BD244B1B78013B3F2BECD8CF +S315080043F0FFF764FE244B18601E4B01221A70234BEC +S3150800440000221A70E1E7214B1B7801331A49C918B3 +S31508004410002301221948FFF735FC002813D11B4A4F +S3150800442013780133DBB21370134A12789A42CCD14F +S31508004430104A00211170104A5278FF2AC5D1022B62 +S31508004440C3D1FFF7A7FFFFF739FE0F4B1B6864338D +S315080044509842BAD9074B00221A70B6E7059B002B7B +S31508004460BFD101AB1B78FF2BBBD1079B022BB8D161 +S31508004470FFF790FF29020020E801002078010020BC +S3150800448050010020670600002C0200202A020020A6 +S31508004490002243088B4274D303098B425FD3030A75 +S315080044A08B4244D3030B8B4228D3030C8B420DD388 +S315080044B0FF22090212BA030C8B4202D31212090216 +S315080044C065D0030B8B4219D300E0090AC30B8B4254 +S315080044D001D3CB03C01A5241830B8B4201D38B0302 +S315080044E0C01A5241430B8B4201D34B03C01A5241A7 +S315080044F0030B8B4201D30B03C01A5241C30A8B42EA +S3150800450001D3CB02C01A5241830A8B4201D38B02D4 +S31508004510C01A5241430A8B4201D34B02C01A524178 +S31508004520030A8B4201D30B02C01A5241CDD2C309EA +S315080045308B4201D3CB01C01A524183098B4201D366 +S315080045408B01C01A524143098B4201D34B01C01A51 +S31508004550524103098B4201D30B01C01A5241C308C9 +S315080045608B4201D3CB00C01A524183088B4201D338 +S315080045708B00C01A524143088B4201D34B00C01A24 +S315080045805241411A00D20146524110467047FFE790 +S3150800459001B5002000F006F802BDC0460029F7D094 +S315080045A076E770477047C046084B10B50400002BE5 +S315080045B002D0002100E000BF054B1868836A002B73 +S315080045C000D098472000FFF765FDC04600000000B0 +S315080045D0A046000870B500260C4D0D4C641BA410AF +S315080045E0A64209D1002600F021F80A4D0A4C641BA0 +S315080045F0A410A64205D170BDB300EB589847013602 +S31508004600EEE7B300EB5898470136F2E7240100209D +S31508004610240100202401002028010020030012188C +S31508004620934200D1704719700133F9E7F8B5C046CF +S31508004630F8BC08BC9E467047F8B5C046F8BC08BC2E +S315080046409E467047000000000000000001020304B7 +S315080046500607080900000000010203040203040516 +S31508004660060708090A0B0C0D0E0F101001020304A9 +S3150800467005060708090A0B0C0D0E0F10050206029F +S31508004680060307030803090309040A040B040C04B8 +S315080046900C050D050E050F050F0610061007100868 +S30D080046A0C40000200000000020 +S30D080046A864E2FF7F0100000037 +S315080046B000127A0000000000000000000000000060 +S315080046C000000000000000000000000000000000DC +S315080046D000000000000000000000000000000000CC +S315080046E000000000000000000000000000000000BC +S315080046F000000000000000000000000000000000AC +S31508004700000000000000000000000000000000009B +S3110800471000000000ED280008C52800087D S70508002800CA diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/boot.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/boot.c index 109e45fe..2f8356e0 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/boot.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/boot.c @@ -127,10 +127,13 @@ static void BootComRs232Init(void) rs232Handle.Instance = USART2; rs232Handle.Init.BaudRate = BOOT_COM_RS232_BAUDRATE; rs232Handle.Init.WordLength = UART_WORDLENGTH_8B; - rs232Handle.Init.StopBits = UART_STOPBITS_1; - rs232Handle.Init.Parity = UART_PARITY_NONE; - rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.StopBits = UART_STOPBITS_1; + rs232Handle.Init.Parity = UART_PARITY_NONE; + rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + rs232Handle.Init.OverSampling = UART_OVERSAMPLING_16; + rs232Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + rs232Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; /* Initialize the UART peripheral. */ HAL_UART_Init(&rs232Handle); } /*** end of BootComRs232Init ***/ @@ -285,9 +288,6 @@ static const tCanBusTiming canTiming[] = /** \brief CAN handle to be used in API calls. */ static CAN_HandleTypeDef canHandle; -/** \brief Message buffer for receiving CAN messages. */ -static CanRxMsgTypeDef canRxMessage; - /************************************************************************************//** ** \brief Search algorithm to match the desired baudrate to a possible bus @@ -341,7 +341,7 @@ static void BootComCanInit(void) { unsigned short prescaler = 0; unsigned char tseg1 = 0, tseg2 = 0; - CAN_FilterConfTypeDef filterConfig; + CAN_FilterTypeDef filterConfig; unsigned long rxMsgId = BOOT_COM_CAN_RX_MSG_ID; unsigned long rxFilterId, rxFilterMask; @@ -350,18 +350,16 @@ static void BootComCanInit(void) /* set the CAN controller configuration. */ canHandle.Instance = CAN; - canHandle.pTxMsg = NULL; - canHandle.pRxMsg = &canRxMessage; - canHandle.Init.TTCM = DISABLE; - canHandle.Init.ABOM = DISABLE; - canHandle.Init.AWUM = DISABLE; - canHandle.Init.NART = DISABLE; - canHandle.Init.RFLM = DISABLE; - canHandle.Init.TXFP = DISABLE; + canHandle.Init.TimeTriggeredMode = DISABLE; + canHandle.Init.AutoBusOff = DISABLE; + canHandle.Init.AutoWakeUp = DISABLE; + canHandle.Init.AutoRetransmission = ENABLE; + canHandle.Init.ReceiveFifoLocked = DISABLE; + canHandle.Init.TransmitFifoPriority = DISABLE; canHandle.Init.Mode = CAN_MODE_NORMAL; - canHandle.Init.SJW = CAN_SJW_1TQ; - canHandle.Init.BS1 = ((unsigned long)tseg1 - 1) << CAN_BTR_TS1_Pos; - canHandle.Init.BS2 = ((unsigned long)tseg2 - 1) << CAN_BTR_TS2_Pos; + canHandle.Init.SyncJumpWidth = CAN_SJW_1TQ; + canHandle.Init.TimeSeg1 = ((unsigned long)tseg1 - 1) << CAN_BTR_TS1_Pos; + canHandle.Init.TimeSeg2 = ((unsigned long)tseg2 - 1) << CAN_BTR_TS2_Pos; canHandle.Init.Prescaler = prescaler; /* initialize the CAN controller. this only fails if the CAN controller hardware is * faulty. no need to evaluate the return value as there is nothing we can do about @@ -386,20 +384,20 @@ static void BootComCanInit(void) /* configure the reception filter. note that the implementation of this function * always returns HAL_OK, so no need to evaluate the return value. */ - filterConfig.FilterNumber = 0; + filterConfig.FilterBank = 0; filterConfig.FilterMode = CAN_FILTERMODE_IDMASK; filterConfig.FilterScale = CAN_FILTERSCALE_32BIT; filterConfig.FilterIdHigh = (rxFilterId >> 16) & 0x0000FFFFu; filterConfig.FilterIdLow = rxFilterId & 0x0000FFFFu; filterConfig.FilterMaskIdHigh = (rxFilterMask >> 16) & 0x0000FFFFu; filterConfig.FilterMaskIdLow = rxFilterMask & 0x0000FFFFu; - filterConfig.FilterFIFOAssignment = 0; + filterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; filterConfig.FilterActivation = ENABLE; - /* the bank number is don't care for STM32F3 devices as it only supports one CAN - * controller. - */ - filterConfig.BankNumber = 14; + filterConfig.SlaveStartFilterBank = 14; (void)HAL_CAN_ConfigFilter(&canHandle, &filterConfig); + /* start the CAN peripheral. no need to evaluate the return value as there is nothing + * we can do about a faulty CAN controller. */ + (void)HAL_CAN_Start(&canHandle); } /*** end of BootComCanInit ***/ @@ -413,16 +411,18 @@ static void BootComCanCheckActivationRequest(void) { unsigned long rxMsgId = BOOT_COM_CAN_RX_MSG_ID; unsigned char packetIdMatches = 0; + CAN_RxHeaderTypeDef rxMsgHeader; + unsigned char rxMsgData[8]; /* poll for received CAN messages that await processing. */ - if (HAL_CAN_Receive(&canHandle, CAN_FIFO0, 0) == HAL_OK) + if (HAL_CAN_GetRxMessage(&canHandle, CAN_RX_FIFO0, &rxMsgHeader, rxMsgData) == HAL_OK) { /* check if this message has the configured CAN packet identifier. */ if ((rxMsgId & 0x80000000) == 0) { /* was an 11-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->StdId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_STD) ) + if ( (rxMsgHeader.StdId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_STD) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -433,8 +433,8 @@ static void BootComCanCheckActivationRequest(void) /* negate the ID-type bit */ rxMsgId &= ~0x80000000; /* was an 29-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->ExtId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_EXT) ) + if ( (rxMsgHeader.ExtId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_EXT) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -445,7 +445,7 @@ static void BootComCanCheckActivationRequest(void) if (packetIdMatches == 1) { /* check if this was an XCP CONNECT command */ - if ((canHandle.pRxMsg->Data[0] == 0xff) && (canHandle.pRxMsg->DLC == 2)) + if ((rxMsgData[0] == 0xff) && (rxMsgHeader.DLC == 2)) { /* connection request received so start the bootloader */ BootActivate(); diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/stm32f0xx_hal_conf.h index 70e83cdd..2c1ab465 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_GCC/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/bin/openblt_stm32f091.out b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/bin/openblt_stm32f091.out index 185e2b8d71e62d83f510d77410f457a67616457a..ca6a497eda12e37c87c916ca58ab2cdb2d048deb 100644 GIT binary patch literal 310888 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 literal 319432 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 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/bin/openblt_stm32f091.srec b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/bin/openblt_stm32f091.srec index 19bd5227..e074ca1a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/bin/openblt_stm32f091.srec +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/bin/openblt_stm32f091.srec @@ -1,593 +1,576 @@ S01900006F70656E626C745F73746D3332663039312E73726563FF -S31508000000080500205123000857070008AF07000815 +S31508000000080A0020292200087F050008D7050008ED S3150800001000000000000000000000000000000000D2 -S31508000020000000000000000000000000CF0C0008DF -S315080000300000000000000000970F0008AD07000848 -S31508000040BF1000081B110008672000087324000869 -S315080000507F240008A9240008AB240008AD24000862 -S31508000060AF240008B1240008B3240008B52400080A -S31508000070B7240008B9240008BB240008BD240008DA -S31508000080BF240008C1240008C3240008C5240008AA -S31508000090C7240008C9240008CB240008CD2400087A -S315080000A0CF240008D1240008D3240008D52400084A -S315080000B0D7240008D9240008DB240008F0B583B04B -S315080000C0040000250195002C01D10120FEBD260063 -S315080000D03C367078002804D128003070200000F0E3 -S315080000E039FB022070702068016802229143016082 -S315080000F02068012701683943016000F053FB00902E -S3150800010020684168394006D100F04CFB0099401A36 -S315080001100B28F5D367E0416839406CD0A1690129FD -S31508000120016803D180220A43026002E080229143DB -S3150800013001602068E1690129016803D140220A4368 -S31508000140026002E04022914301602068216A012989 -S31508000150016803D120220A43026002E0202291436B -S3150800016001602068616A0129016803D110220A43E7 -S31508000170026002E01022914301602068A16A012909 -S31508000180016803D108220A43026002E0082291436B -S3150800019001602068E16A0129016803D104220A4343 -S315080001A0026002E0042291430160A068E16801430D -S315080001B020690843616901436068401E0843216855 -S315080001C0C861206801683A469143016000F0EAFA7E -S315080001D0009020684168394009D000F0E3FA009998 -S315080001E0401A0B28F5D3032070703570FEBD4068A1 -S315080001F0384000D101970198012803D175607770BE -S315080002002846FEBD042070703846FEBDF0B40123B2 -S315080002104C691A00A24004685D0264192668C44D38 -S3150800022035404E6A36022E4333432360D34304686F -S315080002308725AD00641925681D402560CC69002C0A -S315080002401ED104688325AD00641925681D40256004 -S3150800025004684D69ED0064199025AD00CE68360432 -S315080002604F68BFB23743675104684D69ED0064199A -S315080002709125AD008E6836040F68BFB237436751C3 -S31508000280CC69012C1ED104688325AD006419256844 -S315080002901543256004684D69ED0064199025AD0085 -S315080002A00E6836044F68BFB23743675104684D6914 -S315080002B0ED0064199125AD008E683604CF68BFB28B -S315080002C03743675104688125AD0064198D69002D8F -S315080002D0256802D11D40256001E0154325600468A4 -S315080002E08525AD0064190D69002D03D125682B40BD -S315080002F0236002E0236813432360096A012906D1B3 -S31508000300016887239B00C9180B681A430A600068AE -S31508000310802189004018016801229143016000206C -S31508000320F0BC7047F2B582B0040021688020C00492 -S315080003308A68024006D18A68120103D48968C9000E -S3150800034000D4EEE027003C373978012901D1022094 -S31508000350FEBD0125290039707978222904D0322971 -S3150800036005D0622906D008E04221797007E05221BB -S31508000370797004E07221797001E0122179702168A0 -S315080003808A68104001D0002605E08868000101D57A -S315080003902E0000E0022630010918C02252008918F2 -S315080003A00A682A400A60216B22681218C0235B007B -S315080003B0D21800928A68002A009A126807D10B6838 -S315080003C05B05C96819431143009A11600AE094460F -S315080003D04A68D3008A681A43C968114362461143BA -S315080003E0009A1160216B0A7C1207120F0A612168B4 -S315080003F00918C222520089180A680F239A430A600C -S3150800040021680918C222520089180A68236B1B69D9 -S3150800041013430B60226BD17D0B06917D09041943AA -S31508000420537D1B020B43117D194322681218C423FE -S315080004305B00D150226BD17E0B06917E09041943CD -S31508000440537E1B020B43117E194322681218C623DA -S315080004505B00D15021680818C0214900401801687E -S315080004602943016000F09EF900902068002E08D10B -S31508000470304980680840884201D1280014E00020ED -S3150800048012E0012E08D12C4980680840884201D123 -S31508000490280009E0002007E02849806808408842CB -S315080004A001D1280000E00020002825D1029800216B -S315080004B0C9438842D9D0002806D000F073F90099BC -S315080004C0401A02998142D0D2032078702068002E03 -S315080004D004D1816880220A43826009E0012E81687E -S315080004E003D1EA030A43826002E0EA050A4382600E -S315080004F0002038700320FEBD7878422804D05228A0 -S3150800050005D0722806D008E02220787006E032204E -S31508000510787003E06220787000E07D700020387003 -S31508000520FEBD042021003C3148700120FEBD0000BC -S31508000530FFC0FFFF010000040001000800000110D1 -S31508000540F6B583B0040025003C352878012801D18A -S315080005500220FDE00127380028706846007B002845 -S315080005600BD16878222819D06878422816D068787E -S31508000570622813D06878722810D06846007B0090ED -S3150800058001280FD16878322808D06878522805D013 -S315080005906878622802D06878722803D1002028700B -S315080005A00220D5E06846007B002868780CD112281E -S315080005B004D0322812D0522813D002E042206870A4 -S315080005C014E02220687011E0122804D0222805D0F1 -S315080005D0422806D008E05220687007E0622068705A -S315080005E004E07220687001E03220687000F0DAF8E2 -S315080005F00190032620686946097B002902D1C16853 -S31508000600314001E001693140002912D104980021E6 -S31508000610C9438842EED0002806D000F0C3F80199F5 -S31508000620401A04998142E5D26E700020287030463F -S315080006308EE06946097B002901D1616B00E0A16B58 -S31508000640009A12018018D8235B00C058042318406A -S31508000650886023689B18D82676009B190028186896 -S3150800066002D1400D086001E0C00848602068801883 -S315080006703346C05840083840C860206880181B1D9B -S31508000680C0580007000F086120688018C058000A83 -S31508000690C0B2C8616846007B0862206880181B1DC6 -S315080006A0C058087520688018C058000A4875206820 -S315080006B08018C058000C887520688018C058000E2D -S315080006C0C875206880181B1DC058087620688018D1 -S315080006D0C058000A487620688018C058000C8876EA -S315080006E0206880181A468058000EC876206820218F -S315080006F06A46127B002A03D1C2681143C16002E030 -S315080007000269114301616846007B002868780CD1AC -S31508000710422811D0622802D0722803D015E0322070 -S31508000720687013E05220687010E0522804D06228DE -S3150800073005D0722806D008E01220687006E022204C -S31508000740687003E04220687000E06F70002028702F -S3150800075005B0F0BD7047FEE780B500F00AF80E4810 -S315080007600E49416000218160052202600C48016043 -S3150800077001BD002008490860704707480068C003A3 -S3150800078003D507480168491C0160704780B5FFF723 -S31508000790F4FF0348006802BD10E000E07FBB0000DC -S315080007A02C0A002080B5FFF7F1FF02BD7047FEE76F -S315080007B00020C0436249086062490860704770B506 -S315080007C004000D0016006048001B691E88420AD303 -S315080007D0200000F06FF9FF2805D06019401E00F0D0 -S315080007E069F9FF2801D1002070BD600A4002574907 -S315080007F0884206D12B0032002100524800F0AAF8A0 -S3150800080070BD2B00320021004D4800F0A3F870BDE2 -S3150800081070B504000E004C48001B711E88420BD3AD -S31508000820200000F047F90500A019401E00F042F923 -S31508000830FF2D01D0FF2801D1002070BD010028003E -S3150800084000F0EDF870BD80B53E4801680022D2433D -S31508000850914201D1012002BD416882688918C268A7 -S315080008608918026989184269891882698918C069CC -S315080008700818C143491C00916A4604213448FFF709 -S315080008809EFF02BD31480168426889188268891846 -S31508000890C26889180269891842698918806908181E -S315080008A02B4909684018401E8041C00F704710B593 -S315080008B00024E44323480168A14203D000F085F8E8 -S315080008C0002807D01E480168A14205D000F07DF82F -S315080008D0002801D1002010BD012010BD1B4870471B -S315080008E080B5CA0501D0002002BD02688A4201D13E -S315080008F0012002BD016080229200001D00F0CFF9A0 -S31508000900012002BD38B505000C000E48854208D105 -S315080009100B4D21002800FFF7E3FF00280DD100202A -S3150800092032BD0A498C4201D10500F2E7280000F0E1 -S315080009304CF80028EDD1002032BD280032BD000059 -S31508000940080500200C070020FFFF03080028000800 -S31508000950C0280008F4B582B004000D001F00680A1C -S315080009604002009020680021C943884205D10099B9 -S315080009702000FFF7B5FF00281CD0206800998842A0 -S3150800098004D02000FFF7BEFF040013D02068281A01 -S315080009902018061D029D00F096F980208000211D72 -S315080009A0711A814209D3009909182000FFF7AAFF96 -S315080009B0040001D10020FEBD261D28783070761C63 -S315080009C06D1C7F1EE7D10120FEBDF8B50700012585 -S315080009D0386800F06FF8FF2801D10020F2BD00F05A -S315080009E0B0F9002400E0641C802C14D2A0003968F9 -S315080009F0091800913818466800F065F93200002396 -S31508000A000099022000F064F9002803D100980068D4 -S31508000A10B042E8D0002500F0A0F92800F2BDF2B5F2 -S31508000A2086B001252C00002704976946097E020036 -S31508000A30914200D23C000100052903D36946097E8C -S31508000A40172900D33C00012C30D100F04DF80600E0 -S31508000A506846007E00F048F8010000916846007E6E -S31508000A6000F05AF800990818401E801B401CC00A5E -S31508000A7080B2009001970296039500F062F93D0056 -S31508000A8005E0029880210901401802906D1CADB25C -S31508000A900098854208DA00F016F904A901A800F0C2 -S31508000AA0C5F90028EDD03C0000F057F9200007B042 -S31508000AB0F0BD000038B50400002501E06D1CEDB25C -S31508000AC0122D0FD200F0FFF81FA0690049198900FE -S31508000AD0401801688C42F1D3426889188C42EDD2DD -S31508000AE0007A32BDFF2032BD38B50400002500E08B -S31508000AF06D1CEDB2122D0CD200F0E5F812A06900BB -S31508000B00491989004018017A22009142F0D10068FB -S31508000B1032BD0020C04332BD38B50400002500E0D0 -S31508000B206D1CEDB2122D0CD200F0CDF806A06900AE -S31508000B30491989004018017A22009142F0D140688B -S31508000B4032BD002032BD0000002800080008000061 -S31508000B50050000000030000800080000060000003C -S31508000B6000380008000800000700000000400008E0 -S31508000B7000080000080000000048000800080000FF -S31508000B800900000000500008000800000A000000E4 -S31508000B9000580008000800000B000000006000086C -S31508000BA0000800000C0000000068000800080000AB -S31508000BB00D00000000700008000800000E0000008C -S31508000BC000780008000800000F00000000800008F8 -S31508000BD000800000100000000000010800800000EE -S31508000BE011000000008001080080000012000000CB -S31508000BF000000208008000001300000000800208C0 -S31508000C0000800000140000000000030800800000B7 -S31508000C101500000000800308008000001600000090 -S31508000C2081B008490A6802430A60096808400090CA -S31508000C30009801B0704704490A6803239A43104391 -S31508000C4008607047181002400000014080B500F0A7 -S31508000C505FF901BD10B500F06BF900281ED000F051 -S31508000C6081F900281AD000F0C2F9FFF782FD00F0DA -S31508000C7004FA0120FFF7D4FF00F05EF9C022010054 -S31508000C808020800500F00BF80320FFF7D4FF00F062 -S31508000C9053F9001D046800F03DF9A04710BD70B572 -S31508000CA014000D00060005E0287830706D1C761CCF -S31508000CB000F009F82000441E0004F5D170BD80B587 -S31508000CC000F060F901BD80B500F061F901BDFEE7ED -S31508000CD0F2B50CB404002B4E307E012801D1022057 -S31508000CE0FEBD0125280030763B4F380000F04CF851 -S31508000CF0010023D1012C04D0022C01D1022500E0E9 -S31508000D000425002401E0641CE4B2AC4216DA684605 -S31508000D1003C82200120100F0C3F9010089B2029843 -S31508000D206200801800F020F8380000F02DF83949E4 -S31508000D300A6801239A430A600100E4D0002131764B -S31508000D40FEBD3648C168090605D5354901603549ED -S31508000D50016000207047012070472E4801688022F4 -S31508000D600A4302600020704710B40022054BDA617E -S31508000D70284A136801241C431460018010BC70477C -S31508000D8000000000300A002038B50400FFF70AFD0D -S31508000D90050021480168C9070CD50020C0438442D4 -S31508000DA0F7D0002C04D0FFF7FDFC401B8442F0D29C -S31508000DB0032032BD202102680A4000D00160016884 -S31508000DC0C90602D40068400703D500F007F80120D9 -S31508000DD032BD002032BD000050C3000030B40021EF -S31508000DE010230D4802681A4005D00F4AD16902241B -S31508000DF00C43D4611900042302681A4007D00A4A32 -S31508000E00D46901252543D5610A00190011430160FB -S31508000E1030BC7047102002400C20024004200240DB -S31508000E2023016745AB89EFCD300A0020F3B581B0C1 -S31508000E3001200400294D297E012901D10220FEBD89 -S31508000E402876274F01980068012810D13800FFF747 -S31508000E509BFF002831D100F034F83800FFF794FFE3 -S31508000E6004002048016804229143016025E0380007 -S31508000E70FFF78AFF002820D10020C04302990860A6 -S31508000E800198466801E09002361801988068C00209 -S31508000E9001994968401886420FD2300000F024F8BC -S31508000EA03800FFF771FF04000E48016802229143DB -S31508000EB001602000E7D0029806600020287620000E -S31508000EC0FEBD00200549C8610648016804220A4398 -S31508000ED00260016840220A4302607047300A002017 -S31508000EE050C30000102002400021074AD16107497B -S31508000EF00A68022313430B604860086840220243CD -S31508000F000A60704700000000300A002010200240E6 -S31508000F1072B6704762B6704780B5FFF749FC01BDE7 -S31508000F2080B5FFF74CFC02BD80B5FFF771FC02BD2A -S31508000F3080B5FFF7A7FC02BD80B5FFF7CFFC02BD61 -S31508000F4080B5FFF780FC002801D1002002BDFFF71D -S31508000F50AEFC02BD00690840884201D101207047F5 -S31508000F600020704780B500F0D1F880218901044837 -S31508000F70FFF7F0FF401E8041C043C00F02BD0000CE -S31508000F800008004880B5642000F09EF801BD80B5D1 -S31508000F9000F09DF801BDFEE710B500F0BFF800F0BF -S31508000FA0CBFA2C4C0120207000F0B0FB00202070FA -S31508000FB010BD10B582B0274C6946201D00F021FBF4 -S31508000FC0012806D10120207068460178201D00F00E -S31508000FD0C0F86946201D00F0CCFB012806D1002088 -S31508000FE0207068460178201D00F0B3F813BD7047DD -S31508000FF070B506000C00174D2878012803D1C9B230 -S31508001000300000F0E4FA2878002804D12100C9B29B -S31508001010300000F093FB00F098F870BD0D4800789A -S31508001020401E03D0401E012802D903E0082070475D -S31508001030002070474020704706480078401E03D0BD -S31508001040401E012802D903E0082070470020704797 -S3150800105040207047C000002080B500F06FF802BD40 -S3150800106080B50D48016810220A430260002000F08E -S315080010700BFC00F0E7FC002002BD80B50748002104 -S31508001080C94341600022426001600260C161C261D9 -S3150800109000F024FD002002BD002002400C10024092 -S315080010A0D2B2203A03D30800D0400021704720323C -S315080010B0D141D04048409140D14048407047FEE772 -S315080010C081617047816270470F494880704710B543 -S315080010D0FFF75CFB0C4C6168884214D39020C0056E -S315080010E02178002905D1012121702021FFF7E8FF89 -S315080010F004E0002121702021FFF7E4FFFFF746FBFB -S3150800110061884018606010BD580A002080B520210B -S315080011109020C005FFF7D6FF01BDFEE710B40020FA -S31508001120AF4902000A800A00443250600300432493 -S315080011300B55138002008A7010BC7047A8480178C6 -S31508001140481E8041C043C00F70470020B44908704C -S31508001150704710B50178A24CFF2913D100F085F825 -S315080011604320205C012802D1102000F075F84420A5 -S31508001170215E012905DB01204322A054E01C00F072 -S315080011804FF810BD2278012AFBD1C92932D0CC29C3 -S315080011903FD0CF293AD0D0292FD0D12933D0D22940 -S315080011A02ED0F32917D0F4290FD0F5290AD0F6291D -S315080011B00ED0FA2912D0FC2913D0FD2914D0FE2905 -S315080011C015D029E000F0AAF8CAE700F0C4F8C7E786 -S315080011D000F09BF8C4E700F0DDF8C1E700F084F8FA -S315080011E0BEE700F07BF8BBE700F069F8B8E700F067 -S315080011F05AF8B5E700F0F6F8B2E700F013F9AFE7EA -S3150800120000F0DBF8ACE700F03AF9A9E700F04AF994 -S31508001210A6E700F053F9A3E7202000F01DF89FE7A2 -S3150800122080B589B2FFF7E4FE01BDF8B504000D00EC -S315080012301700002605E020783618F6B2641CFFF77A -S3150800124042FD2800451E0028F5D13E600120F2BD6A -S3150800125000206349487070476149CA1CFE23137011 -S315080012605070022044228852704738B5FFF7F0FFC5 -S315080012705B4C01252570FF20E070102020710020AE -S315080012806071FFF7CBFEA071FFF7D6FEE071FFF79E -S31508001290D3FE000A20726572A572082044216052A6 -S315080012A0FFF73AFE31BD10B54D4C00202070FFF710 -S315080012B0CFFFFF20E07001204421605210BD48484E -S315080012C0411CFF228A700022CA700B780B714A7182 -S315080012D08A71CA71062144228152704780B500205E -S315080012E0FFF7BAFF01BD00003D48C11CFF220A7086 -S315080012F0443000BF74A2426000224A708A70CA70E5 -S3150800130007224A600821018070473549FF22CA70C2 -S3150800131044314068486001200880704770B5050070 -S31508001320FFF77CFE6A78401E904203DA2220FFF718 -S3150800133093FF70BD2A4C260044367168201DFFF7BE -S31508001340AEFCFF20E07070686978401870606878B5 -S31508001350401C308070BD70B50400FFF75FFE401E6C -S315080013606178884203DA2220FFF776FF70BD61684C -S315080013701B4D2E00443671606278281DFFF78FFCDE -S31508001380FF20E87070686178401870606078401CCB -S31508001390308070BD38B51249CC1CFF2222700D0072 -S315080013A04435CA1D41686868FFF73FFF6070002032 -S315080013B0A070E0700820288031BD70B5084CE51C87 -S315080013C0FF20287000266E70AE70FFF727FEE870C3 -S315080013D02E716E71AE7107204421605270BD0000F7 -S315080013E0E009002070B50600FFF718FE324C25000C -S315080013F04435721C411E6868FFF792FD002803D128 -S315080014003120FFF729FF70BDFF20E070FFF706FEC9 -S315080014106968401E081868600120288070BD0000B1 -S31508001420230A002038B50400FFF7F8FD801E61780E -S31508001430884203DA2220FFF70FFF31BD1E48FF213D -S31508001440C17005004435012028806178080007D15D -S31508001450FFF776FD002811D13120FFF7FDFE31BDDB -S31508001460A21C6868FFF75CFD002803D13120FFF74E -S31508001470F3FE31BD686861784018686031BD38B5DB -S315080014800D4C2500443541686868FFF74DFD002876 -S3150800149003D13120FFF7E0FE31BDFF20E0700120C7 -S315080014A0288031BD80B5FFF7D5FB0348FF21C17001 -S315080014B001214422815201BDE009002080B5312076 -S315080014C0FFF7CAFE01BD00004F70656E424C54001E -S315080014D0FDB50C0000255F4F01E06D1CEDB2122D25 -S315080014E028D200BF75A069004618380069460A88E0 -S315080014F031787378C918491C514300F06FFB0029ED -S31508001500EBD1380069460A8831787378C918491CBE -S31508001510514300F063FB208020880100DDD04E494E -S315080015208842DADA3078019908707078029908707A -S315080015300120FEBD0020FEBD30B58BB00024200082 -S31508001540694608606B4600AA521C891CFA204000AE -S31508001550FFF7BEFF002804D1AA2100BF45A000F06E -S3150800156097FB3E4D3E4828602800443028632800F3 -S3150800157060306863AC61EC612C626C62AC62EC62F0 -S31508001580AC60EC6068464078401E000428616846F6 -S315080015900078401E00056861684640886860280033 -S315080015A0FEF78CFD06940794012008902D490191B9 -S315080015B002942D49039104210491059409900E2063 -S315080015C00A9001A92800FEF721FE0BB030BD38B5F8 -S315080015D0224A264B146B23600023146BA360146BFA -S315080015E0E360146B216105E0C45C156BED182C757E -S315080015F05B1CDBB28B42F7DB32211000FEF792FE52 -S3150800160031BDF3B581B0002635003400134F2246AC -S3150800161011463800FEF794FF002818D1786B016848 -S31508001620134A914203D18068002800D10124012C75 -S315080016300DD105E08019007D01998855761CF6B212 -S31508001640786B01698E42F5D302980170012528004E -S31508001650FEBD000080BB0000010400001009002048 -S3150800166000640040E0CC0000E0FF0000E107000055 -S3150800167067060000433A5C576F726B5C736F66745B -S31508001680776172655C4F70656E424C545F53504C7F -S31508001690746F48414C5C5461726765745C536F752E -S315080016A07263655C41524D434D305F53544D33323E -S315080016B046305C63616E2E63000000000502060278 -S315080016C0060307030803090309040A040B040C04A8 -S315080016D00C050D050E050F050F0610061007100858 -S315080016E0016801220A4302607047C069410908007F -S315080016F0C007C00F7047C069C1090800C007C00FFE -S315080017007047808CC0B270470185704710B588B0A5 -S31508001710E1200002009000200190029003900C2125 -S31508001720049105900690444C6946200000F0E1FAC1 -S315080017302000FFF7D5FF08B010BD000070B5040003 -S315080017400D00412D03DB81213DA000F0A1FA280000 -S3150800175000F05CF8002606E0FFF7B5FAB6B2A05D21 -S3150800176000F054F8761C3000290080B28842F3D382 -S3150800177070BDF8B507000D00304C6078002811D10F -S31508001780201D00F033F801282ED1207901002BD036 -S31508001790412829DAFEF7FAFFA0640020207001200C -S315080017A0607021E02678A019401D00F01FF8012876 -S315080017B012D1761C3200227010002179C0B28842FC -S315080017C012D1D2B2611D3800FFF769FA00206070A5 -S315080017D0207828700120F2BDFEF7D8FFA16C64318D -S315080017E0814201D2002060700020F2BD70B504006D -S315080017F00025114E3000FFF778FF002804D030008E -S31508001800FFF77FFF20700125280070BD38B50A4C08 -S3150800181001002000FFF778FFFEF7B8FF05000A353C -S315080018202000FFF768FF002805D1FFF74CFAFEF7FE -S31508001830ADFF8542F4D231BD004400409409002032 -S31508001840433A5C576F726B5C736F66747761726547 -S315080018505C4F70656E424C545F53504C746F4841F0 -S315080018604C5C5461726765745C536F757263655C32 -S3150800187041524D434D305F53544D333246305C75BB -S315080018806172742E6300000010B5040000F09EFA21 -S31508001890FA21890000F0A5F900F0D9FA0022210002 -S315080018A00020C04300F0CFFA002010BD9E48016812 -S315080018B08022D2020A43026070479B480168802250 -S315080018C052020A430260704797480068410C0800B4 -S315080018D0C007C00F704795490A6803239A43104307 -S315080018E008607047914801680C20084070478F4986 -S315080018F00A68F0239A431043086070478B490A68C0 -S315080019008B4B13401843086070478748016880224C -S3150800191052040A430260704783480068410E080073 -S31508001920C007C00F704730B4804B1C68814D2540F6 -S31508001930284301431960986A0F21884302439A6233 -S3150800194030BC704781B07C490A6802430A6009685E -S3150800195008400090009801B0704777490A688243AA -S315080019600A60704781B075490A6802430A600968C7 -S3150800197008400090009801B0704770490A68824391 -S315080019800A60704781B06E490A6802430A600968AE -S3150800199008400090009801B0704769490A68824378 -S315080019A00A60704767490A6801239A43104308602A -S315080019B07047644801680800C007C00F7047816215 -S315080019C0704780B500F005F800F04CFA00F058FAB8 -S315080019D0FCE780B5FFF744FB00F002F801BD000004 -S315080019E080B50120FFF7DEFFFFF7E3FF012804D0EB -S315080019F0672100BF57A000F04BF9FFF757FFFFF725 -S31508001A005CFFFFF761FF0128FBD10122A0218903B2 -S31508001A101004FFF788FFFFF778FFFFF77DFF01281F -S31508001A20FBD10020FFF763FF0020FFF767FF0220C6 -S31508001A30FFF751FFFFF756FF0828FBD1424800F091 -S31508001A4029FA01BDF0B587B00120FFF79BFF802476 -S31508001A50A4022000FFF776FF6000FFF773FFA000DF -S31508001A60FFF770FF2000FFF77DFF2002FFF77AFFE0 -S31508001A7020200090012601960024029403940494E1 -S31508001A809027FF056946380000F0A3FA20213800A0 -S31508001A90FFF795FF700300900194049469462B485C -S31508001AA000F097FA0C200090022501950294039401 -S31508001AB0049405966946380000F08BFAC020800029 -S31508001AC00090019503200290039404940420059045 -S31508001AD069461F4800F07DFA07B0F0BD10B590249E -S31508001AE0E40520212000FFF76AFF184800F029FACC -S31508001AF0174800F026FA200000F023FA8020800418 -S31508001B00FFF73BFF8024A4022000FFF736FFA00062 -S31508001B10FFF723FF6000FFF720FF2000FFF71DFFF8 -S31508001B200120FFF73AFF10BD0010024004100240E2 -S31508001B30FFF8FFFFFF7FC2FF141002401C1002408F -S31508001B401810024000200240006CDC020008004821 -S31508001B5000040048433A5C576F726B5C736F667497 -S31508001B60776172655C4F70656E424C545F53504C9A -S31508001B70746F48414C5C5461726765745C44656D6A -S31508001B806F5C41524D434D305F53544D33324630AE -S31508001B905F4E75636C656F5F4630393152435F49F6 -S31508001BA041525C426F6F745C6D61696E2E63000012 -S31508001BB0F446002804D4494200F013F8404260472E -S31508001BC04042002905D45FD000F00BF84042494254 -S31508001BD06047494200F005F84942604703460B430F -S31508001BE0E6D40022030A8B420BD203098B4219D290 -S31508001BF043088B422ED2411A00D201465241104662 -S31508001C007047FF2209023FD012068B4205D31212F3 -S31508001C1009028B4201D31212090203098B4219D316 -S31508001C2000E0090AC3098B4201D3CB01C01A52410D -S31508001C3083098B4201D38B01C01A524143098B4257 -S31508001C4001D34B01C01A524103098B4201D30B0140 -S31508001C50C01A5241C3088B4201D3CB00C01A524165 -S31508001C6083088B4201D38B00C01A524143088B422A -S31508001C7001D34B00C01A5241884200D3401A524140 -S31508001C80CFD201461046704708B500F0EBF908BDFB -S31508001C9080B5FFF718F8FCE701680800C007C00F11 -S31508001CA0704742683D4B134019434160704782684C -S31508001CB03B4B134019438160704730B50400080058 -S31508001CC019004B0880252D02AA420CD14000C018E5 -S31508001CD0FFF787FF80B23349014040084007400FAD -S31508001CE00143E16030BDC018FFF77BFF80B2E060BA -S31508001CF030BDFEB506000D0000242700FFF7CCFF17 -S31508001D00002849D130683049014068680843E968C5 -S31508001D10014328690843A96901433160A96830006D -S31508001D20FFF7BFFF69693000FFF7C1FF1E4886420B -S31508001D3004D1204600F0DBF9040022E01B48864265 -S31508001D4004D1102000F0D3F904001AE0184886429E -S31508001D5004D1122000F0CBF9040012E0154886429F -S31508001D600BD01548864208D01448864205D0144838 -S31508001D70864202D01348864203D1684600F0ABF982 -S31508001D80029C002C08D02B68002B05D00127AA69D5 -S31508001D9021003000FFF791FF3800FEBDFFCFFFFF9F -S31508001DA0FFFCFFFFF0FF0000003801400044004040 -S31508001DB000480040004C004000500040001401401C -S31508001DC000180140001C0140F369FFEF0148006854 -S31508001DD0704700000401002010B4C2001823134005 -S31508001DE0FF249C40E2438901C9B2994000280BD5DB -S31508001DF0194B0007000F0838800880001818036878 -S31508001E001A401143016007E0144B80088000181837 -S31508001E1003681A401143016010BC704710B5401E94 -S31508001E2080214904884201D3012010BD0C4C606012 -S31508001E3003210020C043FFF7CFFF0020A060072042 -S31508001E402060002010BD80B5FFF7C6FF01BD80B534 -S31508001E50FFF7E4FF02BD00001CED00E000E400E02F -S31508001E6010E000E080B5FEF7F1FEFEF728FFFEF76A -S31508001E7073FCFFF751F8FFF78FF800F00FFA01BD72 -S31508001E8080B5FEF720FFFEF778FCFFF792F800F022 -S31508001E900FFA01BD014908607047000004010020DF -S31508001EA010B40B004B4301685C00E418A14353438C -S31508001EB00B43036010BC704743688B435143194377 -S31508001EC04160704710B40B004B4381685C00E4180E -S31508001ED0A14353430B43836010BC704710B40B00F7 -S31508001EE04B43C1685C00E418A14353430B43C360EA -S31508001EF010BC704710B40B004B434B434B43016A6D -S31508001F001C01E41AA14353430B43036210BC7047F8 -S31508001F1010B4090A0B004B434B434B43416A1C015F -S31508001F20E41AA14353430B43436210BC7047474925 -S31508001F300A6810430860704744490A6882430A6081 -S31508001F40704738B501249021C905884207D1650430 -S31508001F502800FFF7ECFF2800FFF7EEFF37E03C49C3 -S31508001F60884207D1A5042800FFF7E1FF2800FFF7FC -S31508001F70E3FF2CE03749884207D1E5042800FFF73C -S31508001F80D6FF2800FFF7D8FF21E03349884207D15A -S31508001F9025052800FFF7CBFF2800FFF7CDFF16E041 -S31508001FA02E49884207D165052800FFF7C0FF28009B -S31508001FB0FFF7C2FF0BE02A49884207D1A50528008A -S31508001FC0FFF7B5FF2800FFF7B7FF00E00024200061 -S31508001FD032BDF8B507000C00002604E029003800D9 -S31508001FE0FFF796FF761C21680800F04022D00125ED -S31508001FF0B5400D40F6D0626829003800FFF750FF5B -S315080020006068012801D0022804D1A2682900380096 -S31508002010FFF758FF226929003800FFF75FFF60685D -S315080020200228DFD16269FF2DD8D829003800FFF7CA -S3150800203061FFD7E76068012801D0022803D1E2686A -S315080020403800FFF739FF0120F2BD000028100240D2 -S315080020500004004800080048000C0048001000482A -S31508002060001400487047FEE76F48006841080800FA -S31508002070C007C00F70477B48006841080800C007C2 -S31508002080C00F7047784801680C20084070477648AA -S315080020900168F0200840704773480168E020C000D6 -S315080020A00840704771490968032282400A400006C1 -S315080020B0104370476C480168C020400208407047CA -S315080020C069480168F020800308407047684800683E -S315080020D00007000F704710B5040000F07FF8206075 -S315080020E000F08BF8606000F094F8A06010BD38B579 -S315080020F004000025002C21D12846FFF7D3FF01282C -S3150800210004D014D3032805D00AD310E000F066F8EB -S31508002110050013E0FFF7A8FF00280FD0554D0DE086 -S31508002120FFF7A9FF002809D080252D0206E000F058 -S3150800213055F800F062F800F06CF80500102C24D170 -S315080021401020FFF7AFFF4C49884206D04B4988421A -S315080021500DD04B49884204D010E000F03FF8050046 -S3150800216013E0FFF781FF00280FD0424D0DE0FFF77F -S3150800217082FF002809D080252D0206E000F02EF8FF -S3150800218000F03BF800F045F80500122C24D1122087 -S31508002190FFF788FF3B49884206D03B4988420DD065 -S315080021A03A49884204D010E000F018F8050013E018 -S315080021B0FFF75AFF00280FD02E4D0DE0FFF75BFF03 -S315080021C0002809D080252D0206E000F007F800F067 -S315080021D014F800F01EF80500280032BD80B5FFF798 -S315080021E051FF082802D00C2803D004E000F01EF89E -S315080021F002BD274802BD1F4802BD10B50400FFF7FF -S3150800220046FF244900090007000F085CC440200067 -S3150800221010BD10B50400FFF73FFF1F49000A085C10 -S31508002220C440200010BD00000010024038B5FFF77A -S3150800223041FFC0214902884201D1154D00E00D4DEC -S315080022400F24FFF743FF2040401C01002800FFF73A -S31508002250C8FC0500FFF734FF800C0440A41C654346 -S31508002260280032BD201002400410024030100240FF -S315080022702C10024000127A00000001100000021023 -S3150800228000000310000004120000081200000C12DF -S31508002290006CDC0240230008A024000810B50F4C8F -S315080022A001202070FEF772FA606000F001F810BD98 -S315080022B010B5FEF7D1FE01280FD0084C207801286A -S315080022C00BD1FEF763FA6168FA2252008918884230 -S315080022D003D300202070FEF7BDFC10BD500A002075 -S315080022E01148016801220A43026041680F4A0A4000 -S315080022F0426001680E4A0A40026001680D4A0A40B7 -S31508002300026041680C4A0A404260C16A0F22914342 -S31508002310C162016B094A0A400263416B012291437B -S315080023204163002181607047001002400CB8FF0825 -S31508002330FFFFF6FEFFFFFBFFFFFFC0FFACFEF0FF4F -S315080023400000000000000000010203040607080957 -S31508002350094880F3088804200168090E1F22914263 -S3150800236005D106480121016005480021016005489C -S31508002370804705480047000008050020181002405D -S3150800238000000140E12200089524000870B40121EC -S31508002390002213E00468001D0C4202D04D466D1E53 -S315080023A064192260241D1B1F042BFAD225009E07E0 -S315080023B001D52280AD1C0B4000D02A700368001D91 -S315080023C0002BE7D170BC704730B5016841184468E6 -S315080023D062088A188368E40701D54C461B1991429E -S315080023E001D10C3030BD0C7864B2491C0D78491CFB -S315080023F01D705B1C002C02D5641CF9D1EFE7641E26 -S31508002400F4D5ECE710B5074979441831064C7C44F5 -S31508002410163404E0081D0A68891888470100A14295 -S31508002420F8D110BD080000002400000061FFFFFF7E -S315080024305805000008050020000000008DFFFFFF7A -S315080024409C00000010000000C000002000F00BF8FF -S31508002450002801D0FFF7D6FF002000BF00BFFFF716 -S31508002460B0FA00F002F80120704780B500F002F8D3 -S3150800247001BDFEE70746384600F002F8FBE7FEE72F -S3150800248080B500BF00BF024A11001820ABBEFBE7AB -S315080024902600020000BF00BF00BF00BFFFF7D6FF3F -S315080024A00000000001020304FEE7FEE7FEE7FEE780 -S315080024B0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7E6 -S315080024C0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7D6 -S315080024D0FEE7FEE7FEE7FEE7FEE7FEE70004BC00D0 -S309080024E002127A005C -S7050800249539 +S31508000020000000000000000000000000330A00087D +S3150800003000000000000000001B0D0008D5050008A0 +S31508000040EF0D00084F0E0008AB0E0008E71B00086E +S31508000050B71F0008732300087F230008A923000898 +S31508000060AB230008AD230008AF230008B12300081E +S31508000070B3230008B5230008B7230008B9230008EE +S31508000080BB230008BD230008BF230008C1230008BE +S31508000090C3230008C5230008C7230008C92300088E +S315080000A0CB230008CD230008CF230008D12300085E +S315080000B0D3230008D5230008D723000870B5040009 +S315080000C001D1012070BD2020205C002802D120002B +S315080000D000F054FA2068016802229143016000F09A +S315080000E075FA05002068416889070ED500F06EFA92 +S315080000F0401B0B28F6D3606A80218902014361629E +S31508000100052020216054012070BD0125016829437E +S31508000110016000F05BFA06002068416829400DD1AD +S3150800012000F054FA801B0B28F6D3606A6904014371 +S315080001306162052020216054284670BD217E012970 +S31508000140016803D180220A43026002E080229143BB +S3150800015001602068617E0129016803D140220A43B3 +S31508000160026002E04022914301602068A17E0129D5 +S31508000170016803D120220A43026002E0202291434B +S3150800018001602068E17E0129016803D110229143AC +S31508000190016002E010220A4302602068217F0129DB +S315080001A0016803D108220A43026002E0082291434B +S315080001B001602068617F0129016803D104220A438E +S315080001C0026002E0042291430160A068E1680143ED +S315080001D020690843616901436068401E0843216835 +S315080001E0C8610020606220202554002070BDF0B44C +S315080001F00A0001682023C35C012B01D0022B6AD1B7 +S31508000200802080000B180124186820431860107D90 +S31508000210C006C00E8440E543D8692840D861D06935 +S3150800022000281CD1D8682840D860902080000F1874 +S315080002305069C0008446D06800045668B6B20643C2 +S3150800024060463E50912080000F185069C0008446D1 +S31508000250906800041668B6B2064360463E50D069F8 +S3150800026001281AD1D8682043D860902080000F183A +S315080002705069C0008446106800045668B6B2064342 +S3150800028060463E509120800008185169C90096685A +S315080002903604D768BFB23743475090690028586874 +S315080002A002D12840586001E02043586010690028B0 +S315080002B0586902D105405D6101E020435861106A22 +S315080002C0012802D1D8690443DC61186801218843F2 +S315080002D01860002005E0416A8022D2020A43426281 +S315080002E00120F0BC704738B504002020205C0128A6 +S315080002F020D1022020216054206801680122914300 +S31508000300016000F063F9050020684068C0070ED553 +S3150800031000F05CF9401B0B28F6D3606A802189023D +S3150800032001436162052020216054012032BD00206E +S31508000330606232BD606A802109030143616201205F +S3150800034032BDFCB42024045D0568AD68012C01D0DB +S31508000350022C6CD1E02464052C4061D02C0EA50734 +S31508000360AD0F032D06D3416A802212040A43426266 +S31508000370012062E001242600AE401E602B010568BC +S31508000380C0267600AD19ED180195CD688E680096E1 +S31508000390002E05D10E6876053543019E356006E0C8 +S315080003A04E68F600009F37433D43019E35600D6950 +S315080003B00668C2277F00F619F550097D012907D17D +S315080003C001683D464919C9180D6826022E430E6074 +S315080003D0D179090695792D040D4351790E022E43DC +S315080003E0117931430568ED18C6267600A951D178EA +S315080003F0090695782D040D43517809022943127888 +S315080004000A430168C918C4256D004A510068C0210D +S3150800041049004018C01801680C43046000200CE02D +S31508000420416A802292030A434262012005E0416A3A +S315080004308022D2020A4342620120F6BC70470200BB +S3150800044000202023D35C012B01D0022B06D189067C +S31508000450126892680A408A4200D001207047F0B4B8 +S315080004602024045D012C02D0022C00D07EE0056811 +S315080004700324002909D1EE68344010D1416A80224C +S3150800048092030A434262012076E02E69344006D17F +S31508000490416A802292030A43426201206CE00C0101 +S315080004A0D8267600AD192D5904263540956006687C +S315080004B0D8277F00F6193619002D356802D16D0D3B +S315080004C0156001E0ED08556005683E46AD192D59E1 +S315080004D02E00B607F60FD66005682D19DA267600BF +S315080004E0AD592D072D0F156105682D19AD592D0A22 +S315080004F0EDB2956105682D19AD592D0C5561026847 +S315080005001219DC256D0052591A70026812195259CF +S31508000510120A5A70026812195259120C9A70026815 +S3150800052012195259120EDA70026812192D1D5259F3 +S315080005301A71026812195259120A5A710268121966 +S315080005405259120C9A71026812192C461259120E37 +S31508000550DA7100682022002903D1C1680A43C26003 +S3150800056002E001690A430261002005E0416A80222F +S31508000570D2020A4342620120F0BC70477047FEE788 +S3150800058080B500F00AF80E480E49416000218160E6 +S31508000590052202600C48016001BD00200849086078 +S315080005A0704707480068C00303D507480168491C17 +S315080005B00160704780B5FFF7F4FF0348006802BD85 +S315080005C010E000E07FBB00000406002080B5FFF7BE +S315080005D0F1FF02BD7047FEE70020C043624908608C +S315080005E062490860704770B504000D00160060483F +S315080005F0001B691E88420AD3200000F06DF9FF2807 +S3150800060005D06019401E00F067F9FF2801D10020C7 +S3150800061070BD3200600A4002BC49884205D12B00F1 +S315080006202100524800F0A6F870BD2B0021004E4864 +S3150800063000F0A0F870BD70B504000E004C48001B11 +S31508000640711E88420DD3200000F046F90500A01956 +S31508000650401E00F041F92900FF2902D00100FF29B8 +S3150800066001D1002070BD280000F0ECF870BD80B5FF +S315080006703E4801680022D243914201D1012002BDC1 +S31508000680416882688918C2688918026989184269A6 +S31508000690891882698918C0690818C143491C0091DC +S315080006A06A460421B548FFF79EFF02BD97480168D0 +S315080006B04268891882688918C2688918026989187F +S315080006C04269891880690818AC4909684018401EAB +S315080006D08041C00F704710B50024E44323480168E1 +S315080006E0A14203D000F084F8002807D01E4801680C +S315080006F0A14205D000F07CF8002801D1002010BDE9 +S31508000700012010BD8148704780B5CA0501D0002078 +S3150800071002BD02688A4201D1012002BD0160802221 +S315080007209200001D00F06DF9012002BD38B50500E4 +S315080007300C000E48854208D10B4D21002800FFF712 +S31508000740E3FF00280DD1002032BD70498C4201D14B +S315080007500500F2E7280000F04BF80028EDD100204C +S3150800076032BD280032BD0000080100200C0300201D +S31508000770FFFF0308F8B504000D0017001E00680AFD +S315080007804002009020680021C943884205D100999B +S315080007902000FFF7B9FF002828D020680099884272 +S315080007A004D02000FFF7C2FF04001FD038002168DC +S315080007B0691A6118091D37000E00050000F035F9A1 +S315080007C080208000211D711A814207D300990918DB +S315080007D02000FFF7ABFF040008D0261D28783070EC +S315080007E0761C6D1C7F1EE9D10120F2BD0020F2BDEA +S315080007F0F8B507000126386800F06EF8FF2801D121 +S315080008000020F2BD00F05BF9002400E0641C802C97 +S3150800081014D2A0003968091800913818456800F004 +S3150800082004F92A0000230099022000F003F90028A1 +S3150800083003D100980068A842E8D0002600F04EF9D7 +S315080008403000F2BDF0B585B00F0001252C0000215F +S3150800085001913A0003009A4200D20C000200052AD0 +S3150800086002D33A00172A00D30C002100012930D1FF +S3150800087000F04EF80600380000F04AF80100009132 +S31508000880380000F060F800990818401E801B401CCC +S31508000890C00A80B20090002702970396049500F0DC +S315080008A00EF93D00009E05E00398802109014018D5 +S315080008B003906D1C280080B2B04208DA00F0B5F843 +S315080008C001A902A800F072F90028EDD03C0000F05A +S315080008D005F9200005B0F0BD38B50400002501E093 +S315080008E06D1CEDB2122D0FD200F09FF82448690056 +S315080008F049198900401801688C42F1D34268891861 +S315080009008C42EDD2007A32BDFF2032BD00280008A5 +S3150800091038B50400002500E06D1C2800C0B2122876 +S315080009200ED200F082F816482900C9B24A005118BA +S3150800093089004018017A22009142EDD1006832BD43 +S315080009400020C04332BD38B50400002500E06D1C08 +S315080009502800C0B212280ED200F067F8084829000D +S31508000960C9B24A00511889004018017A22009142FA +S31508000970EDD1406832BD002032BD0000C028000815 +S315080009801020000881B008490A6802430A6009680D +S3150800099008400090009801B0704704490A6803238C +S315080009A09A4310430860704718100240000001403F +S315080009B080B500F06FF901BD10B500F07BF900288D +S315080009C01ED000F091F900281AD000F0D1F9FFF7EF +S315080009D0E4FD00F01AFA0120FFF7D4FF00F06EF9E3 +S315080009E0C02201008020800500F00BF80320FFF7E5 +S315080009F0D4FF00F063F9001D046800F04DF9A04724 +S31508000A0010BD70B515000C00060005E020783070A2 +S31508000A10641C761C00F009F82800451E0004F5D170 +S31508000A2070BD80B500F070F901BD80B500F071F9B0 +S31508000A3001BDFEE7F1B582B00F0014001D0046485F +S31508000A40007E012801D10220FEBD01263000424960 +S31508000A5008762C4800F058F801002CD10299012993 +S31508000A6001D1320004E0022901D1022200E0042269 +S31508000A7000213B0026002F00009315000C0001E022 +S31508000A80641CE4B2AC4216DA3000390022001201C6 +S31508000A9000F0CEF9010089B200986200801800F0D3 +S31508000AA024F8184800F030F83A490A6801239A43AE +S31508000AB00A600100E4D00021274A1176FEBD002015 +S31508000AC036498022CB68134007D0354B0B60354B2F +S31508000AD00B60C9680A4000D0012070472D4801689C +S31508000AE080220A4302600020704710B400221A4B85 +S31508000AF0DA61284A136801241C431460018010BC7B +S31508000B007047000050C3000038B50400FFF75EFDCB +S31508000B10050021480168C9070CD50020C043844256 +S31508000B20F7D0002C04D0FFF751FD401B8442F0D2C9 +S31508000B30032032BD202102680A4000D00160016806 +S31508000B40C90602D40068400703D500F007F801205B +S31508000B5032BD002032BD0000D005002030B400218F +S31508000B6010220D480368134005D00F49CB690224AB +S31508000B701C43CC611100042302681A4007D00A4AB4 +S31508000B80D46901252543D5610A001900114301607E +S31508000B9030BC7047102002400C200240042002405E +S31508000BA023016745AB89EFCDD0050020F8B50F00C6 +S31508000BB001210E002B4C227E012A01D10220F2BD12 +S31508000BC000902176284D00980068012810D1280049 +S31508000BD0FFF79AFF002833D100F036F82800FFF710 +S31508000BE093FF06002148016804229143016027E02B +S31508000BF02800FFF789FF002822D138000021C943C1 +S31508000C00016000994968009F009030000E0001E0DD +S31508000C1099027618B968C9027A6889188E420ED27E +S31508000C20300000F025F82800FFF76EFF0F490A6824 +S31508000C3002239A430A600100EAD000990E60060072 +S31508000C40002020763000F2BD00200649C86107481A +S31508000C50016804220A430260016840220A430260CE +S31508000C6070470000D005002050C300001020024045 +S31508000C700021064AD16106490A68022313430B601C +S31508000C8048600868402202430A607047D005002081 +S31508000C901020024072B6704762B6704780B5FFF7FB +S31508000CA09BFC01BD80B5FFF79EFC02BD80B5FFF732 +S31508000CB0C2FC02BD80B5FFF7F9FC02BD80B5FFF79F +S31508000CC021FD02BD80B5FFF7D2FC002801D1002026 +S31508000CD002BDFFF700FD02BD00690840884201D148 +S31508000CE0012070470020704780B58021890105489A +S31508000CF0FFF7F2FF002801D1002002BD00F0CEF870 +S31508000D00012002BD0008004880B5642000F0A4F860 +S31508000D1001BD80B500F0A3F801BDFEE710B500F0EF +S31508000D20C5F800F0DCFA2C4C0120207000F086FB98 +S31508000D300020207010BD1CB5274C6946201D00F008 +S31508000D4039FB012806D10120207068460178201D4C +S31508000D5000F0C7F86946201D00F0A4FB012806D15B +S31508000D600020207068460178201D00F0BAF813BDEF +S31508000D70704770B506000C00174D2878012803D176 +S31508000D80C9B2300000F0F3FA2878002804D121000F +S31508000D90C9B2300000F069FB00F09FF870BD0E483C +S31508000DA00078401E03D0401E012802D903E008201F +S31508000DB07047002070474020704707480078401E5B +S31508000DC003D0401E012802D903E0082070470020FE +S31508000DD07047402070470000C000002010B500246E +S31508000DE000F074F8002800D00124200010BDFEE7AA +S31508000DF080B50D48016810220A430260002000F001 +S31508000E00BBFB00F095FC002002BD80B50748002119 +S31508000E10C94341600022426001600260C161C2614B +S31508000E2000F0D2FC002002BD002002400C10024057 +S31508000E30D2B2203A03D30800D040002170472032AE +S31508000E40D141D04048409140D14048407047FEE7E4 +S31508000E5081617047816270470F494880704710B5B5 +S31508000E60FFF7A8FB0C4C6168884214D39020C00594 +S31508000E702178002905D1012121702021FFF7E8FFFB +S31508000E8004E0002121702021FFF7E4FFFFF792FB21 +S31508000E9061884018606010BDFC05002080B52021DF +S31508000EA09020C005FFF7D6FF01BDFEE710B400206D +S31508000EB0BB4902000A800A004432506003004324FA +S31508000EC00B55138002008A7010BC7047B44800782E +S31508000ED0401E8041C043C00F70470020B1490870CA +S31508000EE0704710B5AE4C0178FF2914D100F086F88A +S31508000EF04320205C012802D1102000F077F8442016 +S31508000F00215E0800012805DB01204322A054E01CCD +S31508000F1000F050F810BD21780129FBD10178C929C4 +S31508000F2032D0CC293FD0CF293AD0D0292FD0D129B9 +S31508000F3033D0D2292ED0F32917D0F4290FD0F5298A +S31508000F400AD0F6290ED0FA2912D0FC2913D0FD2989 +S31508000F5014D0FE2915D029E000F0A6F8C8E700F05D +S31508000F60C1F8C5E700F097F8C2E700F0DAF8BFE77E +S31508000F7000F080F8BCE700F078F8B9E700F068F808 +S31508000F80B6E700F059F8B3E700F0ECF8B0E700F080 +S31508000F900BF9ADE700F0D7F8AAE700F032F9A7E7B2 +S31508000FA000F042F9A4E700F04BF9A1E7202000F091 +S31508000FB01DF89DE780B589B2FFF7DBFE01BDF8B5E0 +S31508000FC01700002604000D0004E020783618641C7B +S31508000FD0FFF72BFD2800451E0028F6D1F6B23E6025 +S31508000FE00120F2BD00206E49487070476C49FE2208 +S31508000FF0CA700871022044228852704738B5FFF734 +S31508001000F1FF674C01252570FF20E0701020207144 +S3150800101000206071FFF7C3FEA071FFF7CEFEE071F6 +S31508001020FFF7CBFE000A20726572A57208204421DC +S315080010306052FFF733FE31BD10B5594C00202070C1 +S31508001040FFF7D0FFFF20E07001204421605210BD59 +S315080010505348FF21C1700021017142784271C18055 +S315080010600172062144228152704780B50020FFF79D +S31508001070BDFF01BD4A48FF21C1700100443100BFD0 +S3150800108072A24A600022828082710722C01C4260D6 +S315080010900820088070474249FF22CA7044314068D8 +S315080010A0486001200880704770B50500FFF777FE95 +S315080010B06A78401E1100884203DA2220FFF796FF5D +S315080010C070BD374C260044367168201DFFF799FC21 +S315080010D0FF20E07070686978401870606878401C76 +S315080010E0308070BD70B50400FFF759FE401E617868 +S315080010F0884203DA2220FFF779FF70BD6168284D20 +S315080011002E00443671606278281DFFF77AFCFF20AE +S31508001110E87070686178401870606078401C3080AC +S3150800112070BD38B51E4CFF21E17025004435E21D1F +S3150800113041686868FFF743FF207100206071A0715D +S315080011400820288031BD38B5154CFF20E0700025F1 +S31508001150A580FFF724FEA071E571258107204421AB +S31508001160605231BD70B50600FFF719FE0C4C25001C +S315080011704435721C411E6868FFF794FD002803D1A8 +S315080011803120FFF733FF70BDFF20E070FFF707FE41 +S315080011906968401E081868600120288070BD000034 +S315080011A05C0500209F05002038B50400FFF7F7FD11 +S315080011B0801E6178884203DA2220FFF717FF31BDC7 +S315080011C01E48FF21C170050044350120288061783A +S315080011D0002907D1FFF776FD002811D13120FFF746 +S315080011E005FF31BDA21C6868FFF75CFD002803D126 +S315080011F03120FFF7FBFE31BD6868617840186860EA +S3150800120031BD38B50D4C2500443541686868FFF78F +S315080012104DFD002803D13120FFF7E8FE31BDFF2040 +S31508001220E0700120288031BD80B5FFF7C5FB034873 +S31508001230FF21C17001214422815201BD5C050020B5 +S3150800124080B53120FFF7D2FE01BD00004F70656EF4 +S31508001250424C5400F0B587B006000D0014001F007C +S3150800126004A800F079FB0698FA21890000F060FCD2 +S3150800127000216A4616800295039401900C0001E04D +S31508001280641CE4B2122C28D25848610045186846F6 +S315080012900688019829786A788918491C714300F0EC +S315080012A047FC0029ECD1019829786A788918491CE5 +S315080012B04E43310000F03CFC0299088002980088F1 +S315080012C00028DDD04A498842DADA0398297801707D +S315080012D068783870012007B0F0BD0020FBE778B5C4 +S315080012E08BB000242000694608606B4600AA521C91 +S315080012F0891CFA204000FFF7ADFF002803D1AF2173 +S315080013003C4800F06CFC3C4D3C4828602000288393 +S31508001310A87601263000E8762000A883AC60EC6049 +S3150800132068464078401E0004286168460078401EDA +S31508001330000568616846408868602800FEF7BEFEBA +S315080013400694079408962E48019002942D48039017 +S3150800135004200490059409960E200A9001A92800F5 +S31508001360FEF745FF2800FEF7BEFF0CB070BD30B58E +S3150800137087B0254A019200220392049205911E4CD9 +S315080013806B46020001A92000FEF7DBFF00280FD1FB +S31508001390FFF710F90500323500992000FFF74FF8DE +S315080013A0002805D0FFF741FBFFF704F98542F3D281 +S315080013B007B030BD30B587B003000D0000246A467B +S315080013C021460D48FFF74BF8002807D100980F492A +S315080013D0884203D10298002800D101242000012860 +S315080013E001D104982870200007B030BD04230008F6 +S315080013F001040000EC210008A80500200064004054 +S31508001400E0CC0000E0FF0000E107000067060000EE +S31508001410016801220A4302607047C0694109080051 +S31508001420C007C00F7047C069C1090800C007C00FD0 +S315080014307047808CC0B270470185704718B587B071 +S31508001440E1200002009000200190029003900C21F8 +S31508001450049105900690454C6946200000F0F1FB82 +S315080014602000FFF7D5FF08B010BD70B505000C00C9 +S315080014702000412803DB81213D4800F0B0FB200015 +S3150800148000F05EF8002607E0FFF7CFFA300080B2DA +S31508001490285C00F055F8761C3000210080B288429E +S315080014A0F2D370BDF8B507000D00324C60780028FD +S315080014B011D1201D00F034F801282FD120790028F9 +S315080014C02CD041282ADAFFF775F8A064002020708E +S315080014D00120607022E02678601D3100401800F077 +S315080014E01FF8012812D1761C3200227010002179CB +S315080014F0C0B2884212D13800D2B2611DFFF781FA14 +S3150800150000206070207828700120F2BDFFF752F89D +S31508001510A16C6431814201D2002060700020F2BDC6 +S3150800152070B504000025114E3000FFF776FF00283D +S3150800153004D03000FFF77DFF20700125280070BD1C +S3150800154038B50100094C2000FFF776FFFFF732F89F +S3150800155005000A352000FFF766FF002805D1FFF7CA +S3150800156064FAFFF727F88542F4D231BD00440040FB +S31508001570AC2100081005002010B5040000F0CEFBD1 +S31508001580FA21890000F0D4FA00F009FC00222100B3 +S315080015900020C04300F0FFFB002010BD9E480168F4 +S315080015A08022D2020A43026070479B480168802263 +S315080015B052020A430260704797480068410C0800C7 +S315080015C0C007C00F704795490A6803239A4310431A +S315080015D008607047914801680C20084070478F4999 +S315080015E00A68F0239A431043086070478B490A68D3 +S315080015F08B4B134018430860704787480168802260 +S3150800160052040A430260704783480068410E080086 +S31508001610C007C00F704730B4804B1C68814D254009 +S31508001620284301431960986A0F21884302439A6246 +S3150800163030BC704781B07C490A6802430A60096871 +S3150800164008400090009801B0704777490A688243BD +S315080016500A60704781B075490A6802430A600968DA +S3150800166008400090009801B0704770490A688243A4 +S315080016700A60704781B06E490A6802430A600968C1 +S3150800168008400090009801B0704769490A6882438B +S315080016900A60704767490A6801239A43104308603D +S315080016A07047644801680800C007C00F7047816228 +S315080016B0704780B500F005F800F07CFB00F088FB69 +S315080016C0FCE780B5FFF794FB00F001F801BD80B593 +S315080016D00120FFF7DFFFFFF7E4FF012803D06721AA +S315080016E0554800F07CFAFFF759FFFFF75EFFFFF752 +S315080016F063FF0128FBD10122A02189031004FFF70B +S315080017008AFFFFF77AFFFFF77FFF0128FBD100204A +S31508001710FFF765FF0020FFF769FF0220FFF753FF79 +S31508001720FFF758FF0828FBD1444800F05BFB01BDD2 +S31508001730F8B586B00120FFF79DFF8024A40220009B +S31508001740FFF778FF6000FFF775FFA000FFF772FF4D +S315080017502000FFF77FFF2002FFF77CFF2020009084 +S315080017600126019600240294039404949027FF0509 +S315080017706946380000F0D5FB20213800FFF797FFAF +S31508001780700300900194049469462D4800F0C9FB43 +S315080017900C20009002250195029403940494059662 +S315080017A06946380000F0BDFBC02080000090019516 +S315080017B00320029003940494042005906946214866 +S315080017C000F0AFFB07B0F0BD10B500F0A2F890240A +S315080017D0E40520212000FFF76AFF194800F059FBAD +S315080017E0184800F056FB200000F053FB80208004C8 +S315080017F0FFF73BFF8024A4022000FFF736FFA00076 +S31508001800FFF723FF6000FFF720FF2000FFF71DFF0B +S315080018100120FFF73AFF10BD0010024004100240F5 +S31508001820FFF8FFFFFF7FC2FF141002401C100240A2 +S31508001830181002400020024058210008006CDC0203 +S31508001840000800480004004897480168974A0A407B +S31508001850026070479448016801220A430260704793 +S315080018609148006841080800C007C00F70478E49B4 +S315080018700A68F8239A43C0001043086070478C48EA +S3150800188001688C4A0A40026070478948016801224B +S3150800189091430160704786480168042291430160BC +S315080018A0704783490A68F8239A43C00010430860C2 +S315080018B070478F48006841080800C007C00F704786 +S315080018C08C4801680C20084070478A480168F02057 +S315080018D00840704787480168E020C0000840704704 +S315080018E085490968032282400A400006104370476A +S315080018F080480168C0204002084070477D4801685A +S31508001900F0208003084070477C4800680007000FF5 +S31508001910704738B5FFF79EFF1020FFF7A8FF624C07 +S315080019207748606077482060FFF78EFF002565607E +S315080019306563FFF7A4FF1020FFF7B3FFFFF7A5FFC6 +S31508001940FFF7A9FFE5622563A068FF2109040143A3 +S31508001950A160A560012032BD10B5040000F07FF833 +S31508001960206000F08BF8606000F094F8A06010BD6D +S3150800197038B504000025002C21D12846FFF7B0FF12 +S31508001980012804D014D3032805D00AD310E000F0A8 +S3150800199066F8050013E0FFF763FF00280FD05A4DDD +S315080019A00DE0FFF786FF002809D080252D0206E006 +S315080019B000F055F800F062F800F06CF80500102CFD +S315080019C024D11020FFF78CFF5049884206D0504991 +S315080019D088420DD04F49884204D010E000F03FF805 +S315080019E0050013E0FFF73CFF00280FD0464D0DE039 +S315080019F0FFF75FFF002809D080252D0206E000F0DA +S31508001A002EF800F03BF800F045F80500122C24D11A +S31508001A101220FFF765FF4049884206D03F498842B1 +S31508001A200DD03F49884204D010E000F018F80500B0 +S31508001A3013E0FFF715FF00280FD0334D0DE0FFF731 +S31508001A4038FF002809D080252D0206E000F007F8A7 +S31508001A5000F014F800F01EF80500280032BD80B525 +S31508001A60FFF72EFF082802D00C2803D004E000F068 +S31508001A7023F802BD2B4802BD234802BD10B5040059 +S31508001A80FFF723FF284900090007000F085CC44038 +S31508001A90200010BD10B50400FFF71CFF2349000AFB +S31508001AA0085CC440200010BD00100240FFFFFBFF89 +S31508001AB034100240FFFFFEFF38B5FFF719FFC021BB +S31508001AC04902884201D1174D00E00F4D0F24FFF758 +S31508001AD01BFF2040401C0100280000F029F80500E3 +S31508001AE0FFF70CFF800C0440A41C6543280032BD98 +S31508001AF02010024004100240301002402C10024010 +S31508001B000CF8FFF0FFFFF6FE00127A000000011045 +S31508001B100000021000000310000004120000081262 +S31508001B2000000C12006CDC0248210008A023000803 +S31508001B300022030A8B420BD203098B4219D24308AF +S31508001B408B422ED2411A00D20146524110467047A6 +S31508001B50FF2209023FD012068B4205D31212090250 +S31508001B608B4201D31212090203098B4219D300E0F2 +S31508001B70090AC3098B4201D3CB01C01A5241830912 +S31508001B808B4201D38B01C01A524143098B4201D3C0 +S31508001B904B01C01A524103098B4201D30B01C01AEB +S31508001BA05241C3088B4201D3CB00C01A5241830865 +S31508001BB08B4201D38B00C01A524143088B4201D392 +S31508001BC04B00C01A5241884200D3401A5241CFD224 +S31508001BD001461046704708B500F0ECF908BD80B517 +S31508001BE0FEF723FFFCE7FEE701680800C007C00F01 +S31508001BF0704742683D4B13401943416070478268FD +S31508001C003B4B134019438160704730B50400080008 +S31508001C1019004B0880252D02AA420CD14000C01895 +S31508001C20FFF786FF80B23349014040084007400F5E +S31508001C300143E16030BDC018FFF77AFF80B2E0606B +S31508001C4030BDFEB505000E0000242700FFF7CCFFC7 +S31508001C50002849D128683049014070680843F1686E +S31508001C60014330690843B16901432960B168280016 +S31508001C70FFF7BFFF71692800FFF7C1FF1E488542BD +S31508001C8004D12046FFF774FE040022E01B48854273 +S31508001C9004D11020FFF76CFE04001AE018488542AC +S31508001CA004D11220FFF764FE040012E015488542AD +S31508001CB00BD01548854208D01448854205D01448EB +S31508001CC0854202D01348854203D16846FFF744FE91 +S31508001CD0029C002C08D03368002B05D00127B26976 +S31508001CE021002800FFF791FF3800FEBDFFCFFFFF58 +S31508001CF0FFFCFFFFF0FF00000038014000440040F1 +S31508001D0000480040004C00400050004000140140CC +S31508001D1000180140001C0140F369FFEF0148006804 +S31508001D20704700000401002010B4C20018231340B5 +S31508001D30FF249C40E2438901C9B2994003000BD5B0 +S31508001D40194B0007000F0838800880001818036828 +S31508001D501A401143016007E014489B089B00C0180D +S31508001D6003681A401143016010BC704710B5401E45 +S31508001D7080214904884201D3012010BD0C4C6060C3 +S31508001D8003210020C043FFF7CFFF0020A0600720F3 +S31508001D902060002010BD80B5FFF7C6FF01BD80B5E5 +S31508001DA0FFF7E4FF02BD00001CED00E000E400E0E0 +S31508001DB010E000E080B5FEF7FBFDFEF732FEFEF709 +S31508001DC0DFFBFEF76BFFFEF7A9FF00F0F5F801BD94 +S31508001DD080B5FEF72AFEFEF7E4FBFEF7ACFF00F03F +S31508001DE0F4F801BD014908607047000004010020AD +S31508001DF010B40B004B4301685C00E418A14353433D +S31508001E000B43036010BC704743688B435143194327 +S31508001E104160704710B40B004B4381685C00E418BE +S31508001E20A14353430B43836010BC704710B40B00A7 +S31508001E304B43C1685C00E418A14353430B43C3609A +S31508001E4010BC704710B40B004B434B434B43016A1D +S31508001E501C01E41AA14353430B43036210BC7047A9 +S31508001E6010B4090A0B004B434B434B43416A1C0110 +S31508001E70E41AA14353430B43436210BC70474749D6 +S31508001E800A6810430860704744490A6882430A6032 +S31508001E90704738B501249021C905884207D16504E1 +S31508001EA02800FFF7ECFF2800FFF7EEFF37E03C4974 +S31508001EB0884207D1A5042800FFF7E1FF2800FFF7AD +S31508001EC0E3FF2CE03749884207D1E5042800FFF7ED +S31508001ED0D6FF2800FFF7D8FF21E03349884207D10B +S31508001EE025052800FFF7CBFF2800FFF7CDFF16E0F2 +S31508001EF02E49884207D165052800FFF7C0FF28004C +S31508001F00FFF7C2FF0BE02A49884207D1A50528003A +S31508001F10FFF7B5FF2800FFF7B7FF00E00024200011 +S31508001F2032BDF8B5002607000D0027E0210038006D +S31508001F30FFF796FF21E00124B4400C401DD06A68E3 +S31508001F4021003800FFF754FF6868012801D00228ED +S31508001F5004D1AA6821003800FFF75CFF2A6921002E +S31508001F603800FFF763FF6868022806D16A69FF2C04 +S31508001F70DCD821003800FFF765FF761C29680800C1 +S31508001F80F040D8D138006A68012A01D0022A02D165 +S31508001F90EA68FFF739FF0120F2BD00002810024069 +S31508001FA00004004800080048000C004800100048DB +S31508001FB0001400487047FEE780B5012013490870F1 +S31508001FC000F01BF800F001F801BD10B5FEF706FF9A +S31508001FD0012811D00D4C207801280DD1FEF7EAFA18 +S31508001FE0A16862688918FA2252008918884203D3C0 +S31508001FF000202070FEF7E0FC10BD10B5034C2078D9 +S31508002000012802D1FEF7D6FA606010BDF00500205F +S31508002010002800080008000005000000003000083D +S31508002020000800000600000000380008000800004C +S315080020300700000000400008000800000800000033 +S3150800204000480008000800000900000000500008C9 +S31508002050000800000A0000000058000800080000F8 +S315080020600B00000000600008000800000C000000DB +S3150800207000680008000800000D0000000070000855 +S31508002080000800000E0000000078000800080000A4 +S315080020900F0000000080000800800000100000000B +S315080020A000000108008000001100000000800108FF +S315080020B000800000120000000000020800800000F6 +S315080020C013000000008002080080000014000000D1 +S315080020D000000308008000001500000000800308C7 +S315080020E000800000160000001148016801220A431A +S315080020F0026041680F4A0A40426001680E4A0A4077 +S31508002100026001680D4A0A40026041680C4A0A40AA +S315080021104260C16A0F229143C162016B094A0A40B3 +S315080021200263416B0122914341630021816070473C +S31508002130001002400CB8FF08FFFFF6FEFFFFFBFF8A +S31508002140FFFFC0FFACFEF0FF00000000000000002B +S315080021500102030406070809433A5C576F726B5C71 +S31508002160736F6674776172655C4F70656E424C5426 +S315080021705C5461726765745C44656D6F5C41524D71 +S31508002180434D305F53544D333246305F4E75636C62 +S31508002190656F5F4630393152435F4941525C426F41 +S315080021A06F745C6D61696E2E63000000433A5C577C +S315080021B06F726B5C736F6674776172655C4F70657E +S315080021C06E424C545C5461726765745C536F7572E9 +S315080021D063655C41524D434D305F53544D3332462F +S315080021E0305C72733233322E63000000433A5C5718 +S315080021F06F726B5C736F6674776172655C4F70653E +S315080022006E424C545C5461726765745C536F7572A8 +S3150800221063655C41524D434D305F53544D333246EE +S31508002220305C63616E2E6300094880F308880420D9 +S315080022300168090E1F22914205D106480121016055 +S315080022400548002101600548804705480047000009 +S31508002250080A00201810024000000140E920000882 +S315080022609523000870B40123002413E00168001DBB +S31508002270194202D04D466D1E49190C60091D121FE0 +S31508002280042AFAD20D00960701D50C80AD1C1A4017 +S3150800229000D02C700268001D002AE7D170BC704778 +S315080022A030B501684118446862088A188368E407EB +S315080022B004D54C461B1901E0641C06D191420BD08B +S315080022C00C7864B2491C0D78491C1D705B1C002CE7 +S315080022D0F2D4641EF7D5F1E70C3030BD10B50749C6 +S315080022E079441831064C7C44163404E0081D0A6803 +S315080022F0891888470100A142F8D110BD2C000000BA +S31508002300480000000502060206030703080309033E +S3150800231009040A040B040C040C050D050E050F052B +S315080023200F061006100710083DFFFFFF0005000006 +S31508002330080100200000000069FFFFFF9C00000064 +S3150800234010000000C000002000F00DF8002801D0A1 +S31508002350FFF7C4FF00BF00BF002000BF00BFFFF7A4 +S31508002360A8F900F002F80120704780B500F002F8DD +S3150800237001BDFEE70746384600F002F8FBE7FEE730 +S3150800238080B500BF00BF024A11001820ABBEFBE7AC +S315080023902600020000BF00BF00BF00BFFFF7D4FF42 +S315080023A00000000001020304FEE7FEE7FEE7FEE781 +S315080023B0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7E7 +S315080023C0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7D7 +S315080023D0FEE7FEE7FEE7FEE70004BC0002127A000D +S705080023953A diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.cspy.bat b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.cspy.bat index 78d49dbf..dcd3bd86 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.cspy.bat +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.cspy.bat @@ -25,7 +25,7 @@ if not "%~1" == "" goto debugFile @echo on -"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\common\bin\cspybat" -f "C:\Work\software\OpenBLT_uart_refactoring\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.general.xcl" --backend -f "C:\Work\software\OpenBLT_uart_refactoring\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.driver.xcl" +"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\common\bin\cspybat" -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.general.xcl" --backend -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.driver.xcl" @echo off goto end @@ -34,7 +34,7 @@ goto end @echo on -"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\common\bin\cspybat" -f "C:\Work\software\OpenBLT_uart_refactoring\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Work\software\OpenBLT_uart_refactoring\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.driver.xcl" +"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\common\bin\cspybat" -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\settings\stm32f091.Debug.driver.xcl" @echo off :end \ No newline at end of file diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.general.xcl b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.general.xcl index 88b5f58b..fee72ae7 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.general.xcl +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.Debug.general.xcl @@ -2,7 +2,7 @@ "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\arm\bin\armstlink2.dll" -"C:\Work\software\OpenBLT_uart_refactoring\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\..\bin\openblt_stm32f091.out" +"C:\Work\software\OpenBLT\Target\Demo\ARMCM0_STM32F0_Nucleo_F091RC_IAR\Boot\ide\..\bin\openblt_stm32f091.out" --plugin="C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\arm\bin\armbat.dll" diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.dbgdt b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.dbgdt index 9eb2dc2d..c3f4d0c6 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.dbgdt +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.dbgdt @@ -317,7 +317,7 @@ 14 - 11 + 20 1 @@ -327,7 +327,7 @@ 1 1 1 - 05000000030010860000020000000E810000010000004681000002000000 + 07000000030010860000030000000E810000010000004681000003000000 0000 @@ -1027,7 +1027,7 @@ Main - 00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000062000000FFFEFF000000000000000000000000000100000001000000018001E100000000000063000000FFFEFF000000000000000000000000000100000001000000018003E100000000000065000000FFFEFF0000000000000000000000000001000000010000000180008100000000000046000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000000068000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004006A000000FFFEFF000000000000000000000000000100000001000000018022E100000000040069000000FFFEFF000000000000000000000000000100000001000000018025E10000000004006C000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE10000000004006F000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040070000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF00960000000000000000000180218100000000040059000000FFFEFF000000000000000000000000000100000001000000018024E10000000000006B000000FFFEFF000000000000000000000000000100000001000000018028E10000000004006D000000FFFEFF000000000000000000000000000100000001000000018029E10000000000006E000000FFFEFF0000000000000000000000000001000000010000000180028100000000000048000000FFFEFF000000000000000000000000000100000001000000018029810000000000005D000000FFFEFF000000000000000000000000000100000001000000018027810000000000005B000000FFFEFF000000000000000000000000000100000001000000018028810000000000005C000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040055000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040056000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000000004C000000FFFEFF00000000000000000000000000010000000100000001800C810000000000004D000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000061000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F8100000000000057000000FFFEFF0000000000000000000000000001000000010000000180208100000000000058000000FFFEFF000000000000000000000000000100000001000000018046810000000002005F000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF020000 + 00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000062000000FFFEFF000000000000000000000000000100000001000000018001E100000000000063000000FFFEFF000000000000000000000000000100000001000000018003E100000000000065000000FFFEFF0000000000000000000000000001000000010000000180008100000000000046000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000000068000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004006A000000FFFEFF000000000000000000000000000100000001000000018022E100000000040069000000FFFEFF000000000000000000000000000100000001000000018025E10000000000006C000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE10000000004006F000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040070000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF00960000000000000000000180218100000000040059000000FFFEFF000000000000000000000000000100000001000000018024E10000000000006B000000FFFEFF000000000000000000000000000100000001000000018028E10000000004006D000000FFFEFF000000000000000000000000000100000001000000018029E10000000000006E000000FFFEFF0000000000000000000000000001000000010000000180028100000000000048000000FFFEFF000000000000000000000000000100000001000000018029810000000000005D000000FFFEFF000000000000000000000000000100000001000000018027810000000000005B000000FFFEFF000000000000000000000000000100000001000000018028810000000000005C000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040055000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040056000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000000004C000000FFFEFF00000000000000000000000000010000000100000001800C810000000000004D000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000061000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F8100000000000057000000FFFEFF0000000000000000000000000001000000010000000180208100000000000058000000FFFEFF000000000000000000000000000100000001000000018046810000000002005F000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF020000 34050 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.wsdt b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.wsdt index 1423aa8a..4f28f631 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.wsdt +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/settings/stm32f091.wsdt @@ -161,7 +161,7 @@ 24 1863 2 - + 0 -1 @@ -210,7 +210,7 @@ - 172 + 173 30 30 30 @@ -234,7 +234,7 @@ 1 1 1 - 02000000030010860000010000000E810000020000004681000001000000 + 03000000030010860000010000000E810000030000004681000001000000 09000D8400000F84000008840000FFFFFFFF54840000328100001C8100000984000053840000 @@ -243,7 +243,7 @@ 0 0A0000000A0000006E0000006E000000 - 00000000E903000080070000FE030000 + 00000000F00300008007000003040000 4096 0 0 @@ -269,8 +269,8 @@ 4294967295 - 0000000079030000800700002A040000 - 000000003803000080070000E9030000 + 00000000740300008007000025040000 + 000000003F03000080070000F0030000 4096 0 0 @@ -283,7 +283,7 @@ 34052 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 32768 0 0 @@ -306,7 +306,7 @@ 34048 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -319,7 +319,7 @@ 34056 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -333,7 +333,7 @@ 34057 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -347,7 +347,7 @@ 34058 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -361,7 +361,7 @@ 34059 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -375,7 +375,7 @@ 34062 000000003500000022010000E6000000 - 04000000550300007C070000CD030000 + 04000000570300007C070000D6030000 4096 0 0 @@ -459,7 +459,7 @@ 34063 00000000350000000601000096010000 - 00000000320000000601000034030000 + 0000000032000000060100003B030000 4096 0 0 @@ -470,7 +470,7 @@ 1 - 0000000010000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A010000340300000100000002000010040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF00000000340300008007000038030000010000000100001004000000010000000000000000000000FFFFFFFF07000000048500000085000008850000098500000A8500000B8500000E850000FFFF02000B004354616262656450616E6500800000010000000000000079030000800700002A040000000000003803000080070000E9030000000000004080005607000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 + 0000000010000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A0100003B0300000100000002000010040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF000000003B030000800700003F030000010000000100001004000000010000000000000000000000FFFFFFFF07000000048500000085000008850000098500000A8500000B8500000E850000FFFF02000B004354616262656450616E65008000000100000000000000740300008007000025040000000000003F03000080070000F0030000000000004080005607000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 CMSIS-Pack @@ -491,7 +491,7 @@ Main - 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000040038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000040041000000FFFEFF000000000000000000000000000100000001000000018002810000000004001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000040030000000FFFEFF000000000000000000000000000100000001000000018027810000000004002E000000FFFEFF000000000000000000000000000100000001000000018028810000000004002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000 + 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000000038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000000003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000000003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000000003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000000041000000FFFEFF000000000000000000000000000100000001000000018002810000000000001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000000030000000FFFEFF000000000000000000000000000100000001000000018027810000000000002E000000FFFEFF000000000000000000000000000100000001000000018028810000000000002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000000001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000 34050 @@ -527,7 +527,7 @@ - 010000000300000001000000000000000000000001000000010000000200000000000000010000000100000000000000280000002800000001000000010000000000000001000000FFFEFF122400570053005F0044004900520024005C002E002E005C006D00610069006E002E00630001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF27013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00330033003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0033003200300032003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0033003200300032003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066D00610069006E002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000000A0100006C000000800700006E030000 + 010000000300000001000000000000000000000001000000010000000200000000000000010000000100000000000000280000002800000001000000010000000000000001000000FFFEFF122400570053005F0044004900520024005C002E002E005C006D00610069006E002E00630001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF27013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00330033003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0032003400320036003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0032003400320036003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066D00610069006E002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000000A010000670000008007000070030000 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/stm32f091.dep b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/stm32f091.dep index 59c0ccf9..58796ebd 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/stm32f091.dep +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/ide/stm32f091.dep @@ -6,385 +6,384 @@ Debug $PROJ_DIR$\..\lib\CMSIS\Include\core_cm0.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_can.h - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_can.c - $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal.h $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_can.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f091xc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_can.c $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.o - $PROJ_DIR$\..\stm32f091_flash.icf - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c - $PROJ_DIR$\..\lib\stm32f0xx_conf.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_can.__cstat.et - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c - $PROJ_DIR$\..\obj\stm32f0xx_rcc.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c - $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.o - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_cec.h - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.__cstat.et - $PROJ_DIR$\..\lib\system_stm32f0xx.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_syscfg.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o - $PROJ_DIR$\..\obj\stm32f0xx_misc.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.o - $PROJ_DIR$\..\lib\stm32f0xx.h - $PROJ_DIR$\..\obj\stm32f0xx_dma.o - $PROJ_DIR$\..\obj\boot.o - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h - $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - $PROJ_DIR$\..\obj\stm32f0xx_misc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_adc.o - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o - $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h - $TOOLKIT_DIR$\inc\c\intrinsics.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_misc.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c - $PROJ_DIR$\..\obj\stm32f091.pbd - $TOOLKIT_DIR$\lib\shb_l.a - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - $PROJ_DIR$\..\obj\main.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_pwr.pbi - $TOOLKIT_DIR$\inc\c\stdio.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_can.h - $TOOLKIT_DIR$\inc\c\ctype.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f091xc.h + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dac.h - $PROJ_DIR$\..\obj\stm32f0xx_i2c.o - $PROJ_DIR$\..\obj\timer.o - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi - $TOOLKIT_DIR$\inc\c\DLib_Threads.h - $PROJ_DIR$\..\obj\hooks.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal.__cstat.et - $PROJ_DIR$\..\obj\cpu_comp.__cstat.et - $PROJ_DIR$\..\obj\cop.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c - $PROJ_DIR$\..\obj\nvm.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.__cstat.et - $PROJ_DIR$\..\obj\cpu.o - $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.xcl + $PROJ_DIR$\..\obj\stm32f0xx_i2c.o $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.o + $TOOLKIT_DIR$\inc\c\DLib_Threads.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h + $PROJ_DIR$\..\obj\timer.o + $TOOLKIT_DIR$\inc\c\ctype.h + $PROJ_DIR$\..\obj\hooks.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.__cstat.et $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_flash.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.__cstat.et + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_can.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal.__cstat.et $TOOLKIT_DIR$\inc\c\iar_intrinsics_common.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal.xcl $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.__cstat.et - $PROJ_DIR$\..\obj\com.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.xcl - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et - $PROJ_DIR$\..\obj\nvm.xcl - $PROJ_DIR$\..\obj\flash.xcl - $PROJ_DIR$\..\obj\net.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.__cstat.et - $PROJ_DIR$\..\obj\file.xcl - $PROJ_DIR$\..\obj\file.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.xcl - $PROJ_DIR$\..\obj\cpu.xcl - $PROJ_DIR$\..\obj\xcp.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.xcl - $PROJ_DIR$\..\obj\hooks.xcl + $PROJ_DIR$\..\obj\cop.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c + $PROJ_DIR$\..\obj\cpu.o + $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.xcl + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi + $PROJ_DIR$\..\obj\cpu_comp.__cstat.et + $PROJ_DIR$\..\obj\nvm.o $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.xcl - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h - $PROJ_DIR$\..\obj\can.__cstat.et - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.xcl $PROJ_DIR$\..\obj\cop.xcl $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rcc.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c - $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.xcl - $TOOLKIT_DIR$\inc\c\iccarm_builtin.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl - $PROJ_DIR$\..\obj\xcp.xcl - $PROJ_DIR$\..\obj\cpu_comp.xcl - $PROJ_DIR$\..\obj\main.xcl - $TOOLKIT_DIR$\lib\rt6M_tl.a - $PROJ_DIR$\..\obj\backdoor.xcl - $PROJ_DIR$\..\obj\file.o - $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.xcl - $PROJ_DIR$\..\obj\com.__cstat.et - $PROJ_DIR$\..\obj\system_stm32f0xx.xcl - $PROJ_DIR$\..\obj\nvm.__cstat.et - $PROJ_DIR$\..\obj\assert.__cstat.et - $PROJ_DIR$\..\obj\uart.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.xcl + $PROJ_DIR$\..\obj\nvm.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.xcl + $PROJ_DIR$\..\obj\xcp.o + $PROJ_DIR$\..\obj\flash.xcl + $PROJ_DIR$\..\obj\net.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.xcl + $PROJ_DIR$\..\obj\com.xcl + $PROJ_DIR$\..\obj\file.__cstat.et + $PROJ_DIR$\..\obj\cpu.xcl + $PROJ_DIR$\..\obj\hooks.xcl + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h + $PROJ_DIR$\..\obj\can.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.xcl + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h + $PROJ_DIR$\..\obj\file.xcl $PROJ_DIR$\..\obj\can.xcl - $PROJ_DIR$\..\obj\net.o - $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et - $PROJ_DIR$\..\obj\uart.o - $PROJ_DIR$\..\obj\cpu_comp.o - $PROJ_DIR$\..\obj\led.o $PROJ_DIR$\..\obj\xcp.__cstat.et - $PROJ_DIR$\..\obj\com.o + $PROJ_DIR$\..\obj\led.xcl + $PROJ_DIR$\..\obj\file.o + $PROJ_DIR$\..\obj\main.xcl + $PROJ_DIR$\..\obj\uart.xcl + $PROJ_DIR$\..\obj\uart.o $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.xcl $PROJ_DIR$\..\bin\openblt_stm32f091.out $PROJ_DIR$\..\obj\timer.xcl - $PROJ_DIR$\..\obj\led.xcl + $PROJ_DIR$\..\obj\cpu_comp.xcl + $PROJ_DIR$\..\obj\backdoor.xcl $PROJ_DIR$\..\obj\assert.o $PROJ_DIR$\..\obj\stm32f0xx_misc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.pbi - $PROJ_DIR$\..\obj\hooks.o - $PROJ_DIR$\..\obj\timer.pbi - $PROJ_DIR$\..\boot.h - $PROJ_DIR$\..\obj\boot.xcl - $PROJ_DIR$\..\obj\flash.__cstat.et - $PROJ_DIR$\..\header.h - $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi - $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_tim.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_spi.pbi - $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.__cstat.et - $PROJ_DIR$\..\obj\startup_stm32f091.o - $PROJ_DIR$\..\obj\stm32f0xx_can.pbi + $PROJ_DIR$\..\obj\xcp.xcl + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c + $TOOLKIT_DIR$\inc\c\iccarm_builtin.h + $PROJ_DIR$\..\obj\assert.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et + $PROJ_DIR$\..\obj\cpu_comp.o + $PROJ_DIR$\..\obj\com.o + $PROJ_DIR$\..\obj\led.o + $PROJ_DIR$\..\obj\net.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + $TOOLKIT_DIR$\lib\rt6M_tl.a + $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.xcl + $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.__cstat.et + $PROJ_DIR$\..\obj\com.__cstat.et + $PROJ_DIR$\..\obj\system_stm32f0xx.xcl + $PROJ_DIR$\..\obj\nvm.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_dma.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c - $PROJ_DIR$\..\obj\stm32f0xx_pwr.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_usart.o - $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.o + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.xcl - $PROJ_DIR$\..\obj\stm32f0xx_cec.pbi - $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c + $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.__cstat.et + $PROJ_DIR$\..\obj\timer.pbi + $PROJ_DIR$\..\header.h + $PROJ_DIR$\..\obj\stm32f0xx_spi.pbi $PROJ_DIR$\..\timer.h + $PROJ_DIR$\..\obj\boot.xcl + $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et + $PROJ_DIR$\..\obj\hooks.o + $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + $PROJ_DIR$\..\obj\stm32f0xx_pwr.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_crc.pbi $PROJ_DIR$\..\obj\stm32f0xx_cec.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et - $PROJ_DIR$\..\boot.c - $PROJ_DIR$\..\obj\main.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_can.xcl - $PROJ_DIR$\..\bin\demoprog_stm32f091.out - $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.pbi + $PROJ_DIR$\..\boot.h + $PROJ_DIR$\..\obj\stm32f0xx_tim.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_can.pbi + $PROJ_DIR$\..\obj\stm32f0xx_ll_dma.o + $PROJ_DIR$\..\obj\startup_stm32f091.o + $PROJ_DIR$\..\obj\stm32f0xx_cec.pbi + $PROJ_DIR$\..\obj\stm32f0xx_usart.o + $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi + $PROJ_DIR$\..\obj\flash.__cstat.et $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dma.h - $PROJ_DIR$\..\obj\stm32f0xx_dac.__cstat.et - $TOOLKIT_DIR$\inc\c\DLib_Product_string.h + $PROJ_DIR$\..\obj\uart.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.pbi $PROJ_DIR$\..\obj\system_stm32f0xx.o + $PROJ_DIR$\..\obj\stm32f0xx_crc.o + $PROJ_DIR$\..\obj\stm32f0xx_crs.o + $PROJ_DIR$\..\obj\backdoor.o + $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi + $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et + $PROJ_DIR$\..\boot.c + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_can.xcl + $PROJ_DIR$\..\obj\stm32f0xx_flash.o + $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et + $PROJ_DIR$\..\obj\main.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_ll_rcc.o $PROJ_DIR$\..\obj\stm32f0xx_rcc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et + $TOOLKIT_DIR$\inc\c\DLib_Product_string.h $TOOLKIT_DIR$\inc\c\string.h - $PROJ_DIR$\..\obj\assert.xcl $PROJ_DIR$\..\obj\stm32f0xx_crs.__cstat.et - $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et - $PROJ_DIR$\..\obj\backdoor.o - $PROJ_DIR$\..\obj\stm32f0xx_flash.o + $PROJ_DIR$\..\obj\stm32f0xx_dac.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_flash.__cstat.et $PROJ_DIR$\..\obj\boot.pbi + $PROJ_DIR$\..\bin\demoprog_stm32f091.out $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.xcl - $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et + $PROJ_DIR$\..\obj\assert.xcl $PROJ_DIR$\..\obj\openblt_stm32f091.map $PROJ_DIR$\..\obj\stm32f0xx_rtc.__cstat.et $PROJ_DIR$\..\obj\can.o $PROJ_DIR$\..\obj\stm32f0xx_crs.pbi - $PROJ_DIR$\..\obj\uart.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.pbi - $PROJ_DIR$\..\obj\stm32f0xx_crc.o - $PROJ_DIR$\..\obj\stm32f0xx_crs.o - $PROJ_DIR$\..\obj\net.__cstat.et - $PROJ_DIR$\..\obj\backdoor.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.xcl - $PROJ_DIR$\..\obj\cop.__cstat.et - $PROJ_DIR$\..\obj\timer.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et - $PROJ_DIR$\..\obj\boot.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et - $PROJ_DIR$\..\obj\led.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dac.o - $TOOLKIT_DIR$\lib\m6M_tl.a - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_rcc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_bus.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_gpio.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_system.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_dma.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_usart.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_utils.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_exti.h - $PROJ_DIR$\..\..\..\..\Source\com.h - $PROJ_DIR$\..\..\..\..\Source\file.c - $PROJ_DIR$\..\..\..\..\Source\file.h - $PROJ_DIR$\..\..\..\..\Source\can.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.h - $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h - $PROJ_DIR$\..\led.h - $PROJ_DIR$\..\hooks.c - $PROJ_DIR$\..\main.c - $PROJ_DIR$\..\lib\system_stm32f0xx.c - $PROJ_DIR$\..\blt_conf.h - $PROJ_DIR$\..\led.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\can.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\types.h - $PROJ_DIR$\..\..\..\..\Source\assert.c - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\uart.c - $PROJ_DIR$\..\..\..\..\Source\backdoor.c - $PROJ_DIR$\..\..\..\..\Source\backdoor.h - $PROJ_DIR$\..\..\..\..\Source\boot.c - $PROJ_DIR$\..\..\..\..\Source\boot.h - $PROJ_DIR$\..\..\..\..\Source\cop.c - $PROJ_DIR$\..\..\..\..\Source\com.c - $PROJ_DIR$\..\..\..\..\Source\cop.h - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c - $PROJ_DIR$\..\..\..\..\Source\assert.h - $PROJ_DIR$\..\..\..\..\Source\cpu.h - $PROJ_DIR$\..\startup_stm32f091.s - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c - $PROJ_DIR$\..\obj\stm32f0xx_adc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.o - $PROJ_DIR$\..\obj\stm32f0xx_can.o - $TOOLKIT_DIR$\inc\c\yvals.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o - $PROJ_DIR$\..\bin\openblt_stm32f091.srec - $PROJ_DIR$\..\obj\stm32f0xx_pwr.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o - $TOOLKIT_DIR$\inc\c\stdint.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o - $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h - $PROJ_DIR$\..\obj\stm32f0xx_hal_can.o $PROJ_DIR$\..\lib\cmsis\core_cm0.h + $TOOLKIT_DIR$\lib\m6M_tl.a + $PROJ_DIR$\..\obj\stm32f0xx_adc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o + $PROJ_DIR$\..\obj\net.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dac.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o + $PROJ_DIR$\..\obj\stm32f0xx_pwr.o + $TOOLKIT_DIR$\inc\c\stdint.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_can.o + $TOOLKIT_DIR$\inc\c\yvals.h $PROJ_DIR$\..\obj\stm32f0xx_spi.__cstat.et + $PROJ_DIR$\..\obj\cop.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\uart.c + $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.o + $PROJ_DIR$\..\obj\backdoor.__cstat.et + $PROJ_DIR$\..\obj\timer.__cstat.et + $PROJ_DIR$\..\obj\boot.__cstat.et + $PROJ_DIR$\..\obj\led.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_can.o + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h + $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h $PROJ_DIR$\..\obj\stm32f0xx_exti.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.xcl + $PROJ_DIR$\..\bin\openblt_stm32f091.srec $TOOLKIT_DIR$\lib\dl6M_tln.a $PROJ_DIR$\..\obj\stm32f0xx_tim.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c + $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi + $PROJ_DIR$\..\timer.c $PROJ_DIR$\..\obj\cpu.__cstat.et - $PROJ_DIR$\..\bin\demoprog_stm32f091.srec - $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h + $PROJ_DIR$\..\obj\stm32f0xx_hal.o $PROJ_DIR$\..\obj\stm32f0xx_syscfg.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_gpio.o + $TOOLKIT_DIR$\inc\c\ysizet.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.o + $PROJ_DIR$\..\obj\flash.o + $PROJ_DIR$\..\obj\stm32f0xx_rtc.o + $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h + $TOOLKIT_DIR$\inc\c\DLib_Defaults.h $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_adc.h $PROJ_DIR$\..\obj\stm32f0xx_usart.pbi - $PROJ_DIR$\..\obj\flash.o - $PROJ_DIR$\..\obj\stm32f0xx_gpio.o - $TOOLKIT_DIR$\inc\c\DLib_Defaults.h - $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi - $TOOLKIT_DIR$\inc\c\ysizet.h - $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi - $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi - $PROJ_DIR$\..\..\..\..\Source\net.h - $TOOLKIT_DIR$\inc\c\xencoding_limits.h $TOOLKIT_DIR$\inc\c\DLib_Product.h $TOOLKIT_DIR$\inc\c\cmsis_iar.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c - $PROJ_DIR$\..\..\..\..\Source\timer.h - $PROJ_DIR$\..\obj\stm32f0xx_rtc.o - $PROJ_DIR$\..\..\..\..\Source\usb.h - $PROJ_DIR$\..\obj\stm32f0xx_hal.o $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_exti.h - $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.o $PROJ_DIR$\..\obj\stm32f0xx_tim.o $PROJ_DIR$\..\obj\stm32f0xx_gpio.pbi - $PROJ_DIR$\..\timer.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi + $PROJ_DIR$\..\bin\demoprog_stm32f091.srec + $TOOLKIT_DIR$\inc\c\xencoding_limits.h $PROJ_DIR$\..\obj\stm32f0xx_comp.o - $PROJ_DIR$\..\..\..\..\Source\uart.h + $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi $PROJ_DIR$\..\obj\stm32f0xx_spi.o $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crs.h + $PROJ_DIR$\..\obj\stm32f0xx_ll_usart.o $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.o $TOOLKIT_DIR$\inc\c\ycheck.h - $PROJ_DIR$\..\..\..\..\Source\xcp.c $PROJ_DIR$\..\obj\stm32f0xx_dma.pbi - $PROJ_DIR$\..\obj\stm32f0xx_exti.o - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h - $PROJ_DIR$\..\..\..\..\Source\plausibility.h - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi - $PROJ_DIR$\..\obj\stm32f0xx_cec.o - $PROJ_DIR$\..\..\..\..\Source\xcp.h - $PROJ_DIR$\..\..\..\..\Source\nvm.h - $PROJ_DIR$\..\..\..\..\Source\net.c - $PROJ_DIR$\..\obj\rs232.xcl $PROJ_DIR$\..\obj\rs232.__cstat.et - $PROJ_DIR$\..\..\..\..\Source\rs232.h + $PROJ_DIR$\..\obj\stm32f0xx_exti.o + $PROJ_DIR$\..\obj\rs232.xcl + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi $PROJ_DIR$\..\obj\rs232.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h + $PROJ_DIR$\..\obj\stm32f0xx_cec.o + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_rcc.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_system.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_bus.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_usart.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_utils.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_dma.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_exti.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_ll_gpio.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + $PROJ_DIR$\..\..\..\..\Source\cop.h + $PROJ_DIR$\..\..\..\..\Source\cpu.h + $PROJ_DIR$\..\..\..\..\Source\file.c + $PROJ_DIR$\..\..\..\..\Source\file.h + $PROJ_DIR$\..\..\..\..\Source\assert.h + $PROJ_DIR$\..\startup_stm32f091.s + $PROJ_DIR$\..\..\..\..\Source\boot.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\can.c + $PROJ_DIR$\..\led.c $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\rs232.c + $PROJ_DIR$\..\..\..\..\Source\backdoor.h + $PROJ_DIR$\..\..\..\..\Source\com.c + $PROJ_DIR$\..\led.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c + $PROJ_DIR$\..\main.c + $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h + $PROJ_DIR$\..\blt_conf.h + $PROJ_DIR$\..\hooks.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\types.h + $PROJ_DIR$\..\lib\system_stm32f0xx.c + $PROJ_DIR$\..\..\..\..\Source\boot.h + $PROJ_DIR$\..\..\..\..\Source\com.h + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c + $PROJ_DIR$\..\..\..\..\Source\cop.c + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.h + $PROJ_DIR$\..\..\..\..\Source\assert.c + $PROJ_DIR$\..\..\..\..\Source\can.h + $PROJ_DIR$\..\..\..\..\Source\net.c + $PROJ_DIR$\..\lib\system_stm32f0xx.h + $PROJ_DIR$\..\..\..\..\Source\timer.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.o + $PROJ_DIR$\..\..\..\..\Source\nvm.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c + $PROJ_DIR$\..\lib\stm32f0xx_conf.h + $PROJ_DIR$\..\..\..\..\Source\xcp.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.o + $PROJ_DIR$\..\..\..\..\Source\rs232.h + $PROJ_DIR$\..\..\..\..\Source\xcp.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_can.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_ll_gpio.o + $PROJ_DIR$\..\obj\stm32f0xx_rcc.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c + $PROJ_DIR$\..\..\..\..\Source\net.h + $PROJ_DIR$\..\stm32f091_flash.icf + $PROJ_DIR$\..\obj\stm32f0xx_ll_exti.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.__cstat.et + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_cec.h + $PROJ_DIR$\..\..\..\..\Source\plausibility.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + $PROJ_DIR$\..\..\..\..\Source\usb.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h + $PROJ_DIR$\..\obj\stm32f0xx_misc.o + $PROJ_DIR$\..\obj\stm32f0xx_ll_utils.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_misc.h + $PROJ_DIR$\..\obj\stm32f0xx_misc.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_syscfg.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o + $PROJ_DIR$\..\obj\stm32f0xx_pwr.pbi + $PROJ_DIR$\..\obj\boot.o + $TOOLKIT_DIR$\inc\c\stdio.h + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o + $PROJ_DIR$\..\obj\stm32f0xx_adc.o + $PROJ_DIR$\..\lib\stm32f0xx.h + $TOOLKIT_DIR$\inc\c\intrinsics.h + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h + $TOOLKIT_DIR$\lib\shb_l.a + $PROJ_DIR$\..\obj\stm32f091.pbd + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c + $PROJ_DIR$\..\obj\main.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h + $PROJ_DIR$\..\obj\stm32f0xx_dma.o [ROOT_NODE] ILINK - 168 227 + 95 178 @@ -393,21 +392,21 @@ ICCARM - 313 - - - __cstat - 112 + 185 BICOMP - 197 + 121 + + + __cstat + 84 ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 @@ -416,136 +415,21 @@ ICCARM - 318 - - - __cstat - 29 + 192 BICOMP - 207 + 162 + + + __cstat + 321 ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c - - - ICCARM - 345 - - - __cstat - 90 - - - BICOMP - 108 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c - - - ICCARM - 316 - - - __cstat - 118 - - - BICOMP - 103 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c - - - ICCARM - 351 - - - __cstat - 137 - - - BICOMP - 89 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c - - - ICCARM - 356 - - - __cstat - 111 - - - BICOMP - 129 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c - - - ICCARM - 309 - - - __cstat - 122 - - - BICOMP - 115 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 @@ -554,366 +438,136 @@ ICCARM - 306 - - - __cstat - 114 - - - BICOMP - 93 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c - - - ICCARM - 352 - - - __cstat - 226 - - - BICOMP 199 - - - - ICCARM - 315 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c - - - ICCARM - 52 - - - __cstat - 182 - BICOMP - 363 + 32 + + + __cstat + 59 ICCARM - 26 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 78 140 361 56 47 81 37 132 65 + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c ICCARM - 245 - - - __cstat - 212 - - - BICOMP - 333 - - - - - ICCARM - 82 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c - - - ICCARM - 364 - - - __cstat - 203 - - - BICOMP - 198 - - - - - ICCARM - 41 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - - - ICCARM - 235 - - - __cstat - 219 - - - BICOMP - 230 - - - - - ICCARM - 355 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - - - ICCARM - 310 - - - __cstat - 200 - - - BICOMP - 233 - - - - - ICCARM - 73 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c - - - ICCARM - 42 - - - __cstat - 204 - - - BICOMP - 173 - - - - - ICCARM - 132 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - - - ICCARM - 62 - - - __cstat - 327 - - - BICOMP - 85 - - - - - ICCARM - 47 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - - - ICCARM - 312 - - - __cstat - 194 - - - BICOMP - 76 - - - - - ICCARM - 78 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c - - - ICCARM - 331 - - - __cstat - 161 - - - BICOMP - 349 - - - - - ICCARM - 133 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - - - ICCARM - 234 - - - __cstat - 186 - - - BICOMP - 202 - - - - - ICCARM - 74 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c - - - ICCARM - 83 - - - __cstat - 243 - - - BICOMP - 335 - - - - - ICCARM - 116 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c - - - ICCARM - 54 - - - __cstat - 190 - - - BICOMP - 359 - - - - - ICCARM - 211 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 346 106 133 116 26 78 140 361 56 47 81 37 132 65 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - - - ICCARM - 307 - - - __cstat 241 BICOMP - 189 + 62 + + + __cstat + 78 ICCARM - 79 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c ICCARM - 360 - - - __cstat - 321 + 191 BICOMP - 336 + 27 + + + __cstat + 65 ICCARM - 346 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 106 133 116 26 78 140 361 56 47 81 37 132 65 + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + + + ICCARM + 221 + + + BICOMP + 28 + + + __cstat + 80 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + + + ICCARM + 188 + + + BICOMP + 66 + + + __cstat + 60 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + + + ICCARM + 217 + + + BICOMP + 46 + + + __cstat + 42 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 @@ -922,21 +576,21 @@ ICCARM - 61 - - - __cstat - 232 + 354 BICOMP - 305 + 184 + + + __cstat + 152 ICCARM - 328 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 + 226 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 @@ -945,21 +599,21 @@ ICCARM - 354 - - - __cstat - 320 + 238 BICOMP - 185 + 127 + + + __cstat + 194 ICCARM - 56 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 47 81 37 132 65 + 370 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 347 52 340 83 343 @@ -968,44 +622,40 @@ ICCARM - 34 - - - __cstat - 209 + 323 BICOMP - 216 + 167 + + + __cstat + 168 ICCARM - 140 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 361 56 47 81 37 132 65 + 58 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 249 370 347 52 340 83 343 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + $PROJ_DIR$\..\bin\openblt_stm32f091.out - ICCARM - 50 + OBJCOPY + 210 - __cstat - 172 - - - BICOMP - 60 + ILINK + 178 - ICCARM - 65 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 + ILINK + 326 99 157 350 180 107 48 50 106 90 222 132 108 366 109 55 248 145 217 192 191 185 199 221 241 188 369 30 138 318 312 348 339 144 327 322 166 240 342 154 34 67 362 113 183 211 @@ -1014,63 +664,44 @@ ICCARM - 195 - - - __cstat - 181 + 147 BICOMP - 329 - - - - - ICCARM - 37 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 132 65 - - - - - $PROJ_DIR$\..\bin\openblt_stm32f091.out - - - ILINK 227 - OBJCOPY - 311 + __cstat + 130 - ILINK - 25 171 221 55 229 166 92 99 163 152 330 174 164 71 160 96 371 188 345 318 316 313 306 351 356 309 75 97 191 24 45 49 38 196 40 32 215 347 57 214 84 128 68 150 246 322 + ICCARM + 340 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 83 343 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c ICCARM - 348 - - - __cstat - 183 + 341 BICOMP - 323 + 344 + + + __cstat + 100 ICCARM - 81 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 37 132 65 + 343 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 @@ -1079,21 +710,44 @@ ICCARM - 343 - - - __cstat - 228 + 223 BICOMP - 210 + 158 + + + __cstat + 179 ICCARM - 361 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 56 47 81 37 132 65 + 249 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + + + ICCARM + 231 + + + BICOMP + 212 + + + __cstat + 142 + + + + + ICCARM + 52 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 340 83 343 @@ -1102,21 +756,21 @@ ICCARM - 55 - - - __cstat - 242 + 350 BICOMP - 224 + 174 + + + __cstat + 202 ICCARM - 179 284 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 176 280 201 + 126 296 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 141 292 128 @@ -1125,542 +779,13 @@ OBJCOPY - 325 + 234 ILINK - 25 55 164 71 188 61 307 364 352 234 235 245 310 54 360 222 331 83 52 50 312 34 343 354 62 348 195 42 214 84 68 150 246 322 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c - - - ICCARM - 196 - - - __cstat - 136 - - - BICOMP - 153 - - - - - ICCARM - 260 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 249 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c - - - ICCARM - 40 - - - __cstat - 123 - - - BICOMP - 138 - - - - - ICCARM - 273 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c - - - ICCARM - 32 - - - __cstat - 100 - - - BICOMP - 238 - - - - - ICCARM - 253 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 249 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c - - - ICCARM - 215 - - - __cstat - 142 - - - BICOMP - 102 - - - - - ICCARM - 248 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c - - - ICCARM - 347 - - - __cstat - 101 - - - BICOMP - 225 - - - - - ICCARM - 262 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 248 249 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - - - ICCARM - 49 - - - __cstat - 98 - - - BICOMP - 146 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c - - - ICCARM - 57 - - - __cstat - 187 - - - BICOMP - 131 - - - - - ICCARM - 248 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 268 254 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - - - ICCARM - 191 - - - __cstat - 48 - - - BICOMP - 117 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c - - - ICCARM - 75 - - - __cstat - 109 - - - BICOMP - 104 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - - - ICCARM - 24 - - - __cstat - 184 - - - BICOMP - 143 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - - - ICCARM - 45 - - - __cstat - 43 - - - BICOMP - 126 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - - - ICCARM - 97 - - - __cstat - 94 - - - BICOMP - 105 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c - - - ICCARM - 38 - - - __cstat - 88 - - - BICOMP - 167 - - - - - ICCARM - 10 279 271 1 19 17 0 314 357 308 332 326 339 8 340 144 11 6 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\..\..\..\Source\file.c - - - ICCARM - 152 - - - __cstat - 125 - - - BICOMP - 124 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 217 357 308 332 326 339 334 213 80 - - - - - $PROJ_DIR$\..\hooks.c - - - ICCARM - 174 - - - __cstat - 87 - - - BICOMP - 130 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 280 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 253 - - - - - $PROJ_DIR$\..\main.c - - - ICCARM - 71 - - - __cstat - 206 - - - BICOMP - 149 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 248 249 254 268 262 253 - - - - - $PROJ_DIR$\..\lib\system_stm32f0xx.c - - - ICCARM - 214 - - - __cstat - 220 - - - BICOMP - 155 - - - - - ICCARM - 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\led.c - - - ICCARM - 164 - - - __cstat - 244 - - - BICOMP - 170 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 280 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 253 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c - - - ICCARM - 163 - - - __cstat - 91 - - - BICOMP - 148 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 64 144 308 332 326 339 107 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\can.c - - - ICCARM - 229 - - - __cstat - 134 - - - BICOMP - 159 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 248 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c - - - ICCARM - 330 - - - __cstat - 178 - - - BICOMP - 120 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c - - - ICCARM - 84 - - - __cstat - 240 - - - BICOMP - 169 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 - - - - - $PROJ_DIR$\..\..\..\..\Source\assert.c - - - ICCARM - 171 - - - __cstat - 157 - - - BICOMP - 218 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 + 326 350 108 366 145 354 204 250 236 155 156 187 205 371 245 163 219 26 357 341 189 323 223 238 353 231 147 334 154 34 362 113 183 211 @@ -1669,168 +794,21 @@ ICCARM - 162 - - - __cstat - 231 + 93 BICOMP - 158 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 262 - - - - - $PROJ_DIR$\..\..\..\..\Source\backdoor.c - - - ICCARM - 221 + 92 __cstat - 237 - - - BICOMP 151 ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 - - - - - $PROJ_DIR$\..\..\..\..\Source\boot.c - - - ICCARM - 55 - - - __cstat - 242 - - - BICOMP - 177 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 - - - - - $PROJ_DIR$\..\..\..\..\Source\cop.c - - - ICCARM - 92 - - - __cstat - 239 - - - BICOMP - 139 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 - - - - - $PROJ_DIR$\..\..\..\..\Source\com.c - - - ICCARM - 166 - - - __cstat - 154 - - - BICOMP - 110 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 277 370 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c - - - ICCARM - 96 - - - __cstat - 156 - - - BICOMP - 119 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 278 - - - - - $PROJ_DIR$\..\startup_stm32f091.s - - - AARM - 188 - - - - - $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c - - - ICCARM - 99 - - - __cstat - 324 - - - BICOMP - 127 - - - - - ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 249 254 + 300 298 282 296 330 279 278 313 311 290 281 301 316 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 263 @@ -1839,21 +817,21 @@ ICCARM - 222 - - - __cstat - 223 + 163 BICOMP - 180 + 123 + + + __cstat + 173 ICCARM - 106 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 133 116 26 78 140 361 56 47 81 37 132 65 + 38 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 75 85 331 33 58 249 370 347 52 340 83 343 @@ -1862,67 +840,467 @@ ICCARM - 84 + 34 + + + BICOMP + 125 __cstat + 201 + + + + + ICCARM + 126 296 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 141 292 128 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_usart.c + + + ICCARM 240 BICOMP - 175 + 176 + + + __cstat + 25 ICCARM - 179 284 53 319 314 357 308 332 326 339 338 86 317 340 64 63 44 28 328 79 41 315 74 355 82 73 211 346 106 133 116 26 78 140 361 56 47 81 37 132 65 176 280 201 + 263 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 252 257 - $PROJ_DIR$\..\..\..\..\Source\xcp.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c ICCARM - 128 - - - __cstat - 165 + 348 BICOMP - 147 + 111 + + + __cstat + 39 ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 - $PROJ_DIR$\..\..\..\..\Source\net.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c ICCARM - 160 - - - __cstat - 236 + 318 BICOMP - 121 + 110 + + + __cstat + 139 ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_gpio.c + + + ICCARM + 322 + + + BICOMP + 209 + + + __cstat + 37 + + + + + ICCARM + 272 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 257 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_rcc.c + + + ICCARM + 166 + + + BICOMP + 51 + + + __cstat + 115 + + + + + ICCARM + 252 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_utils.c + + + ICCARM + 342 + + + BICOMP + 56 + + + __cstat + 133 + + + + + ICCARM + 252 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 265 253 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c + + + ICCARM + 369 + + + BICOMP + 29 + + + __cstat + 47 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + + + ICCARM + 312 + + + BICOMP + 70 + + + __cstat + 328 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_exti.c + + + ICCARM + 327 + + + BICOMP + 81 + + + __cstat + 61 + + + + + ICCARM + 271 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + + + ICCARM + 138 + + + BICOMP + 64 + + + __cstat + 352 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + + + ICCARM + 30 + + + BICOMP + 44 + + + __cstat + 45 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_dma.c + + + ICCARM + 144 + + + BICOMP + 114 + + + __cstat + 77 + + + + + ICCARM + 269 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 257 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + + + ICCARM + 339 + + + BICOMP + 94 + + + __cstat + 41 + + + + + ICCARM + 1 295 256 6 22 21 0 190 242 193 225 224 228 20 229 103 2 9 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\..\..\..\Source\file.c + + + ICCARM + 90 + + + BICOMP + 86 + + + __cstat + 72 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 170 242 193 225 224 228 220 169 35 + + + + + $PROJ_DIR$\..\startup_stm32f091.s + + + AARM + 145 + + + + + $PROJ_DIR$\..\..\..\..\Source\boot.c + + + ICCARM + 350 + + + BICOMP + 129 + + + __cstat + 202 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\flash.c + + + ICCARM + 222 + + + BICOMP + 68 + + + __cstat + 149 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\cpu.c + + + ICCARM + 50 + + + BICOMP + 73 + + + __cstat + 216 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 257 253 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\can.c + + + ICCARM + 180 + + + BICOMP + 87 + + + __cstat + 76 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 252 + + + + + $PROJ_DIR$\..\led.c + + + ICCARM + 108 + + + BICOMP + 89 + + + __cstat + 203 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 292 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 272 @@ -1931,21 +1309,642 @@ ICCARM - 371 - - - __cstat - 369 + 248 BICOMP - 368 + 246 + + + __cstat + 244 ICCARM - 296 290 301 284 362 302 299 366 342 294 276 274 365 19 17 0 314 357 308 332 326 339 8 340 144 11 6 10 279 271 1 77 334 261 20 18 3 14 9 5 23 4 255 272 256 258 262 + 300 298 282 296 330 279 278 313 311 290 281 301 316 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 263 + + + + + $PROJ_DIR$\..\..\..\..\Source\com.c + + + ICCARM + 107 + + + BICOMP + 71 + + + __cstat + 116 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 308 319 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\timer.c + + + ICCARM + 34 + + + BICOMP + 96 + + + __cstat + 201 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\main.c + + + ICCARM + 366 + + + BICOMP + 91 + + + __cstat + 165 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 252 257 253 265 263 272 + + + + + $PROJ_DIR$\..\hooks.c + + + ICCARM + 132 + + + BICOMP + 74 + + + __cstat + 36 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 292 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 272 + + + + + $PROJ_DIR$\..\lib\system_stm32f0xx.c + + + ICCARM + 154 + + + BICOMP + 117 + + + __cstat + 159 + + + + + ICCARM + 22 21 0 190 242 193 225 224 228 20 229 103 2 9 1 295 256 6 351 220 260 15 18 7 8 4 3 12 13 251 274 255 268 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\nvm.c + + + ICCARM + 55 + + + BICOMP + 63 + + + __cstat + 118 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 306 + + + + + $PROJ_DIR$\..\..\..\..\Source\cop.c + + + ICCARM + 48 + + + BICOMP + 57 + + + __cstat + 195 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 + + + + + $PROJ_DIR$\..\..\..\..\Source\backdoor.c + + + ICCARM + 157 + + + BICOMP + 98 + + + __cstat + 200 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 + + + + + $PROJ_DIR$\..\..\..\..\Source\ARMCM0_STM32F0\IAR\cpu_comp.c + + + ICCARM + 106 + + + BICOMP + 97 + + + __cstat + 54 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 356 103 193 225 224 228 43 + + + + + $PROJ_DIR$\..\..\..\..\Source\assert.c + + + ICCARM + 99 + + + BICOMP + 177 + + + __cstat + 104 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 + + + + + $PROJ_DIR$\..\..\..\..\Source\net.c + + + ICCARM + 109 + + + BICOMP + 69 + + + __cstat + 186 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c + + + ICCARM + 353 + + + BICOMP + 53 + + + __cstat + 218 + + + + + ICCARM + 347 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + + + ICCARM + 236 + + + BICOMP + 148 + + + __cstat + 164 + + + + + ICCARM + 206 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\..\..\..\Source\xcp.c + + + ICCARM + 67 + + + BICOMP + 101 + + + __cstat + 88 + + + + + ICCARM + 300 298 282 296 330 279 278 313 311 290 281 301 316 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c + + + ICCARM + 205 + + + BICOMP + 153 + + + __cstat + 124 + + + + + ICCARM + 367 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + + + ICCARM + 250 + + + BICOMP + 146 + + + __cstat + 137 + + + + + ICCARM + 329 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + + + ICCARM + 334 + + + BICOMP + 140 + + + __cstat + 161 + + + + + ICCARM + 83 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + + + ICCARM + 357 + + + BICOMP + 247 + + + __cstat + 120 + + + + + ICCARM + 331 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c + + + ICCARM + 156 + + + BICOMP + 181 + + + __cstat + 171 + + + + + ICCARM + 239 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c + + + ICCARM + 187 + + + BICOMP + 214 + + + __cstat + 172 + + + + + ICCARM + 24 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c + + + ICCARM + 204 + + + BICOMP + 143 + + + __cstat + 196 + + + + + ICCARM + 40 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 329 206 359 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + + + ICCARM + 245 + + + BICOMP + 233 + + + __cstat + 208 + + + + + ICCARM + 230 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + + + ICCARM + 26 + + + BICOMP + 237 + + + __cstat + 198 + + + + + ICCARM + 85 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + + + ICCARM + 155 + + + BICOMP + 136 + + + __cstat + 131 + + + + + ICCARM + 359 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 239 24 367 150 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c + + + ICCARM + 371 + + + BICOMP + 243 + + + __cstat + 119 + + + + + ICCARM + 150 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 230 38 75 85 331 33 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c + + + ICCARM + 189 + + + BICOMP + 349 + + + __cstat + 135 + + + + + ICCARM + 33 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 75 85 331 58 249 370 347 52 340 83 343 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + + + ICCARM + 219 + + + BICOMP + 232 + + + __cstat + 105 + + + + + ICCARM + 75 355 182 190 242 193 225 224 228 235 31 207 229 356 361 310 315 226 40 329 206 359 239 24 367 150 230 38 85 331 33 58 249 370 347 52 340 83 343 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/stm32f0xx_hal_conf.h index 5fdd5e99..41f530fd 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/bin/demoprog_stm32f091.out b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/bin/demoprog_stm32f091.out index 0653afb4e7124fdde69c26ea2b9fe7415237da57..8db5da76c9e6853dda63bd62107c1a206d2e559d 100644 GIT binary patch literal 157652 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 N2IcZhVEj^j{|BQ0aVY=* literal 169092 zcmeEv31C#!)&ITk&6}A_Cdo`D2_XqM2_c3>42z10GRcIH(EuR}pyg{4lE4H*l4ilU zVZa4&E4X|gE>&D=u~kc{Sldd)rTxUM34*n)ZAbsM*cMw_t>8xfzjN<`6He`<9QFyU-A46&--}(f#(pO zkMMkg=QBM0c=!d(s^Zb`Sn$N*iN}+GCkc-ej|)#Ko)LIP;>pA_3J>x47w5OD+jgwo zW@2otyL*?VYu|TEnctqxJ*IJqy^rW->o{lM!!Ym4_9@)c+?86!2PpqM+ZC zy&JwB0`!|f8V|r0AGiz%(vOWTY=joaOQpN;Eh4tq_^GOJ(j$E?Z8ot8DiY3o2}!f^)(^Z`6RxMjb%StihU>{e*RQ?xRX{^weg&?d-+!U-yWYFV zXGKUE@LMhX{s1v{1^w=Lt3r2IF5H>nZk}*QlIj20;OM@$+}$1v+q*fy@<`gdSmNHh z$z8TjWburM#lDX<_7j1lSiFi5WV*DywFNRX z_dN+5N$3fmU7+_DE z9E#@w-T!^?vqkrR51Bzd5qaeX@N_5OJ(g3z(>35}vu}OTKag9-zQqn+0qm^;>wrwU zfZeEL)81lFGtlqvKhodd|4Dx?%pY#&le9jP^?KyUN^pTvWFEV(wu$F^`>qk8bMIQf z*T76My$WV_(1%d25TTGz#rtIC`^+id2HNcTP{|oY15)smc2x<5JMFP*g)v#5;%;B~I zZrQ8Zew*zuJXxu7j+z%R} zgmcQrcLiyj8@LJXk`RaNi@EoDxOKz60saCjtls-paBmi1YXJl2ChqMK)Gi0LD+$Jl z^Uff(v_LnY-SE9ixLXc)9l{-PUK@0$1h|_8n0wVu213r2C4J_S`@=aO?K2hs@W7;i$HGB#@8#%Cc`g;0NLAVL$g?3r_M; zZ#VDrqdaMS^MUJ8NABhB+XH^T0>}jf;SNA<1VjboQb2a87C^2JcnNFaFkcyay9hV0ezl4ig-9@Kkxj^G7Gy+u$&eq( zC<8L`Kt{6wFGNbc>$iGmiu{{#_&nc?^OOC_amkkCqzy}6@SH<%H#@lDFmt!s7{;QttckEcd&9rr@&ym9pt~=~6nJi3e;e%!4$z|@b2uVuD)N37Q>a~v> z-#a0YUphWudU&m!!n$!uQ^{BgS%kYQr$SLYJ!8J2+*xGm8(qo{-h8;$n-q|6D#L35 z&j5Ta;A$WZrYm7m0;#1ekX&lr=Gd8lFx%!ZH|Xr>KXka?;fo{swhBvyh?%mJ@)+ec zk?#)o_df+)VHaa=g5M4EBY0TyWsKsvAvVV08(3cI}Q;2#iw$IiCL9W&I|x_3Kfbnp6PPo;&wmcBcE7vE>yZQZrUVtOrp zz1p)Ot0#+%=lkNj)wZ^$+U9&v!tzafeMM-M4tt7f=Xi?PIBjnY(mWn^A0UL&4wFeO ziTD0tFUwJFHx$M1QR8kX8o9@7y`gB*p27^ahnG|oI!fB+^ykDWvwD-wHxy~FB`3!z zHxzO474BbSfjHZ9@X23$iSNp&D7;#jZxCj$Fkc|d zDZNi`XQxvLS3|2n?a$X2S^C`I($tsFc3Jp7?p_t}!w2!9xZ46;@XXwSWjXE@;JE+L z@*`%p*nMinMR*JvHbFz}JFRp{c5Q__(C?;ime6broP;F@t`fLJ8NRl@C{Fh);YwhZ zz%Oy1dXXuB*xoqZli%}b)#|@l9JpyGwi}jZ)Ak0gYnNC;|-+Xxt-c)C(HPszGD7P9sj0H0Ud72B>DorNz&KhwM0J*?lY$de!fEVnuk z3~?GKDEa*56awJTI#4?z;-!dV8J=?H5#?zt)g1kY=6;IC)n5YL#)9%V8($UQVtljv zs1{=u`@X_bws8W=GxE9WMu|T4uq@FTs0Enc0~copUF;Sv(sUPb0k^D8Bg(c&i4^p2 z)A3|+&j%>q3G5VRzQ^s~)s*kqiX6_}q_H-Y#B~!V)KXkm^w(ZC$<*6_=>1Q2WnNeG z?j8y~Q`EkwWl{T*7A9)ns4&44sQsPfkoy5TmiR)~=uHKR;f-|%vVeLZyp|5{p zhU`85T^9S^{zL0O>B)>2{crNc+(bup-whd)3%2)qv{}?cB^o_?+oAzWHj1~kHW0*n zBJds~^c9AGcLd(8<7M+DxX(q?WoU=k({9lC7? z%i%c}G~MY@{XMx4vdjw?lx2A?SdpoW@$%d(FQ8)|WlI*Q{&fO-tJmaT2T1*bmzvmw zoIcfmbr62FfUEwpCenH`M{We>75{0bdHyH1Px6ii4Fj_Yn45q})G;qL@i1C0gb|BY z!spU@Ri||W_=*ExYl3{O5qwz#28`%SSiJ7`+MwHOgKi~^+)7y73O>$?8fD#>yV&l< zHm@|jSkC=DIk&J4i+Ro_)FotIQ%=2;{#~TYP`M>d2Dvq;nXG(^i@f{Zc6M4yAC-%o z{Pq(_o$KzW=?{&@R52fgJH2AxbLw$bpX{;iE!eY`PD#?n4Po5%B&)KmN$fC^Qqw z-Y)b`dy-TtcTHqs`N^VoT37U5FFT!Trw2dk$y`_ThdrwBZIt7;14M!M)n3d3TQ1J_ zzqj3yv%80@!_+NuyW2?4ce zn0-w&Eb*CDBsHq@cKKzU^^B}jn)DhB{2RHT2x+<$Y1%H*G+9W0jGl(41Y{a#24pQE zb3sK6A2vOonDu-_V<(~dnA#BZb9X%b{`{}sSNars9%N!qf3~0c8VTr?zJUG)nR8&C z`jPCx>=!+m?WNn{{w+6Cw)skHnftrG^>{z(djao9eAYVV{VL8IYSxJ>C8Jj=md9dqCUX*MI1N z{q zeEPY2E-QU-`(?iV?MlvN-VIAGIUlAmmwWf5S9EVk_hr?g2UvNSjoaVX26t^icPnGK zn{_z9Cx1Q5@9WK9zYH46E5B+e1-0x;y`ClP4r^Pju+8`G8tLgSXybaD@7QtUHqstnZv^&h&gzp}K7`jT#pFV?5)+#@o9ku)?j^$ncPw*Kap% zWNvLEcgJl^blW!ahsT4;EuY#k?!uUfeXLF2kvo^=vK*G33(U07SpK*^c3S*icd6%M z=HFW6!l;ht;vO1p?&G=kz)H5#IuZ~Ma9ZC8fivYZ;NIEJC&u?BlfNtbp=&tE)s>XO z{fF*6G8y67shN3; z6xOrj$f0+S&?wH4Ll;58N<3_G_a92aSPsi3EwBF&6D8=#A%=cGl_b;Q{zDmn9oesx zLfg#ZNTaqnG$wR-hr-wx#C+`3faV^}p1}Bp3F8;rJo#RYHJ9FFCEK+N{H2=zo8D54 zF|vJQy^W<>?J^zGBOprw!6V%$ zkIBO(zTaEwS1=|}>QBzk=zGIz!kCF8U0aa^o>o~_={#NQwKj#@iAT82Ya_QyQ~fGj zD}sBtyp-A&!%i+!YfCZiX%!)9csqmP-5%ld1%J4&+iR=++`ZXzt#=YD^=s@s^Lt6( z@SNeTuH6^m>vZTV@aHbU*w4A%eF$q8TfZ+C^5$bTZw_Lf4Kw^(-b-S)v(2fc-w>ll zvoEALhU9*&cOz1JE%i{{XYNleB@=f~-k%~&ihJVzWMNX>r|x&c#Cmh~o7~y^|F)Bv zFq+OV%ST^4c06pyp6zVB(z{{%nmQi9dnwzQPW?3#dNWo$c03MNO1Z>>TypMb?BG6p zXMOgusEwrq@-cE7`dK^HZ7U+F zLI3rX@>&}8m7~FI6Wcr!HX1A7-WkB5&m?Se#_9}V+YQ`Q;HKy{i90>$?=;{hM)=E@ zHp~^|0Y_uM2*D)%QJFHKOdUD2@Ccc?FqaE6m9-;>&OhQt9JwAxlv30#l!E<-796ny zql9Cq4$`qjM|Qb;SO~Aer%B*7)Id{@SV$I((kcZH&6`k~A)PQLBXFFnI z4sh+x_&D3g))%F}mMGe{IOLmnYHxx*4j-`wnA;3kh{|7%@KRGP)r0S%KKMJHo*iaT zqyCEt@?h>Ghu;1a9AS(Rqlj*r=MZzt&{&~Us4e^0SQ_c4`NRc6b~K+j4?gGWHhn&E z?D^yh^NFPrj`>8IRXTF$(NE3HD{$t$M-DyoX^%dicxhl(Dfg3FV_ePaNjd6fI8_a&e-YlD$~(R&WS zcP4zJpQ&2*r30EqeQNa5QVH7KgAoN6pwtVbew%|R_&u6sAC3A`-|{{{ZGh4YlSpfQ zjtLb$enn#m68$gHv;An2s0IC3Mmz4C(M*DTrelXj9lS&!fe;! zG>4W5{s^9^!-*dn13T+RRb8qmoZK(0h1)0o*%wSbUcjr%yJQT~VAi%@nYXviUcp zub;!&eMN`+96KkX=`F*fDQ3m2T2!kVr^cCVrg)RxWY-e3L@h~6GCRx;i^J-JG$vw< zmD+Q7VO_AJ`DUB(>|zo|b0IY1(|_n$lq1X`KHYz4HtJgCF#6bYsP=^k?X#t1dI_07 z*?)xUU$|4wcd~T%cYgB8{ye5IMKx(=i#5&`Z%;@}aya+^0D=@hf|EOFlIG%}eq*6euw%3C!o3 z60cgP$1&!DCDpK)l7L}Y)&dxqb8^)>*6NCPn7!u8c*ZOSz{!)j!~BPN=Kb>=gh+KE zK-EeCCX;^Q>3_LRzOy^g<@chk?Eqi*N!IL zXr{yRN4&wb<>*XDVL}-rE=Ho5{#nLIGzu6rI3tm41EPq+F#tj(EvodPz$J&LsWZIv zX|nW1N$RNS>@dE!s$B5amKGEu0;4XbGF10oeWL&Sy3wvCL{$Rtz) z2diVs9l`2&&>6xRnIU3SwP8{S*0IrvY)B#gbENQj$scTzK370-14JfDOh`Zx1x0U} z{`D*o6h(AN&|94_Q4DN#j$XM~KSv_A7zIMp3q)AeF|bnjr#U4lJcA5c5Q#>fa70xJ zVG;<|1<}o_kr|@1NvKG~$_z%-rCI{DA}ljRSDyo`3Cauu%anpj!J!G=BsE+nq|gj3 zH0Gn|Fh{LS(@0KIhjAGqOG*XIP-VhPQ*u;g8Z1pmuS}zJRY-vGG4hVl(pru7Co1_+?1h>TEiC|$`T~Lb}L~U&fsZVNDaWVprR!Ty`LO&b|hr((c zsKQypEM`q1Wm^A9+;k`5x`D$Qz~E2f;*$w?O-$TDf!he2SiBuU^LgY26Wa{jnL&yM zFL!|j6MGf7+oEtzENM5fr5}LH45ByF>%`j?wy#pPXz7{F>xj1D7<%L;x-A~pJL+P6u1L1ai@+a zntzFjYZthKF>yNu?(Z>i)(J%OgP6EVf%`Bf?jC_V9256Pf%`ZnZW_A!CiZDe+*Ja1 zBqr`ffn(Tn5uJXirx8shCazZCOfhla5jb;9+=l{ZjfpFqMB&+D;%*c;draIf1THZq zF6VTj>4=G2DR9X#aZd_dN=%$uKs3{0;^qlldQ99M0+$gJ_m042#l$V1O5tI=DMmdw z_YA_lQNXOIFoHi>7c570YhrJr+&Y37qn@Zci*PT)UvxcxnTK$G)CCVk)jc~4372>d zvtAU1OZ5`2c_y=d7?znNFV`0nZYk>dFqB?rVJ{DGjw#G~O%$JR`UrO$a1c=NCuyRT z0QWp_wjjocpRbH?uL5U{!mXT3xYvQpiNgK&Ji^&gM@IX*e?H+-V%DGcEF|0k$ol0d zxvXAHxR+zL4^RFV;hxWD)>wky5>GHgNDdAQj zZJ`VXf0E|C^@QsIj_k%y;x6(N&W(Il8x`KuorKFm+*cc(@Rk1F=px(};3h@+YrBMS zd#5pLX;{Kbe}}sXH~lPT{cRM@)XNB$JDpkAM&ZgXC*0$}t%$Yu6uR1#i(RV+lQA$B%`O5ZL)$HMU2%h>maX5xVq5AGgkTCR%!N`I9egMCQ z{xKN8loSPMD-HdGa<%DN^}0dkYa(+A$QY{3F_NKT{}Yfgw4P%w_9PMu+G|5a8jMJY z2`~H_DpaBC@?)!eC|}(OLWaII=zK*4UI76^DLW|RL98gO3fq-l6D7n#5HhsRL5qQ!q5lB^Lp2R6A7E-QaiWs; z7AP5tY#61%kRgWh%n??jDid3SHfUp+(xp3!r7_`V_Ha(l!#} zkyrFi!JxA(aY3`wM$h4xxS;y%+rVq*Oip1uj7kd?D?PmY#=*UEP1sm)|mY~2!p)~ zQtA5m!9c&C*GDA3xrvOmU<{AczQOpVq^yPCcKEfzJm{1l0{4NydJrI)4w?W}RBwa8 zI~cJh&Ov}`?!iQY(qU{8`ndX_cQ756#7u|JlO^fkZ6NhHNYR**;O1JskO(bC`anI$ z56dWLELqgre({oy)@7ZS)U`J*ncvpfQdCw|Q(0ct*;-mywxp`AeR*T&lH$gdtxF0k z=6dHA)Kpf@ojRqYpk`iIeRE@LO-aGolPkP6zQT$n~o)LwcQQUbRdKLaiy!JqiK0d zV}rY?rIVQ~>W@*sm?pwO2vhH`YiHbQ`X->Jop`CWaAbZIy|9p@4u5NVC&Qq`cZh(8 zoZd~Qh2(xUOd+Sutu4zDlyxV!zReY#dO|6ByALWnvDjBxSX4F}s`Tu6!oXR=RXPr0 zs+oTQP-K{0Q8B-QabYg1uDp;b!dT^-J9~b06$GE~V3@b+d1dpx7tAi!J?j?G{u-h| z;S$N}!U`lvRbkcanu^(#v#WH+5#Yk&3z>VMYY~2KEND&DVwN2fQL&ii#6(mrt^sb$ zK%5b=Em6EmNd!1cx)PE3BZTdMc>~NZky&9$x5G@y;jplz`(UP2CNrg>Fvqi`AHqBv zIo9E1Nk4@-4k_ozWX_+%ypuaTEa}&V>qRWtiHz-VeV_9xUj`yrclih6apo59$~8lHa`+O1=#T{^>Xl8Q&T**u%@)G zrJ=d8>e9Bx;>KmD+mc74+c;6mwYLPcu;sI4>X_zB zpiBi{Luu1;Kae_?2DGg85&(5(C2($C$HhVCI_KdS=|zu)L{R=L?4a6yWh3hPV6-H5 zUf0T{LPC15uE)J5-Wy#ABU)@t> zXM?W+F7=4c?(P&;J&L~K*}&ssnbDlDZ9^(G)qBw~~6RnFT`S#&Iit-$pf zY!$j~nr@pck<(Lrl>f_G>o11WnXWfDuk5VrB%0?^ftlUj-rDY!>EU6?A0h0ZoVyw- zq)T0%&@>v#8e5ikQfAVHTG`p!R@Btl0f;Wy^1Ak>&P!p}g{v0|J-3%$QqtUdiMO*E z4)i=Re^q09W!=iQ<|Z`Y!K^>Or4e+);8`sB&*+lsS-Y@dRY_xAXIFcpE)$){s_ycp zma@iGjm^Fm&=u0s%S$vy=a|ww=vwEx@{+nXFr#x#EVg&G6gPF$Efu*`XB~Bf4r^_x z=oYdJ#h|dOv$d#B3UPLe?om(kaGWk6UF>r!i%Oc>JBV>)?jz`{wz)nUkQe?Mo)=Oq zXk9tvL0P3imqxDZh{z#DUCWl0cTyEqCab!t?#0U>?xxEq2b7DNP(Zw`U83|>2#*!r zA&*sh9U1O%v8Z4pJYFQ7Q4IphOI%kg+~2UWuCp7qTEo^(wuXo->36MH_;MppHj%BO z+pw+}m_?geY60?dXH9)wOU=@*j+)Md?(YRc;<@4Yc1fgBFu_K@#vt}<&Gi@&BWzgvAH;7m zyMD-(bcv5>X@gGw*X(+hE15C?z5RN}?D`#7>}l1NXh?!CpNw<8Zc>xdqT9QGZPaEC zF%cV-uMGA+v1N2Cj0D5>Yrwl0eTmzk$G$)+$-K;9qPeJ}I(LS6zFjo`=Sx^+;;TB>rhr6=(ZG zS;#W9h8Jk@0j(dfKr^Es8Un`S-oSg_LZ7#$@>29QR#r52G7>vA#R-I2XJGdJ_!#QRwU>llIqUg{{3m*jk zGPsmcdIu&wN?w0s{ly{uzM}DKU5(Is_-u0y_rRG!fU#cKhGrxwf}8RD4w3X=R7ghh zH9eAgKhu_;F?o|hr@gND>?D)=RFS2Wf)Hmzzb zx)j|}{yI;~6$03W2pRt38>l-D+!@nH!&3k#J0#WBjEdq7o|-{@fzJSBY}SyK0mYw| zNi~938gdjl&sGF}p@Gh6?5u2SY-}J6x@kG%k11(+LJAqc8$RQgq8CZHvu3=FsLlW? zz71lKqfda(tl~6;rvaP70GqpjV6;xtUXR`$|DNJ>QO5i(AZS+b z9-4)h#P=6GiBJ~bHAEP9Irudile!jJCG{!^8H^UU8eZ&Sg4&}bXOI9*$cc7cP_HS@ zR1!hD0fV4kQ?lFyn@F%_qJL$i&t7F@?mBScAyhl{V=%(R_bJX1R4%_Np>phs5U(rF z3_@%SM~E&mP^0n*^(;_~jf81v%AVHceH9Bmeu-GWhCy*zab|(vknE3EZ*Eo-CbB;w zf(DV0$nHcxo1!0wSlin~CF*OKTi03dZ|q?FF4cJorNB8tCeOg6GMdRbF%w?RjSa^( z-}QCq&VK@PTn)~5>GMt@fIcn7UJOM-IT330F-L;dOwyL2+c0gq79-!EV(|wzy#jX2 z^x-6ay4lXxA}I`~j7>&j=t(lPVnZ?c5KkV~So|>O{YNCbcoT>TQQf*XQiKtMwX6g;Tp!78ry5?X_O4#<~pdV50V>?Xsq8QH|9t; zEf`+sh0bhp_N>Uqv=~xlKRsdjcx7Ev%dutT7a^^^;43U6%ZXdlH^8~7XKL#qWD1N+ z$I$>8O_&OUK4B`%a>7&?jd?|t;dDk!>ctZ!US3vajP0=yq_wMEjB=ZTpt;p$7`wCT z_KMlXzJ;*cnJp8w$utR`-%;Px++5e$+D^khK=hR!s;>hO{tHjtBcv& zSRdsro!KZi=`JwfACil7X3ZN4}hb(bmcP6MS2zwCl=2OpbGecYssw9hH` z&5sypeaY;euQ=HYqUjLz#tErxkGuE*pD3o#SCGbl$880x$@joG@ z40l+3H)P{N@t~FSe#9XI12LhvP+BoQC&7VpP?%VrPwp7bzYo^uLo8j0KU%)eaJJ>v zU|gnvUpYu7N>q)Z)LxV@nvF-y3}0r-`g;DZ>}>C&|gi< zyBp|732js`q7X1%la>DipgsnQvHu4a^d@kKiHyW`Jrsv0A+ly9u1x+vfM06u=61Bn zTyP7=Alw`%7KVFsu+$o|xQ(aeynz^B1y>g8n5_lryYX14vu;?-oh#8bL6`4;xOz%6 z0{sS@!$Sq!kmD!G!-6nN(8HZv9Zep-Cp}yZH{^IPc~~1}33|9o_wZBc;c>Vj#|O#7 z_rokf5BKOS{Ze}PJ=~CEJH%soC(IJ`a6eZ^5lin0547WhlKB#}X(m3azJmrYy4vK5 zvW||%m6${Qyme%>X`I&3b)Et;$483xnA2LuG4A6gMO)Ho74uWaPl|T1)6S6U?BnK& zHoVj3mcJZ7DcT=@1)g;|$ITUOr>B*e?lH$rigw@AF8d!IKPe(ZoAN7ikDDtZLworD zeEg({3~l+pX6$iuMP%rNfKhqJO^V3SfdWq)KPe(Z=MT(3^|-krGIU(QyT?z8$k6Eq zYx0kqDs&QAFL@slDlbksuG_~Yh^$k53QzdwFbM1~G>SUusmxf16= zfYgYI$4yEB89F9n+wqekGIXkh@3iCQipbC*6mK6tDI!B>R$M;mxVa)Sbi_r<>Bmiq z$k2%xj~+iMB0~pgl+bGV}yW=NCWaxN~?#ai^6_KISJe;)8yoOb`isSet-SiA z6t1asIzMMLx~a!dI~g+yY6WW+o;%NBtQ@oVGf?Sp^T&u4C9>?k-o;%RybR@@W31+hr_m^-k zMy+f{qSJJuk?10`^8-9%tVsAX5Pidwm2lB_4#if#8`e@lyl72xoJkR&+Rj6Wo6%jQUPGX_hod=kOc8 z^!;~)HTK_0bI4b4|DEGn__7jO-+w2Kv}PaYto;(Hx5Z2#egB;>%Kdj_tdjfh$Y|`p zlV)sO!?Ycl_5F8b)c4(Jg5dYg^B%l&c{_gVE>(SD?nlE@3D<-o9cWcP<;HIpUaHuY) z^l(^k^IAACw73=Wa!bsB&1;V55#KC{3T`r!*5KwfY1KEcNsGRDO68~?cD+!j!&1pY)#TPuQ@-1P3#DP zl&0x6WAj?_9*_%eUURNhLYvp96hv-bb5SK5*_U})p}vejgzxjYS{;FXJ}Klr=02ZP z?DKIMJ9+ktojk%SriWh<{UKNEojaeZiL`S^V8d#T;AWfcrbODgBk>VsH0b1AQzGr$ zkpbvCcdpeEY3GiBkr<7AF2A&-Vkb@*HJZ{hke^ypX(x^g%M2rS;vBH0(oP(L3%MKa zpN~(aoj8J8{>_4T!+-tcxqz1cG6r31?1hKqqqg(hZQCQ3`o()OiIoo%g<_uGm+ zgXB5|SjN8gC6Fr}&qgP!^+T@RSXwCM+8HKSeZ@5651L)sLZmAZd&8eD(g)3Fo=qaX z2`CFyLV7y}PsMYWL1IS;L5s;-yD+o=p!vcYl4C3S&Efg>A+yZ4FA-d?q4~GWDI=GF z_TK@7Hv1(IItiRM7FGEeTZa=@gwW$0VL}fMAN*cT$mAD7c!nRFtPXy!7EC39V?i8L z+ApN{qJsp;6;rIchvH zB!e%!xjPOSIB?J-9XGkPoUz}blK4JqXl|nQUvlSRV`pd-Z5!=89Eo8U!;?mGVtku6 zdD{9?c^aP9794cjrg`Sv1@J=nz&3<0hrCEubh_q+$QM3`E-!N?B8T;7H2M@=d$z`$ zaVn$ucOd?TH>|dX`o#De^OQ3QcdL-i+%Jc0NG^16XnX}@KQ&}yDo5lNg@%kw`2%HStT8t<@a>A(%@;rrhJP)z44rRRCQKzkeN70; z`sEN59jHrZ;#T35wu3=I#Sah^YINB{#tC-ME2!9Rh71g^SOWXykOj$s7Eq>DV@@d9 zX!YU-$O2m+nwMe&7vrxe32y!vBw={O#gQ1s)vK5ja#kUY7m6z@wIf;h!(%y zR$ABIP*R88suIv)t6Ye47D*ep+*aP$(onfj+E&|)W>FxovMpLvJV&CKt$bl|&BEeh z-~1^O!fn{2A&rWyq^z*AR9aLUE!*~1R7$JKHhXcEub^hKv}(dSrDm$MnuT>*&Ezwr z-D0b%)QMVcI04LFO}SiVJmjPO_gR{Unol@-%62 z35(81im;q1F{#3$`$@C;rhr8e<_I$DVW!(E%Y8b0B$;)1hD{uvqhm6qO~++P+tixr zlHMqrcQz7)4$q+^$MWca=pMFX%=ZiL5iDOp$~ zChaA%5-c>;7Cg>V?^-5M3xpfy6OD5*<&;`NjSeP_Xb>lJQrJXIEXgnT%?lp483aiB zNw>ivafWWbGY#K~$yhowcYd)rv5}Ewe$|EL!e$b-%JSK>#fgDdvX)nu3yYmBK4EkS zXTq35#-d7bgkd_F%e)uRq*PY&|Kq%{gp6+CM7YRjPMSVTaS=aU-^(N|#*B=P()Th+ zTW~Lvv_|e_5+mD@BjH=cNO+1AL{keP8`+QiMj zL)0io26ucg{v&Qq=Fg(ZGkjPG*-eNsr```8;%(prOkaTWBR;eETY&ciZpAoelh}U8 zpW=2`EpBJZ!f>j!skOeVy`4@| z4J`DtQ5w(*!nR+-K&u#Szk-2ue%mi$sD&YpW`@h)YZ;!nUxZn##>SL2O5E5-z-kMI zB11p9obDt~U%GH0fM?Tx;lO8?k-jA)BqMznVNFaU6-WNCYEI*8Aq2yhk;V_JdE+UK z?*~q%vF`rNbIXxHPZJmrS=K;iUiCQuzbVA|SD_f)iV1`-yeVj}uRpeyV9{5xpnxXm zLKVEeYxqILPP-H@)6*2sfxF|){{=~#2(KCqK^`FMq8kEoNZ`RW1W8TswgTiGNzAze zW=Apw7P0#{1PSh{4TALD$GSbV``CFC>gZ__9KHKk!oznTOGx=^(hrm)KT5sT_#c1Gkl-|HeTd;wX*2o6VRnlB1&Wyyw+t-z(?{n22WA^tUIs0o& z>D1+UF}!1NQmeq~*{)UstesF#H_QM9cULGNQ^v zk^iDw#$zt>bkR!gBxc>;fPuXf^nETwv9dmom{AGU+@!e1@HAAhAEC-Ke8zn4g4MY(@jPOSQPa z1-32&A>&sKhbMa?(j7N1;)0sA<&X{Z1eu775i=tZMI~S)<37zbRwU!ikb~h@B;$Zh z!27hBWsg8!kHKABNf|WEmikL^I*zuuhEnkxP^7|B_ZONyh2WQ<0mgapUjo6>tv_^M zPpzM^H5rCrDQ_8qrSqOH?GWNEX>a@*mJ(QPZcbA84WwZBx7Fd`0W?A-b@g<*g*ZBx zf7|NJc^1-5MX`f}_Qr;$RS^yz(H&5^4CdkQTJ26EeW0hLMjzSWi`lI}K0!0-!|?@N%8>Efu(cpNKmx?fNdw#bZJ z4oOUwqBvs3{u9a!TOkU=GtSpRyRWiuVrj=vP;zUIbq4fhNZ~+CJ$C^js1@R6YNyvt z6klDVwYwm#4=`&!V72i1I@r)?#q9AvT@jo}=iX!`QBd4CUjZdC;s6(kjd_5JL>=t_ zmoRLM16;zeF%EE%*w_cSNL=g#ToNBdgwmyph{dQ96guigchcHy94l{?kc!6U*187c zoF2ObiUomXIMTV(KsY1aHSbvd{Nwl4vRbavfq_8y!avwOQvd zh$(Jr4<55)XO1x4^;0f%R|jQ=$nlz6h3@JI9!ewU(;ZX^#XLjiMP&?~AtM}M3^;sX z<}TBiK9k}yP?eXq)cf08eJ#sc4F&Z}2vc}|)>MpGls^|;*bBIqT6#?i>kcyN^nuHtBPra-q?2k5TX@wA+$;p_Y4i;`ms z94^KaM>D&4L6CjVkDa4qLG%O?whA)9HArt6H0o?wa{MuB}E9*Y*;+7z5WKkH&DcX*1#8 zC0_%FDzpuRN`>T17m#TMOd2^i>iL9bi2s%7k&6d(uu;#8Aq>5q7iPI8N*FP3VO%ct zLYTME&JW=#xbq`nJnBvgl4#Sh{n2+zg+s-HtO0Jr0uMP2W8+X*2od*GorKp{B~bE{ zxI{#}B*x15)fL{^H9~{I%B3g-nhT~xgXKU7Geu)C#)HxwMW=dR@$3@cJlqfFU`gw! zp;@ai=dCbMW=%eoxn3k-3ML7>@|r1OoTu-&5ti~onlZ2n^IT!JGZ$U3_XsDLy!?m> zV~L<)N?B(K?mD5pEz)o0Y;3|&$86=ywGF-}3WD+?CTXN?9VTfM7cr4hzle#9#zjnI zHZEckW_b}48TE^pgi&6^lyV2I^ANKlxv5lYf_#aKmm_ImDa3O5)}_` zLzx80${BOK#J2>^ZNyROWVePpq5EA5n?pAg*@KP;VjMa~-iMQ-6EW6m;cgn1=7S;_ z>vE{#6wK~~-`JCSg!mSV$%(&ove704aOX~WH*^h8cFI36qlCNr#QiI|DcBuBSG0KB znsG&iKDCaEoeX$sUGuU5xQPZ%*F%Dy3JgTyQY?N8qc)9_D17(C^b~BvC|+4tRM*j1 z*w7$OqsDbXQUG3zthCUDIt`64T-Z*dwk9aveaM-j;HY5}5%{M_U!jfOE(;@S32M#}&Fr zDsEI*F(mzfLbn77tC)aYr_e1y!X7pO zJA#4M*2PzvxcJv1_4p z5Zs-3@-Ag;<|qsotw7@nO!+THuoU@hDSp->&(+`(O-vZP+l8(fuS@R9%grqg_ zx|$$eet8D_^=7-1Jl`dpg|=+nfUPg&{T0A*6Umn$UFgE|EZkS_zMQc$PchPE9ik>{ zu|`}oBd;LX>2SG4s>ERg+wf+j%1+0bGbmNY0Y`!rJ>91rb|;DJS^|m@;tn~d%6B<3 z$KDUjGlW^%j!g)Z7SA~B$t3paI5jrDi%u05qteeh>@EV=5V)N#@p;aXI)chhFCfMl z`J(%J@>U#lXMEapW?gUvPAkdQ(;+U)NQY3ZY9z-)PICrNKow*7G?L;WXTdZ|iqn8& zZ0eUGljcG&58;`AC1R9gWKufjNH(Z+WsnaSvg#`;4mvS0Mfu}=h`{h`i07d5oLMBE z6~M)Z%_+X`lx6#SLTs0R8N~KDL^c}RS_@WVKW0#Ds|~R&s%z?;-$MFObxUVcbFh+p zG}(2U5Z`+cg+ap*-=oRiIV3(D4U9w8;Fs}7lPeceF&|GLsYem8p=m6Da|kF_(bHkC z1n;_%95+h1zSr>4cr#7&xDCJ$9H?mEy<;ui!cHdB zCqL9bAtLH;@e19~E=TFCg!vFpoCW7^8s;QsGgRX5i&YxJ8m0p4mw=sAQZZqLjF{Sx z6Sxl`dz^YbPs+rBV^5vWto-DRQ+artwo;sKka2oL#Ay$bRAnbuI$=g0rNP_U-Y6#K z**g@g_1u<@l-h-X4$giTiq#1_CG6i*CbwdS!GW{0e|IfbIHNN9)0HTn=C{GWjHTWy z;pQZM?`RA|>dqP4E~2;&g9In0+7Xwd99une%XM;hIyVJJ=Z#x+UJY@5LUh98;Cc&| z<^BxM9XDa|TP|aDYmpLa9~h<KmP<*fr?MS%Zq5pbk)1FjMYf|~@i%HQ5t*AQ~N zU#VZ&(bQ4XRM$=}-~8S+&uG^x&>h>GS~{BQg~Jaiu-nuQ3>&lvdIE5rLV#BCCG1<3 zZWO9kxLID)OiMySerH^YYv$@N4mxeSw4>>=#t^AoCB9rC{;w*mer8%v*nB_Y*hmpF?I84cx~vVB4TL;Z*TVJP ziRLHX1@KK{&ti8s97@>Vd6bG^pf0V4@={a3vH*@PPZEK9%sQx~tA#c_O6VdTNb^+0 zjt&j>1H>uCerEjOU5L-R7Yfn+e_=zIbBIMu~-h(}lJ&Yz#VH@Z@uo?V!Hx*Q^>(#GO39_)<&-L7o zRT>H%>!We?buCd-9ch`GmaZshp*IO;F$QtsnZ;2-vRdGJwLoljOSTHYm2-r~(;za= zZ~20mqU*LHt7ljQS6{TK=)!Dp)hD>pc&ZT9<}X-Oblo+WIxLvVI3)wWOpRv<-k$t| zd7}%e!P`w7$*8I>P0Q9Sd0O0=ZsdMd&Cx6~V4IMo#h;;BRCSaVr}D`fA0>Fd{R`%O zsYmd>hj@35*R(869U%(rH@{%UR!hddqkyp-?c5YCDM`~ZHOtqUwYY*wr$ew@)-3<~ z1v8qAyLyrOFN4wKRLz;8WsTIFnULlT%B1>l+&GozjMB6;2iQ){AnskM`Y%0ILVHsP}mn&Nq!)sg5AcN)8Ww6WKAp3EF-iy4>GQjo<;@@oNJaWEpC>E1jwPzm*|dt zGTa?I_AcIVckEy32$PgzXd)+|Yb-(;?v5Q(ckFZfU+Ak{N80OGhdX1z8)|CM;R^OI zhC5^Es6}*&PL9qP1~Sofe~sQJx-*8eXEBmd&$ui})VrZO;-P~~ASF)YotS>!3KPlm~{G@n1^i8B^{P+npCY2`!rcTYE zkH+1C_wNXqW9=F8#eg~YfA?eqj-{4&*BeXa&YnC8=TeI)KZLI-bXC22HBU^soA6PQ%qn{4yz6gcIh-%^*){`6B1z=YcOvQGM(#wy)V1Zuv$2<^Q31&}7WiX2~57a`pX?XP%}&x%xAnm?)O{J#kWq{0*FI z53b)Ok*A$8K}?1I;H2REO-%WL^UbsmC0^sXVr7I}fiTpw%F9yd=!t`MvEK4Vp(|cD ztScVhj(kH0{lB{-eOOn7o+P)t|0lP=>#f?buJ{XWSXT@#ebjZf0lJyowJvf0L0wUt zSYYUj_YK%BKTuzsj&oZS_Kl&YFY0lSI^%t~M@>`wSds)a;6W%b_EfPo(wv4>bn&5| z9s7Q@W0dT) zv3SIYEZDMy`t%Q>KAjA*OFT!&?oH?+b`qVCnSIoSGqBzG995Z5LYfcr4EkWZ2$@yx z(bRLo3=r)(v&7oI1t(3WX`U$}zQv4)pQ5Eu+!IEpj7&h9Dl3t+YI?XSQ;VCC;S_(A z=∓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 16) & 0x0000FFFFu; filterConfig.FilterIdLow = rxFilterId & 0x0000FFFFu; filterConfig.FilterMaskIdHigh = (rxFilterMask >> 16) & 0x0000FFFFu; filterConfig.FilterMaskIdLow = rxFilterMask & 0x0000FFFFu; - filterConfig.FilterFIFOAssignment = 0; + filterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; filterConfig.FilterActivation = ENABLE; - /* the bank number is don't care for STM32F3 devices as it only supports one CAN - * controller. - */ - filterConfig.BankNumber = 14; + filterConfig.SlaveStartFilterBank = 14; (void)HAL_CAN_ConfigFilter(&canHandle, &filterConfig); + /* start the CAN peripheral. no need to evaluate the return value as there is nothing + * we can do about a faulty CAN controller. */ + (void)HAL_CAN_Start(&canHandle); } /*** end of BootComCanInit ***/ @@ -413,16 +411,18 @@ static void BootComCanCheckActivationRequest(void) { unsigned long rxMsgId = BOOT_COM_CAN_RX_MSG_ID; unsigned char packetIdMatches = 0; + CAN_RxHeaderTypeDef rxMsgHeader; + unsigned char rxMsgData[8]; /* poll for received CAN messages that await processing. */ - if (HAL_CAN_Receive(&canHandle, CAN_FIFO0, 0) == HAL_OK) + if (HAL_CAN_GetRxMessage(&canHandle, CAN_RX_FIFO0, &rxMsgHeader, rxMsgData) == HAL_OK) { /* check if this message has the configured CAN packet identifier. */ if ((rxMsgId & 0x80000000) == 0) { /* was an 11-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->StdId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_STD) ) + if ( (rxMsgHeader.StdId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_STD) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -433,8 +433,8 @@ static void BootComCanCheckActivationRequest(void) /* negate the ID-type bit */ rxMsgId &= ~0x80000000; /* was an 29-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->ExtId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_EXT) ) + if ( (rxMsgHeader.ExtId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_EXT) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -445,7 +445,7 @@ static void BootComCanCheckActivationRequest(void) if (packetIdMatches == 1) { /* check if this was an XCP CONNECT command */ - if ((canHandle.pRxMsg->Data[0] == 0xff) && (canHandle.pRxMsg->DLC == 2)) + if ((rxMsgData[0] == 0xff) && (rxMsgHeader.DLC == 2)) { /* connection request received so start the bootloader */ BootActivate(); diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/settings/stm32f091.wsdt b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/settings/stm32f091.wsdt index 5ff54dc6..dcda4c21 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/settings/stm32f091.wsdt +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/settings/stm32f091.wsdt @@ -218,7 +218,7 @@ 14 - 11 + 20 1 @@ -232,7 +232,7 @@ 08000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000 - 04000E8400005000000030840000520000000B8100001F0000000D81000021000000 + 040030840000520000000E840000500000000B8100001F0000000D81000021000000 0 @@ -485,7 +485,7 @@ Main - 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000040038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000040041000000FFFEFF000000000000000000000000000100000001000000018002810000000004001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000040030000000FFFEFF000000000000000000000000000100000001000000018027810000000004002E000000FFFEFF000000000000000000000000000100000001000000018028810000000004002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000 + 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000040038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000040041000000FFFEFF000000000000000000000000000100000001000000018002810000000004001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000040030000000FFFEFF000000000000000000000000000100000001000000018027810000000004002E000000FFFEFF000000000000000000000000000100000001000000018028810000000004002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000 34050 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/stm32f091.dep b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/stm32f091.dep index 1055fc68..58466a2a 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/stm32f091.dep +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/ide/stm32f091.dep @@ -5,293 +5,312 @@ Debug - $PROJ_DIR$\..\lib\CMSIS\Include\core_cm0.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_can.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_can.h - $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h - $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h + $PROJ_DIR$\..\lib\CMSIS\Include\core_cm0.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_flash.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f0xx.h + $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_can.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_def.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_dma.c $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_can.h $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F0xx\Include\stm32f091xc.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_cortex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_dma_ex.h + $PROJ_DIR$\..\obj\main.xcl + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_hal.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_can.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.xcl + $PROJ_DIR$\..\obj\led.xcl + $PROJ_DIR$\..\obj\system_stm32f0xx.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.xcl + $PROJ_DIR$\..\obj\system_stm32f0xx.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et + $PROJ_DIR$\..\obj\boot.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_can.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.xcl + $PROJ_DIR$\..\obj\timer.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.o + $PROJ_DIR$\..\obj\stm32f0xx_cec.pbi + $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_rtc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_crs.pbi + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o + $PROJ_DIR$\..\obj\stm32f0xx_misc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.xcl + $PROJ_DIR$\..\obj\timer.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dma.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_usart.o + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_can.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o + $PROJ_DIR$\..\obj\stm32f0xx_flash.__cstat.et + $PROJ_DIR$\..\obj\boot.xcl + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.o + $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.__cstat.et + $PROJ_DIR$\..\obj\startup_stm32f091.o + $PROJ_DIR$\..\obj\stm32f0xx_i2c.o + $PROJ_DIR$\..\obj\stm32f0xx_rcc.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.xcl + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o + $PROJ_DIR$\..\obj\stm32f0xx_cec.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi + $PROJ_DIR$\..\obj\stm32f0xx_adc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.__cstat.et + $PROJ_DIR$\..\obj\led.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dac.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.pbi + $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.xcl + $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_exti.__cstat.et + $PROJ_DIR$\..\obj\main.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi + $PROJ_DIR$\..\obj\stm32f0xx_pwr.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et + $TOOLKIT_DIR$\inc\c\iccarm_builtin.h + $PROJ_DIR$\..\lib\stm32f0xx_conf.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_exti.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dma.h + $TOOLKIT_DIR$\inc\c\DLib_Threads.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dac.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c + $PROJ_DIR$\..\obj\stm32f0xx_misc.o + $PROJ_DIR$\..\obj\stm32f0xx_spi.o + $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o + $PROJ_DIR$\..\obj\stm32f0xx_tim.o + $PROJ_DIR$\..\obj\stm32f0xx_dma.pbi + $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h + $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi + $TOOLKIT_DIR$\inc\c\yvals.h + $PROJ_DIR$\..\..\Boot\blt_conf.h + $PROJ_DIR$\..\bin\demoprog_stm32f091.srec + $PROJ_DIR$\..\obj\stm32f0xx_pwr.o + $PROJ_DIR$\..\obj\timer.o + $PROJ_DIR$\..\obj\main.o + $TOOLKIT_DIR$\inc\c\stdint.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c + $PROJ_DIR$\..\obj\boot.o + $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi + $TOOLKIT_DIR$\inc\c\ycheck.h + $TOOLKIT_DIR$\inc\c\xencoding_limits.h + $TOOLKIT_DIR$\inc\c\DLib_Product.h + $TOOLKIT_DIR$\inc\c\DLib_Defaults.h + $PROJ_DIR$\..\obj\stm32f0xx_spi.pbi + $PROJ_DIR$\..\obj\stm32f0xx_crc.pbi + $TOOLKIT_DIR$\lib\shb_l.a + $PROJ_DIR$\..\obj\stm32f0xx_dma.o + $PROJ_DIR$\..\obj\demoprog_stm32f091.map + $PROJ_DIR$\..\obj\led.o + $PROJ_DIR$\..\obj\stm32f0xx_flash.o + $PROJ_DIR$\..\obj\stm32f0xx_crs.__cstat.et + $TOOLKIT_DIR$\lib\m6M_tl.a + $PROJ_DIR$\..\obj\stm32f0xx_crc.o + $PROJ_DIR$\..\obj\stm32f0xx_exti.o + $PROJ_DIR$\..\obj\stm32f0xx_adc.o + $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_dac.o + $PROJ_DIR$\..\obj\stm32f0xx_gpio.pbi + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o + $PROJ_DIR$\..\obj\stm32f0xx_comp.o + $PROJ_DIR$\..\stm32f091_flash.icf + $PROJ_DIR$\..\obj\stm32f0xx_cec.o + $TOOLKIT_DIR$\lib\dl6M_tln.a + $PROJ_DIR$\..\obj\stm32f0xx_can.pbi + $PROJ_DIR$\..\obj\stm32f0xx_gpio.o + $PROJ_DIR$\..\obj\stm32f0xx_tim.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_can.o + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h + $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.pbi + $PROJ_DIR$\..\obj\stm32f0xx_spi.__cstat.et + $PROJ_DIR$\..\obj\stm32f0xx_crs.o + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c + $TOOLKIT_DIR$\inc\c\ysizet.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crs.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h + $PROJ_DIR$\..\bin\demoprog_stm32f091.out + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_flash.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_syscfg.h + $TOOLKIT_DIR$\inc\c\stdio.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_misc.h + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h + $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h + $PROJ_DIR$\..\led.h + $PROJ_DIR$\..\startup_stm32f091.s + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c + $PROJ_DIR$\..\timer.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h $PROJ_DIR$\..\obj\stm32f0xx_rcc.pbi + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart.h + $PROJ_DIR$\..\main.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + $PROJ_DIR$\..\timer.h + $PROJ_DIR$\..\boot.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - $PROJ_DIR$\..\lib\stm32f0xx.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c - $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h - $PROJ_DIR$\..\obj\stm32f0xx_usart.pbi - $PROJ_DIR$\..\obj\stm32f091.pbd - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_adc.h - $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi - $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h - $TOOLKIT_DIR$\inc\c\intrinsics.h - $PROJ_DIR$\..\obj\stm32f0xx_rtc.o - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h - $TOOLKIT_DIR$\lib\rt6M_tl.a - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c - $PROJ_DIR$\..\lib\cmsis\core_cm0.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rcc.h - $PROJ_DIR$\..\obj\stm32f0xx_misc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_pwr.pbi - $PROJ_DIR$\..\obj\main.pbi - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h - $TOOLKIT_DIR$\inc\c\cmsis_iar.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h + $PROJ_DIR$\..\boot.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h + $PROJ_DIR$\..\led.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart_ex.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c_ex.h + $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h + $PROJ_DIR$\..\lib\system_stm32f0xx.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + $PROJ_DIR$\..\header.h $PROJ_DIR$\..\obj\stm32f0xx_tim.pbi + $PROJ_DIR$\..\obj\stm32f0xx_exti.pbi + $PROJ_DIR$\..\lib\cmsis\core_cm0.h $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_can.h $PROJ_DIR$\..\lib\system_stm32f0xx.h + $TOOLKIT_DIR$\inc\c\intrinsics.h $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_cec.h $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.o $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.o $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.__cstat.et $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.o - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_misc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.xcl - $PROJ_DIR$\..\obj\boot.xcl - $PROJ_DIR$\..\obj\stm32f0xx_flash.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.xcl - $PROJ_DIR$\..\obj\timer.xcl - $PROJ_DIR$\..\obj\stm32f0xx_rtc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_usart.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim.xcl - $PROJ_DIR$\..\obj\stm32f0xx_i2c.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_can.xcl - $PROJ_DIR$\..\obj\stm32f0xx_can.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_comp.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dma.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crs.pbi - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_tim_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.__cstat.et - $PROJ_DIR$\..\obj\timer.__cstat.et - $PROJ_DIR$\..\obj\system_stm32f0xx.xcl - $PROJ_DIR$\..\obj\main.xcl - $PROJ_DIR$\..\obj\boot.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.xcl - $PROJ_DIR$\..\obj\stm32f0xx_gpio.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_cec.pbi - $PROJ_DIR$\..\obj\system_stm32f0xx.o - $PROJ_DIR$\..\obj\led.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_can.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr.__cstat.et - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_can.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_cortex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_rcc_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_dma.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_pwr_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.xcl - $PROJ_DIR$\..\obj\stm32f0xx_hal_uart_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.xcl - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.o - $PROJ_DIR$\..\obj\stm32f0xx_hal_gpio.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal_flash_ex.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_hal.__cstat.et - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c - $PROJ_DIR$\..\obj\stm32f0xx_hal_i2c_ex.__cstat.et - $PROJ_DIR$\..\obj\startup_stm32f091.o - $PROJ_DIR$\..\obj\stm32f0xx_exti.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_adc.pbi - $TOOLKIT_DIR$\inc\c\iccarm_builtin.h - $PROJ_DIR$\..\obj\led.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_usart.__cstat.et - $PROJ_DIR$\..\obj\main.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dac.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_rtc.pbi - $PROJ_DIR$\..\obj\stm32f0xx_cec.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_pwr.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.pbi - $PROJ_DIR$\..\obj\stm32f0xx_adc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.o - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c - $PROJ_DIR$\..\obj\stm32f0xx_i2c.o - $PROJ_DIR$\..\obj\stm32f0xx_rcc.o - $PROJ_DIR$\..\obj\stm32f0xx_iwdg.pbi - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dac.h - $PROJ_DIR$\..\obj\stm32f0xx_dma.pbi - $TOOLKIT_DIR$\inc\c\DLib_Defaults.h - $PROJ_DIR$\..\obj\boot.o - $PROJ_DIR$\..\obj\stm32f0xx_wwdg.o - $TOOLKIT_DIR$\inc\c\yvals.h - $PROJ_DIR$\..\obj\stm32f0xx_pwr.o - $PROJ_DIR$\..\bin\demoprog_stm32f091.srec - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - $PROJ_DIR$\..\obj\timer.o - $PROJ_DIR$\..\obj\boot.pbi - $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h - $PROJ_DIR$\..\obj\led.pbi - $PROJ_DIR$\..\lib\stm32f0xx_conf.h - $TOOLKIT_DIR$\inc\c\ycheck.h - $PROJ_DIR$\..\obj\main.o - $PROJ_DIR$\..\obj\stm32f0xx_misc.o - $TOOLKIT_DIR$\inc\c\stdint.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - $TOOLKIT_DIR$\inc\c\xencoding_limits.h - $TOOLKIT_DIR$\inc\c\DLib_Threads.h - $TOOLKIT_DIR$\inc\c\DLib_Product.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c - $PROJ_DIR$\..\obj\stm32f0xx_syscfg.pbi - $PROJ_DIR$\..\obj\stm32f0xx_spi.o - $PROJ_DIR$\..\obj\stm32f0xx_tim.o - $PROJ_DIR$\..\..\Boot\blt_conf.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_exti.h - $PROJ_DIR$\..\obj\stm32f0xx_flash.pbi - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dma.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_i2c.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c - $PROJ_DIR$\..\bin\demoprog_stm32f091.out - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_comp.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_iwdg.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_gpio.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_flash.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_syscfg.h - $TOOLKIT_DIR$\inc\c\stdio.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_usart.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c - $PROJ_DIR$\..\obj\stm32f0xx_comp.pbi - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rtc.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crs.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_misc.h - $TOOLKIT_DIR$\inc\c\ysizet.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_tim.h - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_wwdg.h - $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_crc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c.h - $PROJ_DIR$\..\boot.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_i2c_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - $PROJ_DIR$\..\boot.c - $PROJ_DIR$\..\led.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_uart_ex.h - $PROJ_DIR$\..\lib\stm32f0xx_hal_conf.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_pwr_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - $PROJ_DIR$\..\lib\system_stm32f0xx.c - $PROJ_DIR$\..\led.h - $PROJ_DIR$\..\header.h - $PROJ_DIR$\..\main.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_rcc_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Inc\stm32f0xx_hal_gpio_ex.h - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c - $PROJ_DIR$\..\startup_stm32f091.s - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c - $PROJ_DIR$\..\timer.c - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c_ex.c - $PROJ_DIR$\..\obj\stm32f0xx_dac.pbi - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.pbi - $PROJ_DIR$\..\obj\timer.pbi - $PROJ_DIR$\..\obj\stm32f0xx_spi.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crs.o - $PROJ_DIR$\..\obj\stm32f0xx_can.pbi - $TOOLKIT_DIR$\lib\shb_l.a - $PROJ_DIR$\..\obj\stm32f0xx_dma.o - $PROJ_DIR$\..\obj\stm32f0xx_gpio.pbi - $PROJ_DIR$\..\obj\stm32f0xx_cec.o - $PROJ_DIR$\..\obj\system_stm32f0xx.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_dac.o - $PROJ_DIR$\..\obj\stm32f0xx_flash.o - $PROJ_DIR$\..\obj\stm32f0xx_rcc.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crc.pbi - $PROJ_DIR$\..\stm32f091_flash.icf - $PROJ_DIR$\..\obj\stm32f0xx_dbgmcu.o - $PROJ_DIR$\..\obj\demoprog_stm32f091.map - $PROJ_DIR$\..\obj\stm32f0xx_exti.o - $PROJ_DIR$\..\obj\stm32f0xx_crs.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_adc.o - $TOOLKIT_DIR$\lib\m6M_tl.a - $PROJ_DIR$\..\obj\stm32f0xx_spi.pbi - $PROJ_DIR$\..\obj\stm32f0xx_comp.o - $TOOLKIT_DIR$\lib\dl6M_tln.a - $PROJ_DIR$\..\timer.h - $PROJ_DIR$\..\obj\led.o - $PROJ_DIR$\..\obj\stm32f0xx_gpio.o - $PROJ_DIR$\..\obj\stm32f0xx_tim.__cstat.et - $PROJ_DIR$\..\obj\stm32f0xx_crc.o - $PROJ_DIR$\..\obj\stm32f0xx_can.o + $TOOLKIT_DIR$\inc\c\cmsis_iar.h + $PROJ_DIR$\..\obj\stm32f0xx_i2c.pbi + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_adc.h + $PROJ_DIR$\..\obj\stm32f091.pbd + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + $PROJ_DIR$\..\obj\stm32f0xx_rtc.o + $TOOLKIT_DIR$\lib\rt6M_tl.a + $PROJ_DIR$\..\obj\stm32f0xx_usart.pbi + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c + $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h + $PROJ_DIR$\..\lib\stm32f0xx.h + $PROJ_DIR$\..\obj\stm32f0xx_misc.pbi + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_pwr.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_rcc.h + $PROJ_DIR$\..\obj\stm32f0xx_pwr.pbi + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_dbgmcu.h + $PROJ_DIR$\..\lib\SPL\inc\stm32f0xx_spi.h [ROOT_NODE] ILINK - 183 253 + 189 152 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c ICCARM - 64 + 54 BICOMP - 117 + 50 + + + __cstat + 79 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + + + ICCARM + 26 + + + BICOMP + 100 __cstat @@ -301,20 +320,66 @@ ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_can.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c ICCARM - 116 + 51 BICOMP - 78 + 93 + + + __cstat + 104 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c + + + ICCARM + 67 + + + BICOMP + 46 + + + __cstat + 55 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c + + + ICCARM + 38 + + + BICOMP + 27 __cstat @@ -324,7 +389,30 @@ ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_can.c + + + ICCARM + 28 + + + BICOMP + 83 + + + __cstat + 43 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 @@ -333,34 +421,287 @@ ICCARM - 60 + 80 BICOMP - 119 + 110 __cstat - 102 + 40 ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_cortex.c ICCARM - 110 + 84 BICOMP - 109 + 30 + + + __cstat + 37 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c + + + ICCARM + 251 + + + BICOMP + 115 + + + __cstat + 57 + + + + + ICCARM + 177 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c + + + ICCARM + 127 + + + BICOMP + 257 + + + __cstat + 66 + + + + + ICCARM + 195 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c + + + ICCARM + 90 + + + BICOMP + 247 + + + __cstat + 82 + + + + + ICCARM + 202 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 188 258 259 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + + + ICCARM + 91 + + + BICOMP + 208 + + + __cstat + 161 + + + + + ICCARM + 259 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + + + ICCARM + 87 + + + BICOMP + 96 + + + __cstat + 75 + + + + + ICCARM + 188 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 258 259 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + + + ICCARM + 129 + + + BICOMP + 107 + + + __cstat + 61 + + + + + ICCARM + 186 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c + + + ICCARM + 128 + + + BICOMP + 148 + + + __cstat + 180 + + + + + ICCARM + 262 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c + + + ICCARM + 170 + + + BICOMP + 163 + + + __cstat + 53 + + + + + ICCARM + 173 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 202 188 258 259 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c + + + ICCARM + 162 + + + BICOMP + 200 + + + __cstat + 103 + + + + + ICCARM + 125 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c + + + ICCARM + 74 + + + BICOMP + 253 + + + __cstat + 117 + + + + + ICCARM + 176 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c + + + ICCARM + 172 + + + BICOMP + 169 __cstat @@ -370,250 +711,43 @@ ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 237 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_flash_ex.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c ICCARM - 103 + 167 BICOMP - 121 + 52 __cstat - 126 + 95 ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 241 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_gpio.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c ICCARM - 107 + 164 BICOMP - 123 - - - __cstat - 125 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal.c - - - ICCARM - 100 - - - BICOMP - 115 - - - __cstat - 127 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - - - ICCARM - 124 - - - BICOMP - 173 - - - __cstat - 137 - - - - - ICCARM - 188 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c - - - ICCARM - 243 - - - BICOMP - 151 - - - __cstat - 81 - - - - - ICCARM - 179 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 177 187 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c - - - ICCARM - 175 - - - BICOMP - 45 - - - __cstat - 264 - - - - - ICCARM - 203 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - - - ICCARM - 156 - - - BICOMP - 41 - - - __cstat - 141 - - - - - ICCARM - 35 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - - - ICCARM - 148 - - - BICOMP - 22 - - - __cstat - 249 - - - - - ICCARM - 39 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c - - - ICCARM - 34 - - - BICOMP - 139 - - - __cstat - 74 - - - - - ICCARM - 194 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_misc.c - - - ICCARM - 166 - - - BICOMP - 40 - - - __cstat - 68 - - - - - ICCARM - 198 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c - - - ICCARM - 147 - - - BICOMP - 26 + 179 __cstat @@ -623,35 +757,31 @@ ICCARM - 181 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 185 35 39 194 43 188 203 190 205 198 + 261 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c + $PROJ_DIR$\..\bin\demoprog_stm32f091.out - ICCARM - 145 + OBJCOPY + 136 - BICOMP - 149 - - - __cstat - 83 + ILINK + 152 - ICCARM - 185 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 35 39 194 43 188 203 190 205 198 + ILINK + 166 142 153 139 89 38 28 84 80 54 26 51 67 245 243 56 59 242 65 70 78 64 34 138 150 252 156 168 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c ICCARM @@ -661,209 +791,6 @@ BICOMP 143 - - __cstat - 67 - - - - - ICCARM - 205 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - - - ICCARM - 247 - - - BICOMP - 236 - - - __cstat - 138 - - - - - ICCARM - 150 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - - - ICCARM - 75 - - - BICOMP - 28 - - - __cstat - 135 - - - - - ICCARM - 190 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c - - - ICCARM - 174 - - - BICOMP - 258 - - - __cstat - 239 - - - - - ICCARM - 43 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_gpio.c - - - ICCARM - 263 - - - BICOMP - 244 - - - __cstat - 92 - - - - - ICCARM - 186 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 187 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c - - - ICCARM - 245 - - - BICOMP - 95 - - - __cstat - 140 - - - - - ICCARM - 50 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\bin\demoprog_stm32f091.out - - - ILINK - 253 - - - OBJCOPY - 157 - - - - - ILINK - 251 153 262 165 130 100 116 64 60 110 103 107 59 54 52 66 61 51 56 63 57 55 96 159 242 36 257 260 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c - - - ICCARM - 248 - - - BICOMP - 178 - - - __cstat - 71 - - - - - ICCARM - 187 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 177 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c - - - ICCARM - 256 - - - BICOMP - 132 - - - __cstat - 144 - - - - - ICCARM - 30 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 47 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - - - ICCARM - 252 - - - BICOMP - 237 - __cstat 85 @@ -872,7 +799,7 @@ ICCARM - 27 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 + 190 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 173 202 188 258 259 177 262 191 184 176 186 195 @@ -881,90 +808,44 @@ ICCARM - 240 + 181 BICOMP - 82 + 58 __cstat - 255 + 155 ICCARM - 196 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 + 185 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c ICCARM - 259 + 159 BICOMP - 192 + 97 __cstat - 80 + 108 ICCARM - 184 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_can.c - - - ICCARM - 266 - - - BICOMP - 241 - - - __cstat - 79 - - - - - ICCARM - 47 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 50 184 206 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c - - - ICCARM - 265 - - - BICOMP - 250 - - - __cstat - 142 - - - - - ICCARM - 206 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 196 150 27 179 177 187 186 181 185 35 39 194 43 188 203 190 205 198 + 248 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 @@ -973,287 +854,11 @@ ICCARM - 254 + 158 BICOMP - 31 - - - __cstat - 131 - - - - - ICCARM - 177 24 38 167 164 155 152 161 171 169 170 32 44 33 46 48 163 30 47 50 184 206 196 150 27 179 187 186 181 185 35 39 194 43 188 203 190 205 198 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c - - - ICCARM - 61 - - - BICOMP - 98 - - - __cstat - 113 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c - - - ICCARM - 51 - - - BICOMP - 90 - - - __cstat - 118 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\boot.c - - - ICCARM - 153 - - - BICOMP - 70 - - - __cstat - 89 - - - - - ICCARM - 225 176 2 21 0 167 164 155 152 161 171 13 44 133 18 14 19 220 218 17 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 208 224 261 - - - - - $PROJ_DIR$\..\led.c - - - ICCARM - 262 - - - BICOMP - 97 - - - __cstat - 134 - - - - - ICCARM - 225 176 2 21 0 167 164 155 152 161 171 13 44 133 18 14 19 220 218 17 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 208 224 261 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_i2c.c - - - ICCARM - 59 - - - BICOMP - 111 - - - __cstat - 114 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c - - - ICCARM - 55 - - - BICOMP - 94 - - - __cstat - 122 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c - - - ICCARM - 66 - - - BICOMP - 69 - - - __cstat - 120 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\system_stm32f0xx.c - - - ICCARM - 96 - - - BICOMP - 87 - - - __cstat - 246 - - - - - ICCARM - 2 21 0 167 164 155 152 161 171 13 44 133 18 14 19 220 218 17 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\main.c - - - ICCARM - 165 - - - BICOMP - 88 - - - __cstat - 136 - - - - - ICCARM - 225 176 2 21 0 167 164 155 152 161 171 13 44 133 18 14 19 220 218 17 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 208 224 261 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c - - - ICCARM - 52 - - - BICOMP - 91 - - - __cstat - 105 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c - - - ICCARM - 56 - - - BICOMP - 76 - - - __cstat - 53 - - - - - ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 - - - - - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c - - - ICCARM - 57 - - - BICOMP - 72 + 234 __cstat @@ -1263,7 +868,53 @@ ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 120 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 190 173 202 188 258 259 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + + + ICCARM + 157 + + + BICOMP + 149 + + + __cstat + 106 + + + + + ICCARM + 199 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + + + ICCARM + 165 + + + BICOMP + 174 + + + __cstat + 72 + + + + + ICCARM + 187 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 184 176 186 195 @@ -1272,30 +923,30 @@ AARM - 130 + 89 - $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr.c ICCARM - 63 + 243 BICOMP - 84 + 35 __cstat - 65 + 29 ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 @@ -1304,21 +955,44 @@ ICCARM - 159 + 138 BICOMP - 73 + 69 __cstat - 86 + 47 ICCARM - 225 176 2 21 0 167 164 155 152 161 171 13 44 133 18 14 19 220 218 17 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 208 224 261 + 232 135 12 19 6 140 144 134 147 132 146 11 246 118 2 13 17 228 221 15 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 220 203 213 + + + + + $PROJ_DIR$\..\main.c + + + ICCARM + 139 + + + BICOMP + 24 + + + __cstat + 113 + + + + + ICCARM + 232 135 12 19 6 140 144 134 147 132 146 11 246 118 2 13 17 228 221 15 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 220 203 213 @@ -1327,44 +1001,346 @@ ICCARM - 54 + 245 BICOMP - 93 + 45 __cstat - 129 + 111 ICCARM - 19 220 218 17 2 21 0 167 164 155 152 161 171 13 44 133 18 14 189 199 228 11 229 20 7 16 12 6 9 207 209 216 221 217 219 + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 - + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc_ex.c + + + ICCARM + 242 + + + BICOMP + 32 + + + __cstat + 105 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\boot.c + + + ICCARM + 142 + + + BICOMP + 86 + + + __cstat + 41 + + + + + ICCARM + 232 135 12 19 6 140 144 134 147 132 146 11 246 118 2 13 17 228 221 15 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 220 203 213 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_rcc.c + + + ICCARM + 59 + + + BICOMP + 39 + + + __cstat + 31 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c - ICCARM - - + + + ICCARM + 94 + + + BICOMP + 133 + + + __cstat + 114 + + + + + ICCARM + 191 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_pwr_ex.c + + + ICCARM + 56 + + + BICOMP + 81 + + + __cstat + 98 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart_ex.c + + + ICCARM + 64 + + + BICOMP + 42 + + + __cstat + 88 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\led.c + + + ICCARM + 153 + + + BICOMP + 33 + + + __cstat + 102 + + + + + ICCARM + 232 135 12 19 6 140 144 134 147 132 146 11 246 118 2 13 17 228 221 15 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 220 203 213 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_uart.c + + + ICCARM + 78 + + + BICOMP + 68 + + + __cstat + 48 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\system_stm32f0xx.c + + + ICCARM + 34 + + + BICOMP + 36 + + + __cstat + 160 + + + + + ICCARM + 12 19 6 140 144 134 147 132 146 11 246 118 2 13 17 228 221 15 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim.c + + + ICCARM + 65 + + + BICOMP + 60 + + + __cstat + 244 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + + $PROJ_DIR$\..\lib\STM32F0xx_HAL_Driver\Src\stm32f0xx_hal_tim_ex.c + + + ICCARM + 70 + + + BICOMP + 76 + + + __cstat + 63 + + + + + ICCARM + 17 228 221 15 12 19 6 140 144 134 147 132 146 11 246 118 2 13 192 183 207 4 5 22 23 21 18 8 1 223 227 225 219 209 224 + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c - ICCARM - + + + ICCARM + 137 + + + BICOMP + 260 + + + __cstat + 116 + + + + + ICCARM + 258 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 259 177 262 191 184 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + + + ICCARM + 130 + + + BICOMP + 233 + + + __cstat + 171 + + + + + ICCARM + 184 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 121 120 190 173 202 188 258 259 177 262 191 176 186 195 + + + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c + + + ICCARM + 151 + + + BICOMP + 131 + + + __cstat + 73 + + + + + ICCARM + 121 256 235 140 144 134 147 132 146 145 122 255 246 239 236 238 119 248 237 241 187 199 185 125 261 120 190 173 202 188 258 259 177 262 191 184 176 186 195 + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rtc.c ICCARM @@ -1377,6 +1353,10 @@ $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_i2c.c ICCARM + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_rcc.c + ICCARM + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_iwdg.c ICCARM @@ -1385,14 +1365,6 @@ $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_wwdg.c ICCARM - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c - ICCARM - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_spi.c ICCARM @@ -1402,27 +1374,11 @@ ICCARM - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dac.c ICCARM - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c - ICCARM - - - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_usart.c ICCARM @@ -1430,13 +1386,53 @@ ICCARM - $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_cec.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dbgmcu.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_flash.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crs.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_adc.c ICCARM $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_exti.c ICCARM + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_crc.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_comp.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_syscfg.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_pwr.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_tim.c + ICCARM + + + $PROJ_DIR$\..\lib\SPL\src\stm32f0xx_dma.c + ICCARM + Release diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/stm32f0xx_hal_conf.h index 70e83cdd..2c1ab465 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_IAR/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/bin/openblt_stm32f091.axf b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/bin/openblt_stm32f091.axf index 8b354a0d2095c7ec4edaf5303fde5e9284a52ac1..2d2190a345c128ca0534d19a59f971fca41337e6 100644 GIT binary patch delta 47834 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 delta 45491 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 v-f-~G{4IW4Si34^QzsSKSN1 0 0 - 0 + 5 @@ -114,9 +114,14 @@ - BIN\UL2CM3.DLL + STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + ST-LINKIII-KEIL_SWO + -U066BFF545454885087232242 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM) + 0 UL2CM3 @@ -188,7 +193,7 @@ 1 - 1 + 0 0 2 10000000 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/stm32f0xx_hal_conf.h index 5fdd5e99..41f530fd 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/bin/demoprog_stm32f091.axf b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/bin/demoprog_stm32f091.axf index be6ff93198b431fd822669f435dfa21099c5cdb5..fb7a3ab0c4f2032c3759bbc267ac9f5aef40bea2 100644 GIT binary patch delta 27114 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 delta 26398 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 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/bin/demoprog_stm32f091.srec b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/bin/demoprog_stm32f091.srec index 340fb100..ee77f59e 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/bin/demoprog_stm32f091.srec +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/bin/demoprog_stm32f091.srec @@ -1,7 +1,7 @@ -S3150800280058080020692900088F290008912900081E +S3150800280018080020692900088F290008912900085E S3150800281000000000000000000000000000000000AA S3150800282000000000000000000000000093290008D6 -S31508002830000000000000000095290008293F000854 +S31508002830000000000000000095290008613E00081D S315080028409929000899290008992900089929000852 S315080028509929000899290008992900089929000842 S315080028609929000899290008992900089929000832 @@ -14,20 +14,20 @@ S315080028C0EE11AA5500F002F800F03EF80CA030C848 S315080028D0083824182D18A246671EAB4654465D468E S315080028E0AC4201D100F030F87E460F3E0FCCB6461A S315080028F00126334200D0FB1AA246AB46334318479B -S31508002900401B0000601B0000103A02D378C878C14B +S31508002900541A0000741A0000103A02D378C878C125 S31508002910FAD8520701D330C830C101D504680C6013 S31508002920704700000023002400250026103A01D332 S3150800293078C1FBD8520700D330C100D50B60704769 S315080029401FB51FBD10B510BD00F0F8F81146FFF70A -S31508002950F7FF01F04DFD00F010F903B4FFF7F2FFA1 +S31508002950F7FF01F0D8FC00F010F903B4FFF7F2FF17 S3150800296003BC00F017F900000F4880F308880F48E9 S315080029700168090E0E4A914205D10E480E490160BA S315080029800E480F4901600F4880470F480047FEE789 S31508002990FEE7FEE7FEE7FEE7FEE700000B480C4908 -S315080029A00C4A0D4B70470000580800200400000030 +S315080029A00C4A0D4B70470000180800200400000070 S315080029B01F0000001810024001000000000001403E -S315080029C0000000008D3F0008C528000858020020B6 -S315080029D05808002058040020580400200022030943 +S315080029C000000000C53E0008C528000818020020BF +S315080029D01808002018040020180400200022030903 S315080029E08B422CD3030A8B4211D300239C464EE01C S315080029F003460B433CD4002243088B4231D30309D8 S31508002A008B421CD3030A8B4201D394463FE0C30989 @@ -55,403 +55,388 @@ S31508002B5018B020B5FFF722FF60BC00274908B64623 S31508002B600026C0C5C0C5C0C5C0C5C0C5C0C5C0C58E S31508002B70C0C5403D49008D46704710B50446C0465D S31508002B80C0462046FFF7E9FE10BD00000048704722 -S31508002B90F401002001491820ABBEFEE7260002001A +S31508002B90B401002001491820ABBEFEE7260002005A S31508002BA070470000BFF34F8F04490348C860BFF35E S31508002BB04F8F00BFFDE700000400FA0500ED00E0B6 -S31508002BC070B50E4D0024002211460D4800F039FA62 -S31508002BD0002812D10A48406B0168A94203D18168CE -S31508002BE0002900D10124012C07D1017DFF2904D138 -S31508002BF0407D002801D1FFF7D5FF70BD67060000AC -S31508002C008C01002010B58EB000240D940C940B9402 -S31508002C10FF200BAB0CAA0DA9F53000F097F81A485F -S31508002C201849016004630146443141638461C46103 -S31508002C30046244628462C4628460C46008A9097C30 -S31508002C40491E0904016108A9097B491E0905416154 -S31508002C506946898E416000F03DF906940794012083 -S31508002C6008900A49019102940949039104210491A3 -S31508002C70059409900E200A9001A9034800F09AF8D5 -S31508002C800EB010BD006400408C010020E0CC0000AE -S31508002C90E0FF000010B500F009F8FFF791FF10BD3E -S31508002CA010B500F03DF8FFF7ADFF10BD70B51A4C32 -S31508002CB000256078194E00280ED020783018401C60 -S31508002CC001F086FB012817D001F08EF9616864319E -S31508002CD0884200D9657070BD104801F079FB01285B -S31508002CE0F9D13078401E3F28F5D801F07DF96060AB -S31508002CF001206070257070BD2078401CC0B220701D -S31508002D0031788142F7D165707078FF28F3D1B078B1 -S31508002D100028F0D1FFF746FFC8000020D8000020A1 -S31508002D2010B5094807490160E121090241600021FF -S31508002D308160C160016181610C21416100F0DAFFA7 -S31508002D4010BD0000004400401C010020FFB581B002 -S31508002D50074600F00BFD7D21C900FFF73FFE0090F6 -S31508002D600024124E6500A919705D49784118491C5E -S31508002D7079430098FFF732FE002911D1029980B2F3 -S31508002D8008800B49401E88420AD86000315C0398C7 -S31508002D900170A819417804980170012005B0F0BDAA -S31508002DA0641CE4B2122CDDD30020F7E71A440008AD -S31508002DB0FF030000F0B50B7D01229A400368FF333C -S31508002DC0FF3302331C683F252D02AC434D6A2D02A2 -S31508002DD06D1C2C431C600368FF33FF330233DC6928 -S31508002DE09443DC610924A401CB69251D002B1AD163 -S31508002DF00368FF33FF330233DE689643DE608B8950 -S31508002E008E881B04B6B24F6933430668FF003F1924 -S31508002E10F3510B890E881B04B6B24F693343066813 -S31508002E20FF007F19F351CB69012B1AD10368FF33D1 -S31508002E30FF330233DE681643DE600B888E881B0478 -S31508002E40B6B24F6933430668FF003C1933510B8904 -S31508002E508C891B04A4B24E6923430468F6007519CD -S31508002E6063518B69002B14D00368FF33FF33023399 -S31508002E705C6814435C600B69002B12D00368FF334F -S31508002E80FF3302335C6914435C61096A012910D077 -S31508002E9016E00368FF33FF3302335C6894435C60D3 -S31508002EA0E9E70368FF33FF3302335C6994435C61E7 -S31508002EB0EBE70168FF31FF310231CB691343CB6180 -S31508002EC00068FF30FF300230016849084900016098 -S31508002ED00020F0BDF8B504460026002C05D025468E -S31508002EE02035687F002802D006E00120F8BD0020C2 -S31508002EF02877204600F0A4F802216977206802683E -S31508002F008A4302602068016801221143016000F0CB -S31508002F1047FA07460AE000F043FAC01B0A2805D913 -S31508002F2003206877002028770320F8BD20684068CA -S31508002F30C007F0D020684168C90775D0A26980210A -S31508002F40012A3FD002688A430260E06940210128CD -S31508002F503CD0206802688A430260206A2021012842 -S31508002F6039D0206802688A430260606A1021012805 -S31508002F7036D0206802688A430260A06A08210128C0 -S31508002F8033D0206802688A430260E06A012831D09B -S31508002F9020680168042291430160E168A0686269BB -S31508002FA008432169114308436168491E084321689B -S31508002FB0C8612068016849084900016000F0F0F915 -S31508002FC0074628E002680A430260BEE720680268EE -S31508002FD00A430260C1E7206802680A430260C4E740 -S31508002FE0206802680A430260C7E7206802680A4345 -S31508002FF00260CAE720680168042211430160CCE731 -S3150800300000F0CEF9C01B0A2805D9032068770020EE -S3150800301028770320F8BD20684068C007F0D12068EB -S315080030204068C00700D10126012E03D00420687726 -S315080030300120F8BD00202064012068770020F8BD33 -S315080030407047F8B505460E4617462C462034207FAD -S31508003050012804D001202077002E02D00DE002209E -S31508003060F8BD607F22280BD0607F422808D0607F99 -S31508003070622805D0607F722802D0012E04D00FE0A6 -S31508003080002020770220F8BD607F322819D0607FA3 -S31508003090522816D0607F622813D0607F722810D01D -S315080030A062217222002E10D0607F12281ED022289C -S315080030B01FD042281FD03220607700F071F90090A7 -S315080030C02BE0002020770220F8BD607F122806D06A -S315080030D0322807D0522807D022206077EDE7422011 -S315080030E06077EAE76177E8E76277E6E75220607794 -S315080030F0E3E76177E1E76277DFE7781C0DD0002F19 -S3150800310005D000F04DF90099401AB84205D90320B8 -S315080031106077002020770320F8BD002E63D028684A -S3150800312000698007800F0028E7D0002E60D0A86BC2 -S3150800313031010A46FF322B68B1329B5804273B40BF -S315080031408360002B56D02B689B58DB0843602B689E -S315080031509A589207D20FC2600A46FF322B68B532D8 -S315080031609B581B071B0F03612B689A581204120EF3 -S31508003170C26106620A46FF322B68B9329B5803754C -S315080031802B689B581B0A43752B689B581B0C837529 -S315080031902B689A58120EC275FF312A68BD315258EB -S315080031A002762A685258120A42762A685258120C2F -S315080031B082762A685158090EC1762021002E1ED023 -S315080031C0286802690A4302611221002E1CD0607F1A -S315080031D052282BD062282BD072282CD00120607759 -S315080031E000202077F8BD2868C0688007800F9AE716 -S315080031F0686B9DE72B689B585B0D0360A7E72868FB -S31508003200C2680A43C260DFE7607F422806D06228A8 -S3150800321006D0722807D001206077E1E76177DFE7FB -S3150800322032206077DCE752206077D9E76177D7E705 -S3150800323022206077D4E742206077D1E7F8B50022EC -S3150800324093E001249440A4462340002B7ED04C688A -S31508003250022C01D0122C0CD1D408A40027183D6AE0 -S315080032605407E40E0F26A640B5430E69A6402E4322 -S315080032703E62076855000324AC40A7430E79B6079B -S31508003280B60FAE403E4306604E68012E05D0022EAC -S3150800329003D0112E01D0122E0ED18768A743CE680F -S315080032A0AE403E43866047686646B7430E79F606E3 -S315080032B0F60F96403E434660C668A6438C68AC4007 -S315080032C03443C4604C68E4004ED52B4CA5690126EE -S315080032D03543A561A469344000949508274CAD0090 -S315080032E02F19BD689407240F0F26A640B543092653 -S315080032F0F606B04201D1002614E0214EB04201D1B3 -S3150800330001260FE01F4EB04201D102260AE01E4EEA -S31508003310B04201D1032605E01C4EB04201D1042675 -S3150800332000E00526A6402E43BE60194D2C689C4336 -S315080033304E68F60300D51C432C606C689C434E68A7 -S31508003340B60300D51C436C60AC6800E00CE09C43F7 -S315080033504E68F60200D51C43AC60EC689C434E6888 -S31508003360B60200D51C43EC60521C0B681C46D440C0 -S3150800337000D066E7F8BD00000010024000000140DA -S315080033800004004800080048000C004800100048E7 -S3150800339000040140002A01D08161704781627047AC -S315080033A00148006870470000C40000200248016810 -S315080033B0491C016070470000C400002010B506488B -S315080033C00168102211430160002000F007F800F0A0 -S315080033D017F8002010BD00000020024010B5044672 -S315080033E000F0BEF97D21C900FFF7F8FA00F066FC87 -S315080033F000222146501E00F061F8002010BD000092 -S31508003400F0B587B02B488169012529438161816917 -S3150800341029400191426969040A43426142690A40A6 -S31508003420019243694A001343436143691340019378 -S31508003430C2690A43C261C2690A400192C2690902A5 -S315080034400A43C261C0690840019000221146501F14 -S3150800345000F034F800221146901E00F02FF80022E2 -S315080034601146501E00F02AF82020029003950024E9 -S31508003470049405940927FF0602A93846FFF7DEFEDD -S315080034800C2002900226039604940594069502A938 -S315080034903846FFF7D3FE03200002029003960494F1 -S315080034A0032005900420069002A90348FFF7C6FEEC -S315080034B007B0F0BD001002400004004810B500F047 -S315080034C011FD10BDF8B504462068454DC00355D515 -S315080034D00026E869C00007D4E96928040143E961C0 -S315080034E0E9690140009101263E480168C90512D4E0 -S315080034F00168821511430160FFF752FF074606E08F -S31508003500FFF74EFFC01B642801D90320F8BD3548D4 -S315080035100068C005F4D5286A032109020840002876 -S315080035201FD062680A4082421BD0286A88432A6AEA -S31508003530012109040A432A622A6A8A432A622862FE -S31508003540C0070ED0FFF72CFF074607E0FFF728FF56 -S31508003550C11B2548814201D90320F8BD286A800786 -S31508003560F4D5286A0321090288436168084328625A -S31508003570012E03D1E96930078143E9612078C00744 -S3150800358005D0286BA1688008800008432863207846 -S31508003590800706D5286B032109048843E168084398 -S315080035A028632068400306D5286B032189048843CD -S315080035B02169084328632078800605D5286B1021E1 -S315080035C088436169084328632088400505D5286B28 -S315080035D040218843A169084328630020F8BD0000FC -S315080035E0001002400070004088130000F8B5054638 -S315080035F00E4656480068C007C00FB0420CD2534862 -S31508003600016849084900314301600068C007C00FD6 -S31508003610B04201D00120F8BD28784D4F800705D566 -S315080036207868F0218843A968084378602878C00735 -S3150800363060D06868012808D002280BD003280ED06D -S315080036403968890710D40120F8BD396889030BD475 -S315080036500120F8BD3968890106D40120F8BD796BC7 -S31508003660C90301D40120F8BD796889088900014396 -S315080036707960FFF795FE0446686801280CD0022891 -S3150800368018D0032824D031E0FFF78AFE011B314801 -S31508003690814201D90320F8BD78680007800F012808 -S315080036A0F2D127E0FFF77CFE011B2A48814201D9A7 -S315080036B00320F8BD78680007800F0228F2D119E0C8 -S315080036C0FFF76EFE011B2348814201D90320F8BD8E -S315080036D078680007800F0328F2D10BE0FFF760FE39 -S315080036E0011B1C48814201D90320F8BD78680007F0 -S315080036F0800FF3D115480168C907C90FB1420BD924 -S31508003700016849084900314301600068C007C00FD5 -S31508003710B04201D00120F8BD2878400706D5786860 -S31508003720072109028843E9680843786000F02EF803 -S315080037307968094A0906090F515CC84007490860B3 -S315080037400020FFF74BFE0020F8BD000000200240D5 -S31508003750001002408813000002440008C000002040 -S315080037600148006870470000C000002000B5FFF758 -S31508003770F7FF04494968044A4905490F515CC8409E -S3150800378000BD0000001002401244000830B589B0A0 -S315080037901CA001460EC9C06805AC0EC408901DA041 -S315080037A001460EC9C06801AC0EC404901D4D6A6876 -S315080037B00C20114601401C48042905D01B4B08293A -S315080037C004D00C2900D1184609B030BD9102090F62 -S315080037D005AC645CE96A01AD0907090F695CD203A7 -S315080037E0920F022A05D0032A07D0FFF7F7F860439D -S315080037F0EAE7FFF7F3F86043E6E71846FFF7EEF85F -S315080038006043E1E702030405060708090A0B0C0DE5 -S315080038100E0F10100102030405060708090A0B0C0F -S315080038200D0E0F100010024000127A00006CDC0228 -S31508003830FEB504462078F84EF84DC00757D068689C -S315080038400007800F01281FD068680007800F02282C -S3150800385004D16868C003800F022815D06068012863 -S315080038601AD00121890400281AD005281FD02868F3 -S31508003870B04328602868884328606068002828D0F4 -S31508003880FFF78EFD074620E0286880032FD560687D -S3150800389000282CD10120FEBD286830432860ECE7BB -S315080038A02868B0432860286888432860E5E72868C0 -S315080038B008432860286830432860DEE7FFF770FD74 -S315080038C0C01B642801D90320FEBD28688003F5D5EE -S315080038D00DE0FFF765FD074606E0FFF761FDC01B33 -S315080038E0642801D90320FEBD28688003F5D4207812 -S315080038F080074CD568680007800F14D068680007F1 -S31508003900800F022804D16868C003800F01280AD0F6 -S31508003910E068002829D02868012108432860FFF7B5 -S315080039203FFD074616E02868800704D5E0680128A9 -S3150800393001D00120FEBD2868F82188432169C90005 -S315080039400843286023E0FFF72BFDC01B022801D996 -S315080039500320FEBD28688007F5D52868F821884326 -S315080039602169C9000843286011E02868400840001A -S315080039702860FFF715FD074606E0FFF711FDC01B97 -S31508003980022801D90320FEBD28688007F5D42078CF -S31508003990000727D5E069002812D0686A0121084384 -S315080039A06862FFF7FDFC074606E0FFF7F9FCC01B57 -S315080039B0022801D90320FEBD686A8007F5D511E003 -S315080039C0686A400840006862FFF7EAFC074606E0B6 -S315080039D0FFF7E6FCC01B022801D90320FEBD686A72 -S315080039E08007F5D4207804274007002874DA0020D9 -S315080039F00190E869C00008D4E969B8060143E9619D -S31508003A00E969014000910120019085480168C905CE -S31508003A1013D40168821511430160FFF7C1FC0290B7 -S31508003A2007E0FFF7BDFC0299401A642801D9032074 -S31508003A30FEBD7B480068C005F3D5A068012811D0F3 -S31508003A40002814D005281AD0286A400840002862A1 -S31508003A50286AB8432862A068002825D0FFF7A0FC8A -S31508003A6002901DE0286A012108432862F3E7286AC4 -S31508003A70400840002862286AB8432862EBE7286AAB -S31508003A8038432862286A012108432862E3E7FFF7DA -S31508003A9087FC0299411A6348814201D90320FEBD79 -S31508003AA0286A8007F3D50FE0FFF77AFC029008E052 -S31508003AB0FFF776FC0299411A5A48814201D9032038 -S31508003AC0FEBD286A8007F3D40198012804D1E86965 -S31508003AD0012109078843E8612078C00641D5606955 -S31508003AE001280CD0401D27D0686B38436863686B83 -S31508003AF0400840006863FFF753FC07462EE0686BF2 -S31508003B0038436863686B012108436863FFF748FC1C -S31508003B10074606E0FFF744FCC01B022801D903202C -S31508003B20FEBD686B8007F5D5686BF8218843A169E7 -S31508003B30C9000843686314E0686BB8436863686B38 -S31508003B40F8218843A169C9000843686309E0FFF7BB -S31508003B5027FCC01B022801D90320FEBD686B80071D -S31508003B60F5D4207880063CD568680007800F0328BE -S31508003B7013D068680007800F022804D16868C0035C -S31508003B80800F032809D0206A002819D0686B3043B3 -S31508003B906863FFF705FC06460EE0686BC00320D590 -S31508003BA0206A01281DD00120FEBDFFF7F9FB801B06 -S31508003BB0022801D90320FEBD686BC003F5D510E0C5 -S31508003BC0686BB0436863FFF7EBFB064606E0FFF752 -S31508003BD0E7FB801B022801D90320FEBD686BC003E2 -S31508003BE0F5D4606A002854D069680907890F022944 -S31508003BF051D001273F06022806D02868B843286016 -S31508003C00FFF7CEFB044641E02868B8432860FFF773 -S31508003C10C7FB06460FE00000000001000010024046 -S31508003C200070004088130000FFF7BAFB801B0228CB -S31508003C3001D90320FEBD28688001F5D4E86A216B06 -S31508003C40000900010843E862A16AE06A0843696856 -S31508003C507B22D2039143084368602868384328606A -S31508003C60FFF79EFB044606E0FFF79AFB001B0228B7 -S31508003C7001D90320FEBD28688001F5D509E0FFF7C4 -S31508003C808FFB001B022801D90320FEBD286880018E -S31508003C90F5D40020FEBD0120FEBD00000422054922 -S31508003CA0042803D0086990430861704708691043DF -S31508003CB00861704700E000E07047000010B5094948 -S31508003CC0401E884201D9012010BD074C60610321BE -S31508003CD0081F00F007F90020A061072020610020D6 -S31508003CE010BD0000FFFFFF0000E000E010B5FFF781 -S31508003CF0E3FF10BD70B50446002C05D02546603597 -S31508003D00687A002802D006E0012070BD00202872DB -S31508003D10204600F028F824206872206801684908BF -S31508003D2049000160204600F01BFA012819D0606A94 -S31508003D30002802D0204600F06DF920684168092263 -S31508003D40D20291434160206881682A2291438160AA -S31508003D5020680168012211430160204600F0C0F97D -S31508003D6070BD012070BD7047FFB583B004460E468E -S31508003D7027466037B87A202802D0022007B0F0BD5F -S31508003D80002E0BD00598002808D00120A168000352 -S31508003D90814209D12069002802D005E00120EDE71B -S31508003DA0F00701D00120E9E7387A012819D0012067 -S31508003DB038720020E0662220B872FFF7F1FA019007 -S31508003DC02546403505982883059868830121A0680B -S31508003DD00903FF22884209D12069002803D0AA8353 -S31508003DE010E00220CAE72348A8830BE07F210028B9 -S31508003DF00BD001221207904204D1206900280BD06B -S31508003E003F20A883A88B029025E02069002801D0CE -S31508003E10A983F7E7AA83F5E7A983F3E7688B401E2A -S31508003E20688306980090002220212046019B00F016 -S31508003E309DFA002801D00320A0E70120A16800030D -S31508003E40814202D1206900280DD02068818C029811 -S31508003E5001403170761C688B0028DFD12020B872AB -S31508003E60002038728AE72068808C029908403080E2 -S31508003E70B61CF0E7FF01000010B5FFF79FFA00F047 -S31508003E8059F800F003F800F0B3F810BD10B5092092 -S31508003E9000222021C006FFF77DFA10BD70B500F09C -S31508003EA0A3F804460E4DFF216868F531201A8842AA -S31508003EB00CD328780923DB06002808D000202870B0 -S31508003EC0002220211846FFF765FA6C6070BD0120B4 -S31508003ED02870012220211846FFF75CFAF5E7000052 -S31508003EE0D00000208307FF22DB0E9A408907090EBF -S31508003EF0994000280BDA0007000F0838830808489D -S31508003F009B001818C36993430B43C3617047830822 -S31508003F1004489B001818036893430B4303607047D3 -S31508003F2000ED00E000E400E010B5FFF73FFAFFF708 -S31508003F30DDFE10BD30B599B001200C9005210D911C -S31508003F4002251595010416910521C90417911890A3 -S31508003F500CA8FFF76DFC002800D0FEE707200890A4 -S31508003F60099500240A940B94012108A8FFF73EFB43 -S31508003F70002800D0FEE70195049401A8FFF7A2FAED -S31508003F80002800D0FEE719B030BD000012480168CD -S31508003F900122114301604168104A114041600168DD -S31508003FA00F4A1140016001680122920491430160A1 -S31508003FB041683F22120491434160C16A0909090117 -S31508003FC0C162016B074A11400163416B4908490008 -S31508003FD04163002181607047001002400CB8FF0859 -S31508003FE0FFFFF6FEACFEF0FF10B5FFF7D9F910BDDE -S31508003FF010B5FFF7B5FB7D21C900FEF7EFFCFFF70B -S315080040005DFE0420FFF74AFE00221146501EFFF708 -S3150800401055FA10BD10B5818CC90707D001684A68E2 -S3150800402001235B049A43836A1A434A60818C890791 -S3150800403007D501684A6801231B049A43C36A1A43D1 -S315080040404A60818C490707D501684A6801239B04A1 -S315080040509A43036B1A434A60818C090707D501689E -S315080040604A680123DB039A43436B1A434A60818CEF -S31508004070C90607D501688A6801231B039A43836B1F -S315080040801A438A60818C890607D501688A680123E4 -S315080040905B039A43C36B1A438A60818C490612D51F -S315080040A001684B6801221205046C934323434B6055 -S315080040B0016C914207D101684A6803235B059A435C -S315080040C0436C1A434A60818C090607D501684A6819 -S315080040D00123DB04806C9A4302434A6010BD00004A -S315080040E0F8B504460025E566FFF75AF90646184965 -S315080040F02068884205D01749884202D01649884266 -S315080041001FD10068154F00070BD501213346002241 -S3150800411049052046009700F029F9002801D0032018 -S31508004120F8BD2068006840070BD5012133460022F8 -S3150800413089052046009700F019F9002801D00320C8 -S31508004140F8BD202060346072A07225720020F8BD88 -S31508004150003801400044004000480040FFFFFF01CE -S31508004160F8B50446102000210026A3682269E569EF -S31508004170134362692A431343226815686F4F3D400B -S315080041801D4315602268536803252D03AB43E56874 -S315080041902B435360A369226A1343226895680B2749 -S315080041A03F02BD431D439560654F2568654B020375 -S315080041B0BD4212D11B6B9B079B0F06D0012B08D063 -S315080041C0022B08D0032B4ED101E000204BE0022041 -S315080041D049E0042047E0082045E05B4FBD4212D184 -S315080041E01B6B03273F043B4007D09B1A07D09B1A3B -S315080041F007D0934237D1022035E0002033E004206F -S3150800420031E008202FE0514FBD4214D11B6B032724 -S31508004210BF043B4009D00127BF04DB1B07D0DB1BCB -S3150800422007D0BB421FD102201DE000201BE004205E -S3150800423019E0082017E0464B9D4201D1002012E004 -S31508004240444B9D4201D100200DE0434B9D4201D1D4 -S31508004250002008E0414B9D4201D1002003E0404B7D -S315080042609D4200D100200123E769DB039F4233D139 -S3150800427000280ED0022816D004281CD0082824D0DE -S3150800428001260A0912010807400F10432168C86071 -S315080042902BE0FFF76BFA616840004A088018FEF7C2 -S315080042A09DFB81B2EDE761682E4A48088018FEF743 -S315080042B095FB81B2E5E7FFF769FA616840004A08AD -S315080042C08018FEF78BFB81B2DBE761684808801827 -S315080042D0FEF784FB81B2D4E7002808D0022811D063 -S315080042E0042818D0082821D001263046F8BDFFF743 -S315080042F03DFA61684A088018FEF770FB216880B2AB -S31508004300C860F2E76168184A48088018FEF766FB35 -S3150800431080B2E860E9E7FFF739FA61684A08801869 -S31508004320FEF75CFB216880B2C860DEE76168480872 -S31508004330C018FEF753FB80B2E860D6E7F369FFEFD3 -S315080043400038014000100240004400400048004088 -S31508004350004C004000500040001401400018014085 -S31508004360001C01400024F40000127A00FFB581B059 -S3150800437005460E4617460A9C1DE0601C1BD0002CFD -S3150800438005D0FFF70DF80499401AA04213D92868FA -S315080043900168FF22A132914301602868603581686F -S315080043A049084900816020206872A8720020287296 -S315080043B0032005B0F0BD2868C1693046884304D09B -S315080043C00020B842D9D00020F3E70120F9E7000021 -S315080043D010B50146002301220448FFF7C5FC002852 -S315080043E001D0002010BD012010BD00001C010020D6 -S315080043F0FFF742FDFEF754FCFFF750FDFEF74AFCB7 -S31508004400FAE70000000000000000010203040607A6 -S31508004410080900000000010203040502060206035B -S3150800442007030803090309040A040B040C040C0512 -S315080044300D050E050F050F061006100710080000DB -S3150800444060440008C0000020180000000829000881 -S3150800445078440008D80000208007000024290008B6 -S3150800446000127A00000000000000000000000000B2 -S30D08004470000000000000000036 +S31508002BC030B589B00E4D00246B4602AA00210D4887 +S31508002BD000F06EF9002811D10298A84203D1049892 +S31508002BE0002800D10124012C08D168460078FF2866 +S31508002BF004D10698022801D1FFF7D4FF09B030BDE9 +S31508002C00670600008C01002030B58DB000240C94B6 +S31508002C100B940A94FF200AAB0BAA0CA9F53000F016 +S31508002C2099F81A481849016004764476847601258D +S31508002C30C576047744778460C46008A9097B491E71 +S31508002C400904016108A9097A491E0905416169460D +S31508002C50098E416000F0ACF90594069407950C4876 +S31508002C60009001940B480290042003900494089560 +S31508002C700E2009906946054800F0A0F8034800F0C0 +S31508002C803BFA0DB030BD0000006400408C01002006 +S31508002C90E0CC0000E0FF000010B500F009F8FFF7EF +S31508002CA08FFF10BD10B500F03DF8FFF7ADFF10BD62 +S31508002CB070B51A4C00256078194E00280ED0207879 +S31508002CC03018401C01F0BCF8012817D001F028F98B +S31508002CD061686431884200D9657070BD104801F09A +S31508002CE0AFF80128F9D13078401E3F28F5D801F011 +S31508002CF017F9606001206070257070BD2078401C4F +S31508002D00C0B2207031788142F7D165707178FF2999 +S31508002D10F3D10228F1D1FFF745FF0000C8000020D3 +S31508002D20D800002010B50A4808490160E1210902C7 +S31508002D30416000218160C16001610C2242618161AC +S31508002D40C1610162416200F061FF10BD00440040AC +S31508002D501C010020FFB581B0074600F093FC7D21D9 +S31508002D60C900FFF73BFE00900024124E6500A91922 +S31508002D70705D49784118491C79430098FFF72EFE83 +S31508002D80002911D1029980B208800B49401E884259 +S31508002D900AD86000315C03980170A8194178049834 +S31508002DA00170012005B0F0BD641CE4B2122CDDD31D +S31508002DB00020F7E730430008FF03000030B503683A +S31508002DC02022125C012A08D0022A06D0416A012272 +S31508002DD0920411434162012030BDDA1DFF32FA32F6 +S31508002DE014680120044314600C7DE406E40EA04038 +S31508002DF0D4698443D461CC69002C1AD1D46884433D +S31508002E00D4608C898D882404ADB22C434D69ED00BD +S31508002E10ED18FF35FF3502352C640C890D8824041E +S31508002E20ADB22C434D69ED00ED18FF35FF3502357F +S31508002E306C64CC69012C1AD1D4680443D4600C881C +S31508002E408D882404ADB22C434D69ED00ED18FF358D +S31508002E50FF3502352C640C898D892404ADB22C43C8 +S31508002E604D69ED00EB18FF33FF3302335C648B6961 +S31508002E70002B0CD05368034353600B69002B0AD010 +S31508002E80536903435361096A012908D00AE0536864 +S31508002E9083435360F1E7536983435361F3E7D16989 +S31508002EA00143D1611068400840001060002030BD21 +S31508002EB0F0B52024245C012C08D0022C06D0416AE7 +S31508002EC001229204114341620120F0BD01246405E8 +S31508002ED0002904D005682D69AD075AD003E00568B6 +S31508002EE0ED68AD0750D00C012546FF350668B135AB +S31508002EF0765904273E409660002E4FD006687659CC +S31508002F00F608566006687559AD07ED0FD560254673 +S31508002F10FF350668B53576593607360F16610668E1 +S31508002F2076593604360E9661066875592D0C556124 +S31508002F302246FF320568B932AD581D700568AD588E +S31508002F402D0A5D700568AD582D0C9D700568AA5848 +S31508002F50120EDA70FF340268BD3412591A7102680B +S31508002F601259120A5A7102681259120C9A71026899 +S31508002F701259120EDA712022002914D0006801694C +S31508002F80114301610020F0BD416A214341620120DD +S31508002F90F0BD416A214341620120F0BD06687659B9 +S31508002FA0760D1660AEE70068C1681143C160E9E7AF +S31508002FB0F8B50446002C05D0254620352878002883 +S31508002FC002D004E00120F8BD204600F094F82068FD +S31508002FD0016802229143016000F06EF90646012756 +S31508002FE07F040BE000F068F9801B0A2806D9606A9E +S31508002FF038436062052028700120F8BD20684068C3 +S315080030008007EFD42068016801221143016000F0AF +S3150800301053F906460BE000F04FF9801B0A2806D93B +S31508003020606A38436062052028700120F8BD206870 +S315080030304068C007EFD0207E802101283DD0206857 +S3150800304002688A430260607E402101283AD02068DF +S3150800305002688A430260A07E2021012837D02068B2 +S3150800306002688A430260E07E1021012834D0206875 +S3150800307002680A430260207F0822012831D02068AE +S31508003080016891430160607F042101282ED02068E1 +S3150800309002688A430260E168A06862690843216998 +S315080030A0114308436168491E08432168C861002026 +S315080030B06062012028700020F8BD206802680A4373 +S315080030C00260C0E7206802680A430260C3E7206816 +S315080030D002680A430260C6E7206802688A430260FB +S315080030E0C9E72068016811430160CCE720680268D7 +S315080030F00A430260CFE7704770B504462646203675 +S315080031003078012806D0606A0121C9040843606244 +S31508003110012070BD02203070206801684908490006 +S31508003120016000F0C9F805460DE000F0C5F8401B3F +S315080031300A2808D9606A0121490408436062052003 +S315080031403070012070BD20684068C007EDD160620C +S3150800315070BD0000F8B5002293E001249440A4460F +S315080031602340002B7ED04C68022C01D0122C0CD1A7 +S31508003170D408A40027183D6A5407E40E0F26A64073 +S31508003180B5430E69A6402E433E62076855000324E0 +S31508003190AC40A7430E79B607B60FAE403E4306606D +S315080031A04E68012E05D0022E03D0112E01D0122E04 +S315080031B00ED18768A743CE68AE403E43866047680F +S315080031C06646B7430E79F606F60F96403E434660C6 +S315080031D0C668A6438C68AC403443C4604C68E400B7 +S315080031E04ED52B4CA56901263543A561A469344003 +S315080031F000949508274CAD002F19BD689407240F35 +S315080032000F26A640B5430926F606B04201D1002688 +S3150800321014E0214EB04201D101260FE01F4EB04204 +S3150800322001D102260AE01E4EB04201D1032605E06E +S315080032301C4EB04201D1042600E00526A6402E43C6 +S31508003240BE60194D2C689C434E68F60300D51C4396 +S315080032502C606C689C434E68B60300D51C436C60B2 +S31508003260AC6800E00CE09C434E68F60200D51C43AF +S31508003270AC60EC689C434E68B60200D51C43EC6013 +S31508003280521C0B681C46D44000D066E7F8BD000007 +S3150800329000100240000001400004004800080048F1 +S315080032A0000C00480010004800040140002A01D024 +S315080032B08161704781627047014800687047000065 +S315080032C0C400002002480168491C016070470000DC +S315080032D0C400002010B50648016810221143016099 +S315080032E0002000F007F800F017F8002010BD0000D5 +S315080032F00020024010B5044600F0BEF97D21C90041 +S31508003300FFF76CFB00F066FC00222146501E00F019 +S3150800331061F8002010BD0000F0B587B02B48816920 +S31508003320012529438161816929400191426969041E +S315080033300A43426142690A40019243694A001343BB +S315080033404361436913400193C2690A43C261C26972 +S315080033500A400192C26909020A43C261C06908406B +S31508003360019000221146501F00F034F80022114641 +S31508003370901E00F02FF800221146501E00F02AF881 +S315080033802020029003950024049405940927FF063B +S3150800339002A93846FFF7DEFE0C20029002260396A5 +S315080033A004940594069502A93846FFF7D3FE032030 +S315080033B000020290039604940320059004200690C8 +S315080033C002A90348FFF7C6FE07B0F0BD0010024089 +S315080033D00004004810B500F011FD10BDF8B504460C +S315080033E02068454DC00355D50026E869C00007D4B6 +S315080033F0E96928040143E961E96901400091012668 +S315080034003E480168C90512D4016882151143016056 +S31508003410FFF752FF074606E0FFF74EFFC01B64287A +S3150800342001D90320F8BD35480068C005F4D5286AD7 +S3150800343003210902084000281FD062680A40824218 +S315080034401BD0286A88432A6A012109040A432A628A +S315080034502A6A8A432A622862C0070ED0FFF72CFF21 +S31508003460074607E0FFF728FFC11B2548814201D917 +S315080034700320F8BD286A8007F4D5286A03210902C3 +S315080034808843616808432862012E03D1E969300739 +S315080034908143E9612078C00705D0286BA1688008B8 +S315080034A08000084328632078800706D5286B032107 +S315080034B009048843E168084328632068400306D561 +S315080034C0286B0321890488432169084328632078E7 +S315080034D0800605D5286B102188436169084328634F +S315080034E02088400505D5286B40218843A1690843F3 +S315080034F028630020F8BD000000100240007000405C +S3150800350088130000F8B505460E4656480068C007F9 +S31508003510C00FB0420CD253480168490849003143EC +S3150800352001600068C007C00FB04201D00120F8BD95 +S3150800353028784D4F800705D57868F0218843A96813 +S31508003540084378602878C00760D06868012808D0E2 +S3150800355002280BD003280ED03968890710D4012019 +S31508003560F8BD396889030BD40120F8BD396889018B +S3150800357006D40120F8BD796BC90301D40120F8BD32 +S3150800358079688908890001437960FFF795FE044642 +S31508003590686801280CD0022818D0032824D031E006 +S315080035A0FFF78AFE011B3148814201D90320F8BD85 +S315080035B078680007800F0128F2D127E0FFF77CFE24 +S315080035C0011B2A48814201D90320F8BD7868000703 +S315080035D0800F0228F2D119E0FFF76EFE011B23487F +S315080035E0814201D90320F8BD78680007800F0328B7 +S315080035F0F2D10BE0FFF760FE011B1C48814201D99E +S315080036000320F8BD78680007800FF3D115480168D4 +S31508003610C907C90FB1420BD90168490849003143A6 +S3150800362001600068C007C00FB04201D00120F8BD94 +S315080036302878400706D57868072109028843E9688B +S315080036400843786000F02EF87968094A0906090FD8 +S31508003650515CC840074908600020FFF74BFE002070 +S31508003660F8BD000000200240001002408813000048 +S3150800367018430008C0000020014800687047000091 +S31508003680C000002000B5FFF7F7FF04494968044A5F +S315080036904905490F515CC84000BD000000100240B2 +S315080036A02843000830B589B01CA001460EC9C06879 +S315080036B005AC0EC408901DA001460EC9C06801AC31 +S315080036C00EC404901D4D6A680C20114601401C4822 +S315080036D0042905D01B4B082904D00C2900D118460B +S315080036E009B030BD9102090F05AC645CE96A01AD09 +S315080036F00907090F695CD203920F022A05D0032A2B +S3150800370007D0FFF76BF96043EAE7FFF767F960430D +S31508003710E6E71846FFF762F96043E1E702030405A6 +S31508003720060708090A0B0C0D0E0F101001020304F8 +S3150800373005060708090A0B0C0D0E0F1000100240AB +S3150800374000127A00006CDC02FEB504462078F84EBA +S31508003750F84DC00757D068680007800F01281FD0AA +S3150800376068680007800F022804D16868C003800FC4 +S31508003770022815D0606801281AD00121890400287A +S315080037801AD005281FD02868B043286028688843BF +S3150800379028606068002828D0FFF78EFD074620E0DD +S315080037A0286880032FD5606800282CD10120FEBD2B +S315080037B0286830432860ECE72868B0432860286802 +S315080037C088432860E5E72868084328602868304366 +S315080037D02860DEE7FFF770FDC01B642801D90320C7 +S315080037E0FEBD28688003F5D50DE0FFF765FD0746A1 +S315080037F006E0FFF761FDC01B642801D90320FEBD62 +S3150800380028688003F5D4207880074CD568680007B7 +S31508003810800F14D068680007800F022804D16868F2 +S31508003820C003800F01280AD0E068002829D028683C +S31508003830012108432860FFF73FFD074616E0286880 +S31508003840800704D5E068012801D00120FEBD28685C +S31508003850F82188432169C9000843286023E0FFF757 +S315080038602BFDC01B022801D90320FEBD286880074E +S31508003870F5D52868F82188432169C90008432860D6 +S3150800388011E02868400840002860FFF715FD074644 +S3150800389006E0FFF711FDC01B022801D90320FEBD73 +S315080038A028688007F5D42078000727D5E06900281E +S315080038B012D0686A012108436862FFF7FDFC0746D3 +S315080038C006E0FFF7F9FCC01B022801D90320FEBD5C +S315080038D0686A8007F5D511E0686A400840006862A2 +S315080038E0FFF7EAFC074606E0FFF7E6FCC01B0228DE +S315080038F001D90320FEBD686A8007F5D4207804271D +S315080039004007002874DA00200190E869C00008D44E +S31508003910E969B8060143E961E969014000910120B6 +S31508003920019085480168C90513D4016882151143B9 +S315080039300160FFF7C1FC029007E0FFF7BDFC0299A2 +S31508003940401A642801D90320FEBD7B480068C005DB +S31508003950F3D5A068012811D0002814D005281AD05C +S31508003960286A400840002862286AB8432862A06886 +S31508003970002825D0FFF7A0FC02901DE0286A012147 +S3150800398008432862F3E7286A400840002862286A44 +S31508003990B8432862EBE7286A38432862286A012177 +S315080039A008432862E3E7FFF787FC0299411A634850 +S315080039B0814201D90320FEBD286A8007F3D50FE0AE +S315080039C0FFF77AFC029008E0FFF776FC0299411AA5 +S315080039D05A48814201D90320FEBD286A8007F3D4DC +S315080039E00198012804D1E869012109078843E8619B +S315080039F02078C00641D5606901280CD0401D27D023 +S31508003A00686B38436863686B400840006863FFF773 +S31508003A1053FC07462EE0686B38436863686B0121E0 +S31508003A2008436863FFF748FC074606E0FFF744FCCF +S31508003A30C01B022801D90320FEBD686B8007F5D597 +S31508003A40686BF8218843A169C9000843686314E0D4 +S31508003A50686BB8436863686BF8218843A169C90035 +S31508003A600843686309E0FFF727FCC01B022801D951 +S31508003A700320FEBD686B8007F5D4207880063CD508 +S31508003A8068680007800F032813D068680007800F4E +S31508003A90022804D16868C003800F032809D0206A69 +S31508003AA0002819D0686B30436863FFF705FC0646A3 +S31508003AB00EE0686BC00320D5206A01281DD00120BE +S31508003AC0FEBDFFF7F9FB801B022801D90320FEBDC6 +S31508003AD0686BC003F5D510E0686BB0436863FFF701 +S31508003AE0EBFB064606E0FFF7E7FB801B022801D939 +S31508003AF00320FEBD686BC003F5D4606A002854D065 +S31508003B0069680907890F022951D001273F0602284B +S31508003B1006D02868B8432860FFF7CEFB044641E084 +S31508003B202868B8432860FFF7C7FB06460FE0000081 +S31508003B3000000100001002400070004088130000D9 +S31508003B40FFF7BAFB801B022801D90320FEBD2868AF +S31508003B508001F5D4E86A216B000900010843E86290 +S31508003B60A16AE06A084369687B22D2039143084345 +S31508003B706860286838432860FFF79EFB044606E01D +S31508003B80FFF79AFB001B022801D90320FEBD28680F +S31508003B908001F5D509E0FFF78FFB001B022801D944 +S31508003BA00320FEBD28688001F5D40020FEBD012053 +S31508003BB0FEBD000004220549042803D00869904385 +S31508003BC008617047086910430861704700E000E023 +S31508003BD07047000010B50949401E884201D90120E6 +S31508003BE010BD074C60610321081F00F007F900208B +S31508003BF0A06107202061002010BD0000FFFFFF0024 +S31508003C0000E000E010B5FFF7E3FF10BD70B504460D +S31508003C10002C05D025466035687A002802D006E0D3 +S31508003C20012070BD00202872204600F028F82420C4 +S31508003C30687220680168490849000160204600F05A +S31508003C402BFA012819D0606A002802D0204600F015 +S31508003C507DF9206841680922D202914341602068B3 +S31508003C6081682A22914381602068016801221143F4 +S31508003C700160204600F0D0F970BD012070BD704784 +S31508003C80FFB583B004460E4627466037B87A202823 +S31508003C9002D0022007B0F0BD002E0BD005980028F0 +S31508003CA008D00120A1680003814209D120690028B3 +S31508003CB002D005E00120EDE7F00701D00120E9E791 +S31508003CC0387A012819D0012038720020E0662220AF +S31508003CD0B872FFF7F1FA0190254640350598288312 +S31508003CE0059868830121A0680903FF22884209D143 +S31508003CF02069002803D0AA8310E00220CAE72348D7 +S31508003D00A8830BE07F2100280BD0012212079042DE +S31508003D1004D1206900280BD03F20A883A88B0290E5 +S31508003D2025E02069002801D0A983F7E7AA83F5E7EB +S31508003D30A983F3E7688B401E6883069800900022E3 +S31508003D4020212046019B00F0ADFA002801D003206F +S31508003D50A0E70120A1680003814202D1206900285A +S31508003D600DD02068818C029801403170761C688BD2 +S31508003D700028DFD12020B872002038728AE7206830 +S31508003D80808C029908403080B61CF0E7FF010000DD +S31508003D9010B5FFF79FFA00F069F800F003F800F095 +S31508003DA0C3F810BD10B5092000222021C006FFF770 +S31508003DB07DFA10BD70B500F0B3F804460E4DFF212C +S31508003DC06868F531201A88420CD328780923DB065F +S31508003DD0002808D000202870002220211846FFF766 +S31508003DE065FA6C6070BD01202870012220211846F2 +S31508003DF0FFF75CFAF5E70000D00000208307FF22F2 +S31508003E00DB0E9A408907090E994000280BDA00074D +S31508003E10000F0838830808489B001818C36993439D +S31508003E200B43C3617047830804489B00181803684E +S31508003E3093430B430360704700ED00E000E400E0A5 +S31508003E4010B50146002301220448FFF719FF002890 +S31508003E5001D0002010BD012010BD00001C0100206B +S31508003E6010B5FFF72FFAFFF7CDFE10BD30B599B0A4 +S31508003E7001200C9005210D91022515950104169136 +S31508003E800521C904179118900CA8FFF75DFC0028B6 +S31508003E9000D0FEE707200890099500240A940B94A1 +S31508003EA0012108A8FFF72EFB002800D0FEE70195A0 +S31508003EB0049401A8FFF792FA002800D0FEE719B08B +S31508003EC030BD0000124801680122114301604168B3 +S31508003ED0104A1140416001680F4A114001600168AB +S31508003EE0012292049143016041683F2212049143E2 +S31508003EF04160C16A09090901C162016B074A11409B +S31508003F000163416B4908490041630021816070479C +S31508003F10001002400CB8FF08FFFFF6FEACFEF0FFEB +S31508003F2010B5FFF7C9F910BD10B5FFF7A5FB7D2140 +S31508003F30C900FEF753FDFFF74DFE0420FFF73AFED2 +S31508003F4000221146501EFFF745FA10BD10B5818CA8 +S31508003F50C90707D001684A6801235B049A43836A44 +S31508003F601A434A60818C890707D501684A68012384 +S31508003F701B049A43C36A1A434A60818C490707D5CA +S31508003F8001684A6801239B049A43036B1A434A60F3 +S31508003F90818C090707D501684A680123DB039A4320 +S31508003FA0436B1A434A60818CC90607D501688A683B +S31508003FB001231B039A43836B1A438A60818C890603 +S31508003FC007D501688A6801235B039A43C36B1A43C2 +S31508003FD08A60818C490612D501684B680122120550 +S31508003FE0046C934323434B60016C914207D10168EB +S31508003FF04A6803235B059A43436C1A434A60818CDB +S31508004000090607D501684A680123DB04806C9A43D0 +S3150800401002434A6010BD0000F8B504460025E5666F +S31508004020FFF74AF9064618492068884205D0174915 +S31508004030884202D0164988421FD10068154F0007EA +S315080040400BD501213346002249052046009700F08A +S3150800405029F9002801D00320F8BD20680068400728 +S315080040600BD501213346002289052046009700F02A +S3150800407019F9002801D00320F8BD202060346072A9 +S31508004080A07225720020F8BD0038014000440040A7 +S3150800409000480040FFFFFF01F8B504461020002144 +S315080040A00026A3682269E569134362692A43134314 +S315080040B0226815686F4F3D401D4315602268536896 +S315080040C003252D03AB43E5682B435360A369226A96 +S315080040D01343226895680B273F02BD431D4395602D +S315080040E0654F2568654B0203BD4212D11B6B9B07C2 +S315080040F09B0F06D0012B08D0022B08D0032B4ED1DC +S3150800410001E000204BE0022049E0042047E00820B7 +S3150800411045E05B4FBD4212D11B6B03273F043B4072 +S3150800412007D09B1A07D09B1A07D0934237D1022093 +S3150800413035E0002033E0042031E008202FE0514F1D +S31508004140BD4214D11B6B0327BF043B4009D001278E +S31508004150BF04DB1B07D0DB1B07D0BB421FD10220E5 +S315080041601DE000201BE0042019E0082017E0464B5C +S315080041709D4201D1002012E0444B9D4201D100200E +S315080041800DE0434B9D4201D1002008E0414B9D4282 +S3150800419001D1002003E0404B9D4200D100200123BD +S315080041A0E769DB039F4233D100280ED0022816D0D8 +S315080041B004281CD0082824D001260A091201080759 +S315080041C0400F10432168C8602BE0FFF75BFA61686F +S315080041D040004A088018FEF701FC81B2EDE76168E5 +S315080041E02E4A48088018FEF7F9FB81B2E5E7FFF783 +S315080041F059FA616840004A088018FEF7EFFB81B259 +S31508004200DBE7616848088018FEF7E8FB81B2D4E767 +S31508004210002808D0022811D0042818D0082821D050 +S3150800422001263046F8BDFFF72DFA61684A0880185E +S31508004230FEF7D4FB216880B2C860F2E76168184AC5 +S3150800424048088018FEF7CAFB80B2E860E9E7FFF77E +S3150800425029FA61684A088018FEF7C0FB216880B20F +S31508004260C860DEE761684808C018FEF7B7FB80B289 +S31508004270E860D6E7F369FFEF003801400010024016 +S315080042800044004000480040004C004000500040F8 +S315080042900014014000180140001C01400024F400ED +S315080042A000127A00FFB581B005460E4617460A9CED +S315080042B01DE0601C1BD0002C05D0FEF7FDFF0499FD +S315080042C0401AA04213D928680168FF22A1329143F7 +S315080042D001602868603581684908490081602020A6 +S315080042E06872A87200202872032005B0F0BD2868FD +S315080042F0C1693046884304D00020B842D9D000208E +S31508004300F3E70120F9E7FFF743FDFEF7CBFCFFF7DC +S3150800431051FDFEF7C1FCFAE70000000000000000AE +S31508004320010203040607080900000000010203044D +S3150800433005020602060307030803090309040A041B +S315080043400B040C040C050D050E050F050F061006CB +S315080043501007100874430008C00000201800000069 +S31508004360082900088C430008D800002040070000F0 +S315080043702429000800127A0000000000000000004E +S3110800438000000000000000000000000023 S705080028C505 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/boot.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/boot.c index 2d9e4820..95d8b08f 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/boot.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/boot.c @@ -127,10 +127,13 @@ static void BootComRs232Init(void) rs232Handle.Instance = USART2; rs232Handle.Init.BaudRate = BOOT_COM_RS232_BAUDRATE; rs232Handle.Init.WordLength = UART_WORDLENGTH_8B; - rs232Handle.Init.StopBits = UART_STOPBITS_1; - rs232Handle.Init.Parity = UART_PARITY_NONE; - rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.StopBits = UART_STOPBITS_1; + rs232Handle.Init.Parity = UART_PARITY_NONE; + rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + rs232Handle.Init.OverSampling = UART_OVERSAMPLING_16; + rs232Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + rs232Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; /* Initialize the UART peripheral. */ HAL_UART_Init(&rs232Handle); } /*** end of BootComRs232Init ***/ @@ -285,9 +288,6 @@ static const tCanBusTiming canTiming[] = /** \brief CAN handle to be used in API calls. */ static CAN_HandleTypeDef canHandle; -/** \brief Message buffer for receiving CAN messages. */ -static CanRxMsgTypeDef canRxMessage; - /************************************************************************************//** ** \brief Search algorithm to match the desired baudrate to a possible bus @@ -341,7 +341,7 @@ static void BootComCanInit(void) { unsigned short prescaler = 0; unsigned char tseg1 = 0, tseg2 = 0; - CAN_FilterConfTypeDef filterConfig; + CAN_FilterTypeDef filterConfig; unsigned long rxMsgId = BOOT_COM_CAN_RX_MSG_ID; unsigned long rxFilterId, rxFilterMask; @@ -350,18 +350,16 @@ static void BootComCanInit(void) /* set the CAN controller configuration. */ canHandle.Instance = CAN; - canHandle.pTxMsg = NULL; - canHandle.pRxMsg = &canRxMessage; - canHandle.Init.TTCM = DISABLE; - canHandle.Init.ABOM = DISABLE; - canHandle.Init.AWUM = DISABLE; - canHandle.Init.NART = DISABLE; - canHandle.Init.RFLM = DISABLE; - canHandle.Init.TXFP = DISABLE; + canHandle.Init.TimeTriggeredMode = DISABLE; + canHandle.Init.AutoBusOff = DISABLE; + canHandle.Init.AutoWakeUp = DISABLE; + canHandle.Init.AutoRetransmission = ENABLE; + canHandle.Init.ReceiveFifoLocked = DISABLE; + canHandle.Init.TransmitFifoPriority = DISABLE; canHandle.Init.Mode = CAN_MODE_NORMAL; - canHandle.Init.SJW = CAN_SJW_1TQ; - canHandle.Init.BS1 = ((unsigned long)tseg1 - 1) << CAN_BTR_TS1_Pos; - canHandle.Init.BS2 = ((unsigned long)tseg2 - 1) << CAN_BTR_TS2_Pos; + canHandle.Init.SyncJumpWidth = CAN_SJW_1TQ; + canHandle.Init.TimeSeg1 = ((unsigned long)tseg1 - 1) << CAN_BTR_TS1_Pos; + canHandle.Init.TimeSeg2 = ((unsigned long)tseg2 - 1) << CAN_BTR_TS2_Pos; canHandle.Init.Prescaler = prescaler; /* initialize the CAN controller. this only fails if the CAN controller hardware is * faulty. no need to evaluate the return value as there is nothing we can do about @@ -386,20 +384,20 @@ static void BootComCanInit(void) /* configure the reception filter. note that the implementation of this function * always returns HAL_OK, so no need to evaluate the return value. */ - filterConfig.FilterNumber = 0; + filterConfig.FilterBank = 0; filterConfig.FilterMode = CAN_FILTERMODE_IDMASK; filterConfig.FilterScale = CAN_FILTERSCALE_32BIT; filterConfig.FilterIdHigh = (rxFilterId >> 16) & 0x0000FFFFu; filterConfig.FilterIdLow = rxFilterId & 0x0000FFFFu; filterConfig.FilterMaskIdHigh = (rxFilterMask >> 16) & 0x0000FFFFu; filterConfig.FilterMaskIdLow = rxFilterMask & 0x0000FFFFu; - filterConfig.FilterFIFOAssignment = 0; + filterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; filterConfig.FilterActivation = ENABLE; - /* the bank number is don't care for STM32F3 devices as it only supports one CAN - * controller. - */ - filterConfig.BankNumber = 14; + filterConfig.SlaveStartFilterBank = 14; (void)HAL_CAN_ConfigFilter(&canHandle, &filterConfig); + /* start the CAN peripheral. no need to evaluate the return value as there is nothing + * we can do about a faulty CAN controller. */ + (void)HAL_CAN_Start(&canHandle); } /*** end of BootComCanInit ***/ @@ -413,16 +411,18 @@ static void BootComCanCheckActivationRequest(void) { unsigned long rxMsgId = BOOT_COM_CAN_RX_MSG_ID; unsigned char packetIdMatches = 0; + CAN_RxHeaderTypeDef rxMsgHeader; + unsigned char rxMsgData[8]; /* poll for received CAN messages that await processing. */ - if (HAL_CAN_Receive(&canHandle, CAN_FIFO0, 0) == HAL_OK) + if (HAL_CAN_GetRxMessage(&canHandle, CAN_RX_FIFO0, &rxMsgHeader, rxMsgData) == HAL_OK) { /* check if this message has the configured CAN packet identifier. */ if ((rxMsgId & 0x80000000) == 0) { /* was an 11-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->StdId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_STD) ) + if ( (rxMsgHeader.StdId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_STD) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -433,8 +433,8 @@ static void BootComCanCheckActivationRequest(void) /* negate the ID-type bit */ rxMsgId &= ~0x80000000; /* was an 29-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->ExtId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_EXT) ) + if ( (rxMsgHeader.ExtId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_EXT) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -445,7 +445,7 @@ static void BootComCanCheckActivationRequest(void) if (packetIdMatches == 1) { /* check if this was an XCP CONNECT command */ - if ((canHandle.pRxMsg->Data[0] == 0xff) && (canHandle.pRxMsg->DLC == 2)) + if ((rxMsgData[0] == 0xff) && (rxMsgHeader.DLC == 2)) { /* connection request received so start the bootloader */ BootActivate(); diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/ide/stm32f091.uvoptx b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/ide/stm32f091.uvoptx index 44a24839..95d0999b 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/ide/stm32f091.uvoptx +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/ide/stm32f091.uvoptx @@ -103,7 +103,7 @@ 1 0 0 - 0 + 5 @@ -114,7 +114,7 @@ - BIN\UL2CM3.DLL + STLink\ST-LINKIII-KEIL_SWO.dll @@ -125,7 +125,7 @@ 0 ST-LINKIII-KEIL_SWO - UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F0xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM) + -U066BFF545454885087232242 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F0xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32F091RCTx$CMSIS\Flash\STM32F0xx_256.FLM) 0 @@ -193,7 +193,7 @@ 1 - 1 + 0 0 2 10000000 diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/stm32f0xx_hal_conf.h index 70e83cdd..2c1ab465 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/.settings/language.settings.xml b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/.settings/language.settings.xml index e0ace9ed..a8f36f1f 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/.settings/language.settings.xml +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/Debug/openblt_stm32f091.elf b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/Debug/openblt_stm32f091.elf index d16b744f131d2e3ffd1bb295002bfea7a891dc07..d019c4993c88f0b3978cd3181473a8106f8e1731 100755 GIT binary patch literal 314240 zcmeFZd3;nwx;|cY`gHf{(!5{34~2SZPK9)Nl-vkHZ^S0LDYbX=$#qk zzRoD%!lvRnt|NmJcSc;sZDuq991(Ox#2fE8&ctO5BGA9*snfxDXYPFOU-ysSr}Cjr zzgxXk^;DfYRqr{)Ws@2bQcBVNXNYn^PWBhpDEwx{?)?9kzgexmhUiLB;cxfWiwdL7tQC93i!vH*&f5Bh5E0gO zBkF0^XSIq7Pn&15Ymv2eTY|bjz=nEJ61Q%wzHo;paAWmZJ3RJ{)ipaj!5gc~cX*r| zt21__N&-gCbEJ(OIXMAiQ5&^=c8I+J`xQ`f$L~Gc3Z_rIQqeamI=k{ZqT`CLS2Sw?dqw|o`zxpwa!8d!(KjkOuIPG2v*yU5=vUAd*b8N^=o=Ny zHp(6Kik?^?w#&ryiCKx}6H^_s6ZEj^-1aPu!MR{#5gc^N~7R|C~5I zaZ+MZVsGouHyaPh&b&hhi_Hz!i?EPuQe9`IN=sHJM%G`RxU*<|jfk#I{G%#WWeo5R z+>kK#4qtiRN@Mh##0!1osJZdlM6pP9{UId=+3m%mHj(OzrLNqvHW96p<2P(sQ+@3F zr%w8`{fXj8t?2B1C~{KdNfz6d$MdzCDM^<`;cdzI??~v%c>HDjz zzuF!%KO+a1pQ~V-muvt9N~FH6x(QjM@mFRxu@N#^Q>D{ZM21jy*X>E zcfDLK1|MkmZ-_R_=r_pEyo-H8WVNQc%2HWdn_I8gEIO|`h+4E8o10OKYYvO@@7hG? zSKo`yF-Wf+meK6Gma6<8EbAmwcq1g#9+J45$A^G=mhdt zsr+Ak{}}Q&V{CP{zLvsl4>t4)lU0%7t~H_3gxoi5B=0sLS@0C{2}@w#m+u z4_qGIAl4e{OM`E##< zJQ2~nb(DxEAFckbEh1Vj>dn;DT<1q$CqnC!|p?8n_{*%J`NngM3=6+D+4z>CFP7pmU|I#iaMd^{>xm83C zbexj#qsG?jtHrd$IMlgMDxN4zKG%_w=-H^JZccS>qfwXJ$T@-aXInVdzQkC|t#5A4 z7j^wiU{hGIzFNL7BF$S1-uZ31D?neOE~6zJl>Qip-e}&~31U6wspv{))cSr3X6}h@w9Ci<+7R$#*)= z5oh#?Cmt7bX01;=*MnP^*yLi$`=&Lk?#j)%Ng0t<;kH%DQ<66&+LH@vZc1b~@j6Xi zSE=iETsMU0RLe)qVoxn+c{}CVEVi=mw_zM-)Q6K9^@Yi8VfX4N+Pwx9?Ots~$E#;f z+_r_|hxdSqWbs}=%0kLR3M0|4U7OYFNy;h@?yrm^qTFip*OK>w_a2G&TMIu~TV>=B z?n%~#<3!XppGdzPlTRMW+S>E?qcs0Zj8)42EB$+kx_47uudDeo(9p6aa<%Au;ed_V zx@7?8>)XE*oxeG7HJx)ZN&Qs%Ikdoz@ZNQK6*fwd)jQQ4`qdD%fgKG zcFJFG)fFalk{iNYpRBF^dWXPTG1ayB(BC>1q7IEnNhFDOWwjPS^P7|hIHbD%gi*3B zK^y8hjwa)2e))k^*H2Tau2+tT&J56>sIevR97%OupAwz9_PZuCbinp^EDKFs@$kQG)NR=@2ZZ>fa$XHnPqf#$7mVjSN2 zeZ|Tz(YMUwt&c?tSIY5wwip%0F3kC2?QHs?&MbECtuNATDLl}9AG(+?_>T9M=v;(f ztfh<1`kKh>8KStLdHuqI>Fb(jH8-F580u!!hgZ5eU0xK&qq44j2Fs!TK&xk^SKQW+ zs&Lv$R?5Mm?ZDQtReQFKt`P6bk8i2lAa=~WJ0VJB*(c3^A3wi2x@`WkGNAeE)TU*r zuDeouaov!zN@}9Qjx1la{DI~Brl-2TIUJ9EGFMi3+iId8pD70I{P6lM{=G+{Mu}1U zN%P;vN0*JN+BaR6#G`wQ_RUCj%}>43k?OiOb zwm0{ty8evy)Q)!g_@w!d@Q@1+ZYkSY%Ix>xVZ!%6q)P8OC`5(A7`~Wp9K@A^=rZBZ+ zcQV zn5c=$ag8;b7VevVw$j9tvgE#nHPL<3&s2QxdVleK3o)~zj0Gqqx_rU%`%uou%l1v5 zf;tiLKchXRD0xyxQ!>)`o`p+RuJ3rHi1-?+%#j`UEwu&-#>ad)DTUst-u3e_{tjF9h1Z3{kw)YlNlkxh=J7r|1Rn>H=nFYYn1jA$ zu_(b_wtjMTpLqrI-f!I9xNiRX`ItviC=+$z8aoTm5YhR~_Xmrw2euC$5S^P2O3c8; zB33Or&pt@YEUeM9T62>k!gYG8>r>1@9Y@kWB1Vj5;aSvAw6EA3iM}#dR4i#Tic6A4 zS#I)1m80P>R{t2^wTD{@?eb~6qRH9GUe({W%i@BhEVJVU@Oo_8W{k2qq1&dd$lt{spS4^OLY+BYFJ!HnG-dpG`+*f?uQY~!>)G>IW&+T@VD_A3WawoT;4 zH%@bszqqc{92LK1KsfxAxN6!>$zNPgeidx4ns#~VbxrpRQC`&^o>d+TPrJI*I?8)v zeWwMM$U$cNwHO04XBzR@Q(KB<jd+J&=}{Ad8f^*OZ4jV?C8|!!O4PVBbn3Z*^#M{ImsM*c2CY(-;)dN zR@_!)S+I<`TpGE0a?W~iw_^9cbyR9pNirw28@w2l*}fwg84--{XcUoObnH*w@4vmh zCz@B`zRSf-jQMKb&pIxim9kE6yuG8jRg~xL$*=R2-kM02TxmsOd1BjuZQ^=)Rm_fE z5!)aZ)I25bob^C_aD4r==B-X$3YM8sPsz3|o>*3_M9}t%m=n7yW{uxq(f-4x+u}pw zAI$4OKZ%dUUh#$4YuCm5$;g`O(5`L8R$ZX>lt#~zfUnRfw1aWae8gTNYa0FOb!sY= z5?qTipM&Se?xcur_j%tnifydG(ZYFIQD0qq(k!v7y=}78tj&$T)PzwuPuA_gvp`_} z6+RL1)r&|$Q;yH~uD5P>BU89Z__k$oZl+CCE}r!0^?(0kOR=X;L~`LdcV4&dK&w|^ z&wMbu!7tFf{T@R;Zi0%Cu(Y?K`>l0UQ9#k(^uT2#Gj5`*@ zL@Ipko*&1_qScAw+T0bXu4k}=s%n=*MzFrM*b@}lG(V@{tts|Rn#`lVrQ!p4)NP;N{t zPcEvtHSr|03u+#%E_&Z6i6>SkzMmIu3ZqY>^A>?Rek7?>*O=7wM6_v*YQslu^@+ZX ze0o-(BtPaXf%1QdPncz~l0d@&~Mbc4RDO0pfY~-dTx2(<{j-@uJv}_^XXoLXO-Kt44pXiB-kA+WHDJc}D!6 z#8R=a&&i4X@qw{t6N?k)$DczaX<8yPJ~82Ml!HFlb$RjzjLhqkP4Vj?FOJ=in2eH- ziC^CMlF|g4T#XZ(oN(gv60bHIgWhOQRrK36D{*doa?=pGuy9J;vqX-(FWxs^CA{-@ z#9nBRCvey7nw^LzwIPc+I%&sg)UM4>$=J_jE9$}bA)<26eji$~+}`RhCC zlXCppg!_Dyr3VJIl=Z65pIneE!Fr@1xdroGL1QlFjNCf%cC4ULl+13NyV z>PX5#Ot`sq8lGAfc1uo$Yzx&kZw=KR>Nq92tz^298(UMI(Qemfmip`8UvfsWI3`CN z>1zD`ac4-(7}Xg6ti!17sH2Rt-46#DM@Q`p|3FW_j7l}8o_z% z=6L61?f|z5Go+jEuUMZSQu|F$zi_)JGNd7TPB>wH-BZtI0>KwV#J@92mw3CGmV)$_-WXmW%9t#>nP-vEU@g#Xod zo!XZ>B1>BQ+cLL#wx-+P-3}p)EFnBd63NOD!a*`~h)*RVU017!<{tm>o%P8#lLjK} zgD~emj5HK?P;T7Q7*AHz<;EUCL@C~QWpWVcC73y`Y%H%|TYW;?KwM+$THZDQbVyx; zZDpV>b@jHDf<}xw;>8;Y`B18Bbjq_@y!b6xyJ5!P8Mg^XV~n62&t4!(FtYg^#rSicNm=f==KQiP_1KZl z6!&lEB05(-Ihb4%&y5EggUN#Gcw0+J8Roz~YSrIT(kD6H;QGI%WHn^j)rZ<zi6ivHF>}zG=TPIObjLUEfkNt7)~79iKICR?{s5vSa2dbKT6Q$iPT^CM4f_ zi(@UNo>d;mNU-E)S{S0iSGB_H$NK)wH(UA z^{0mz8@u#Ss6KP@?xxIIJGLA34b{om`)FNujI9pV@mChlZo=3BGB*GpHLvjb!{-pj z1qK5iI(+W%ne%-rqxR}VMr~+vs1C7?y*p>VI@PRtHGEU`cRPZ0!3M16_vSX5Bk!&L zen+b73B=B_5y#te8V>(>F!l#GUjh4*JYSRH5=14L(^ z1NIaT|cjELZ@hO#Ooibxe)yPEU+y(Q_8@51r4WHrj_&t^<;0c(v88jW!@n(2K-b`<% zFUyzZ&r6lAHC4i!`36P%Z(l+UtE*&J@=+X}9q)TUz zZg%Mq>6I>>NxB7ei@@@Le^SxeBwJh>6DIx)CC??<;?jAf1>P662)sMPUyDoUgFFfl zh<}aI@(V^*jRZ=Vm6;cR4IyFuDxD@|{6NnHosX16TG2z^ZTo-ydn@X&6X|bAKj~3t z*5jr$Ux44iNHs_&H!nJ`x?zUfNL;1iF@1hZbs=d$bnd(+ju;_61sq#{faGW%O=tu( z0vZ90fJQ(gpb^jrXaqC@8Uc-fMnEH=5zq)|1T+E~0gZr0KqH_L&2fllQSraTw4Q;18B#HGid zA*}|m_&Jq7rhlzP&UX?y!#`X7c$Xj-baz7MF}+RaT`0^DG_opU2#aONjjAMBUUXC- z&dg!?)zGHPKhNiuUkMTaE7&*4@e}%Z%JuOHs^fdw_0d2d&!l~n(D}3H(}(5z?N0hgOdlb9+msK` zBZcoJ^0(albPr@c6;_=>=LILx{vFccVD${pZKR8wkD0ffMMXk`*`VzqNLpm*2`YB@Fo7Wqs7gGO(Ov?mB>CFOn^w^UT15`;fcW&jEhm zp{Ge^z-QoLN`=L8zXGM|=)v#_+{ey!*3jDnEJHZ!QNzF^ufWO_#`W+Wc$8U;OGrL( zJIUu!k6?Zr*7;uCYT@AUYw6`ucnOXmDS~I6BZ4F8&~!3j;?kD$%~9HMs?ac3o)tW6 zr3hC2969quZ*vrWtwFfliKMEEf}&_qX>e>lGC3!36d&VO_i_xd;IVE=M_8}%q%CJU zy-y(RIO9<1;Bln0oTaomo^+n`s2}tRq{Ggeq+_IuoN4qqk#t0a??Yjh4Az~-k|$GB zPf|F~0N7vy>6Xw*^m-EOEM({|GSkSI7$>{~&xVm|NPm$ZfWMo9r`|_*3bE5j3THKQ zoz6l{XA$xSXFd$M<(x{$W^Ds~9k8J%>sefw(k^?OFM{dQ+ax&ocfgMoyy$b#&avpT z;0lt$@nnL&Sowz^j)eRHP(*_3=CFjbnniHEvJ9TJTm&~L!{AvLi{M6*meb;g)t%?j zm2)RM;4adk;92v}7Qwq;gR3m(Dz;%0?ZZw!o;bmKZ$hpjVSWj9!E7MW7`#wYR@eba zaHXWJDEtXK=%?~IRM#x5ggVVwg&)z()i{Mer~AuPo~*(Nto7ycBlJRE;hi+QQfb14 zVWM}nVu}i%WS(oJgN}<7opml+d7aDwQ(D-I4sMW9Fy)1hkhw|a8B+LX+ycRy6;oMQ zN7uKgaz+*2N5Rh1S+{#+1I%U?e#bobDhG4XL5;{|5~=*#phyN=U*d3MFFo}`FFj58Ow~)z zkWBZ|vpst0xgNdre2-pwf%fTMdQtU~(~mWHh2u5iyvln1?o*Um>bynz^-R>i-1!zY z3cghZdWf@xIRAbM=*r+(7tI&Jx9NWrXw>o@)^Y-945l`g6?3LB?~YSoU*jA@>~<~y zePZyerO5jp^VT|_v6Z`NKh>#befHdg`pj@HqW!*pC~>B zV1sgwfj~{TY^1tV@etu{cR@Fgx%&#x!T$0N)VJVo=y4|)mA`?kP|XZwiWY^7If4eL z@n{x)MrNQIK^BVPugXm3EjIVGPM_sjCjH)<= z7tw5z+yW*`Sd`^Jovv=dgP^m5Gvy3=e3SX+NHxC~zE6*H(^a~Kop6TIScQLP{mxWb z9Mp{F1*ZbBsloZOi+;{vn-{5pE(*uf>DiKtLtp!EWQBk4n80`!4?l> z4IXsqKM}BBy7V}B2_7*xWQ#|TP8q978?0ouhYtsL!QdSGB0Ohb37;bSeV`+=O+H_W+$c#y(Ehmq8CzE!ZzN8ySXF2cC{$wt4 z@|<6yZW+@__i{c#!!k}Ko$tIro0+70JN)xYe+|&Pf1@-x>Oj=Ech4qu`c0^H7%^m6ablV8}-6@j`Uj6W^i)NB$2U! zv=y9=<#EPcq@7?*LtJFsLpsY@M*I8O&OBiR@ssh$aQFoNPkeUN_pfQ2_Wc{uY2Qzi zPWyh2blUe;(pk>y{ormJ={)BOR{K@bVeGaD#_Ko2fBt3+j`EB@RN`6f%mtnCHc8=R zU@w@_#vx!jXO@HB?gJfhoD$GGxtK1+&A{cYv4z>*`wLgw@B)?%@*dbK$keEj7(7M^?cA@SS8z0q+BpY3HGA}(X)VrtdM1JdXq<3F*@J4 z9BZS}-Y|lOH2=z$E;_H99|C^B8FV#NUIcovZ{S<3+c4#40VL&jp$&4lWUm>k<_@|G zzWtVrzusp@{wVcZNg>9?I21N2JEK;o*VCBY1S$Mjt+I+>z z+zjDRRhh47{yfq!uJq(Ltjfp!k|3+{4~|7+)y$GhsQQ*FW7Uk|LEHqgi`)lD!fvivWBQAe25YAVP;}Pj93aHlSFe`G6*X-s{j%= zw-6&gV}a{S@vO_keJM9y2lvCTVVyS4MUi0$hpRrmlZ}~4R(11HwqzbV`Yzt)o>iMK z8>V2t+eLl&RqTUJWR^1L0CuKguL4`evPPohF!b`572rm##bqOOqn-u98FJLGKyXDf z>OK(rK#ZpOm{-9a1UKd#5Fx-cb~gytV9+?Y9N@N*Jgh74f@mZ}wXjiL{2L55VrM-e zD*piGaZt{6l|WTgegoNL$SyuAgSGND=pa<5y6$Nz#%*IGmvMy3|AhH57ou8n8PPjN z0l7>`6^P3@K#oxWD)QI`i1o+|3GMi2IU+A2R^x9Vq$_xDV$9Leg#W^rVaix&OxS@g zW6C(oIIad|Gi8<@Hy5LXDJweRW=NPa<{J}!hZ~eB^n`WX>F~gmee8rwP)VkY6O0KT zz?3QDBxAy1K*^Lb+YqzSr>3|Rl}SgK#$ZxmgzFYmiGP1YrXNSRJiPVHFJNa@#zCed zUgjp$z#Ku0(!np25hhbbn0_1wGZ|qrN4L0{dqkK_Mwq-6%7+_aG8tj=stA+eMwkpY z!elbS=GfFsTGSf$r^MK(-S~5+O zk(Pjpw3v*v*ecRuGSXtJNQ=Wr3s$ZzXhoK3Klm54Kbw&j`=J*}GSXr{OsTLqs&Hd> zqnu;e_Z6Z~a@WwC8)?a9q{V*Z_pmaB$w-U+D6^Q1wAfEziV-FwEslz`JNQ*O(HWAU=jkGv*XR>5QTAX^4BA1aCr-5`!n2{FeB-UBTFe5F_ zG%_Y4EgMnU^I()7w0SDh;+*;@-6_OQBPntjX>m?xp=K^4EzZne<7(wH(&Ef|1N3#k zhMugKaA8Wj%r{>L(v;^_I7S2!Q%Rtl&GSZS}tRN#TX~qdM(&D5e zEkQ*Tqg^_lm;1Tac+#koT= z{96-bq{X>gUW>-nB9sDVlWOUVAR{f#J!(@rGssAbbFXqR7af!Y>mgEkD$?S#a)7E{ zdg_N>diq)p7u8E{q{ZzeH`3zvk{fApd+GTez2rt(++KQ7^-?Y)EzT<(uaVqWSTIUhN%_eTB8a~WxI-Wm^jNG>BS&hJkJUD=C~7UymH9|amHzr$Ki0FA-qMp|+i zX>oSUfqhLbBQ4I(b3mWii;))RJ?5>=Wu(P%BQ3d%v^aYnhUJW0Mp~SG129fz<}%Xa z?B~QaHkUs5oDnl4y$~VKHW%*bAq(tG{{Jc6H~MZGScEqRE#gkNQ;w> zv;-MxaefqODM0RYb=^pdGgHo`M@CwlIa1B zxf^M5=F1fQFw){IQUe`vaXLL)vNO#fBQ4Hi#W+FY=Oh)A7i6TxX;S%%f{e5{=}1eE zkrwA1WmX=dviYHRi)SJmf%jb3=ZkS{UYP2fr)72hE{YRe2|Pt(=?auSLepxoY1w*xO& zz5rrHDtGtOUHK(6evrNf(W|0FC|tOQDqV=Y3YRh6d#Q}*m^We16dEvQ4}O^BF=P6{IaB6!V>Uv< zlvOr%03=M=!Wgpyzf7TljAjU?oboZas=u6p;yUahO;L{#o!(t7MI*Vpszl;n4sMix z|Nh?KM$4!?3C91gSNY3n^RHgz-{@xUvC;Y;U*)TE{?)5|zSlHg#U=eJ|54W`_gFsn zEj~NQ{|+t^GV3D{c#Hofethm*e2SI6xLc36_}R?g8$;9EKymsVYruWS>T^~jyL!j! zA96oQuKfMWN!ncbTZ<&y7Bu}2vLX&w{{DyNkmSnW|1hP(Ux~}@pj4$iBE$0E_cYkh z8hU$xWrz@0{{BZ6VK43)H_!H6UUO|%0G}#gfi92KQO!k<%RgP3XC8rvas?G zjHE*|#Ff8GTcK}`(oTpge^;KBg_VDxY6NoTiEMKhYw$;0CPJX9ih|V2KQQ(=7Q~f* z;25{MT=@r%bxY#PKQNxO72?W2FoCoa;>tg89O6Tp1`GJ#IXCZUB@()ZSgO$I39DZ$7 zKsBVl$W$x;z^Nxf0_?^pvDO3L!N@(-+(v=#YW`3HU~&qNVsK3D!}#>(f)Kg~G#T=@qsQ+cxTx$+NO zF0aH-UOrd;fh(0JoX?ei;A+Jb<#Xj9xJGV9XGMB*lc38(T=@sydJpuF5Lf^aQq(7H$v~#^Mi_puLGBMBP!ld2sqR$6<$HJYm>0P65A>JgQQuzb9cv&eXF{K^ z=F&1ni+ry90|V4}H1oOg4-8Zz$U-q3R@o+f_EPUy11HD_>3}Q$KupmhpDX{sM8){> zx$+NG%jIaJlh2iZV3OPlCJPS~{5%Coy1Kp8JJ!HVd4L|d@(;|BYJSh>%0DnSU8P&t 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�t`>HwQ;1B9)(|5h2uk`3!2R_F>6?! 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%0Aead=5IB*$4Ylk|LYg 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͆=?|| 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

    © COPYRIGHT(c) 2016 STMicroelectronics
    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h index 5fdd5e99..41f530fd 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/openblt_stm32f091.launch b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/openblt_stm32f091.launch index 3f0461b3..a27831fa 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/openblt_stm32f091.launch +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Boot/openblt_stm32f091.launch @@ -1,45 +1,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/.settings/language.settings.xml b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/.settings/language.settings.xml index a01fc88e..49d858c2 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/.settings/language.settings.xml +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/Debug/demoprog_stm32f091.elf b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/Debug/demoprog_stm32f091.elf index 73f9633d93a20085d89b1719f3aae6108df2425b..0df6ad90ebe266d3b3ebb6fdd4ff4e045f56373d 100755 GIT binary patch literal 185988 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

    © COPYRIGHT(c) 2016 STMicroelectronics

    + *

    © Copyright (c) 2018 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32_HAL_LEGACY -#define __STM32_HAL_LEGACY +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY #ifdef __cplusplus extern "C" { @@ -60,7 +42,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +74,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +93,25 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -156,7 +142,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -228,7 +214,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -243,13 +229,23 @@ #define DAC1_CHANNEL_1 DAC_CHANNEL_1 #define DAC1_CHANNEL_2 DAC_CHANNEL_2 #define DAC2_CHANNEL_1 DAC_CHANNEL_1 -#define DAC_WAVE_NONE ((uint32_t)0x00000000U) -#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) -#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 #define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE #define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE #define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE +#if defined(STM32G4) +#define DAC_CHIPCONNECT_DISABLE (DAC_CHIPCONNECT_EXTERNAL | DAC_CHIPCONNECT_BOTH) +#define DAC_CHIPCONNECT_ENABLE (DAC_CHIPCONNECT_INTERNAL | DAC_CHIPCONNECT_BOTH) +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) +#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 + /** * @} */ @@ -257,27 +253,120 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#endif /* STM32L4 */ + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#endif /* STM32H7 */ + /** * @} */ @@ -285,7 +374,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -357,15 +446,47 @@ #define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 #define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 #define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#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 /** * @} */ - + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -375,20 +496,27 @@ #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 */ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#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 #define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 -#else +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE #define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE #define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 @@ -401,7 +529,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -429,22 +557,31 @@ #define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 #endif +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 +#endif + #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) -#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 */ +#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 || STM32G4 || STM32H7*/ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -458,78 +595,6 @@ * @} */ -/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose - * @{ - */ - -#if defined(STM32H7) - #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE - #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE - #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET - #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET - #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE - #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE - - #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 - #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 - - #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX - #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX - - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT - #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 - #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO - - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT - #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT - #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP - #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 - #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 - #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT - #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT - #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT - #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT - #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT - - #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT - #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING - #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING - #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING - - -#endif /* STM32H7 */ - - -/** - * @} - */ - - /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -542,7 +607,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -551,6 +616,13 @@ #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 */ /** * @} */ @@ -615,7 +687,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -645,7 +717,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -669,11 +741,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -682,14 +754,20 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) +#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 + + /** * @} */ @@ -698,7 +776,16 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) + +#if defined(STM32H7) + #define I2S_IT_TXE I2S_IT_TXP + #define I2S_IT_RXNE I2S_IT_RXP + + #define I2S_FLAG_TXE I2S_FLAG_TXP + #define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -710,18 +797,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -734,11 +821,11 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD @@ -747,14 +834,14 @@ #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE #define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -762,15 +849,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -791,7 +878,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -809,7 +896,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -822,16 +909,31 @@ #define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE #define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE +#if defined(STM32H7) + + #define SPI_FLAG_TXE SPI_FLAG_TXP + #define SPI_FLAG_RXNE SPI_FLAG_RXP + + #define SPI_IT_TXE SPI_IT_TXP + #define SPI_IT_RXNE SPI_IT_RXP + + #define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET + #define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET + #define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET + #define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -889,6 +991,33 @@ #define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS #define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#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 + /** * @} */ @@ -932,7 +1061,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -972,7 +1101,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -986,53 +1115,53 @@ #define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK #define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK -#define ETH_MMCCR ((uint32_t)0x00000100U) -#define ETH_MMCRIR ((uint32_t)0x00000104U) -#define ETH_MMCTIR ((uint32_t)0x00000108U) -#define ETH_MMCRIMR ((uint32_t)0x0000010CU) -#define ETH_MMCTIMR ((uint32_t)0x00000110U) -#define ETH_MMCTGFSCCR ((uint32_t)0x0000014CU) -#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150U) -#define ETH_MMCTGFCR ((uint32_t)0x00000168U) -#define ETH_MMCRFCECR ((uint32_t)0x00000194U) -#define ETH_MMCRFAECR ((uint32_t)0x00000198U) -#define ETH_MMCRGUFCR ((uint32_t)0x000001C4U) - -#define ETH_MAC_TXFIFO_FULL ((uint32_t)0x02000000) /* Tx FIFO full */ -#define ETH_MAC_TXFIFONOT_EMPTY ((uint32_t)0x01000000) /* Tx FIFO not empty */ -#define ETH_MAC_TXFIFO_WRITE_ACTIVE ((uint32_t)0x00400000) /* Tx FIFO write active */ -#define ETH_MAC_TXFIFO_IDLE ((uint32_t)0x00000000) /* Tx FIFO read status: Idle */ -#define ETH_MAC_TXFIFO_READ ((uint32_t)0x00100000) /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ -#define ETH_MAC_TXFIFO_WAITING ((uint32_t)0x00200000) /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ -#define ETH_MAC_TXFIFO_WRITING ((uint32_t)0x00300000) /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ -#define ETH_MAC_TRANSMISSION_PAUSE ((uint32_t)0x00080000) /* MAC transmitter in pause */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE ((uint32_t)0x00000000) /* MAC transmit frame controller: Idle */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING ((uint32_t)0x00020000) /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF ((uint32_t)0x00040000) /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ -#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING ((uint32_t)0x00060000) /* MAC transmit frame controller: Transferring input frame for transmission */ -#define ETH_MAC_MII_TRANSMIT_ACTIVE ((uint32_t)0x00010000) /* MAC MII transmit engine active */ -#define ETH_MAC_RXFIFO_EMPTY ((uint32_t)0x00000000) /* Rx FIFO fill level: empty */ -#define ETH_MAC_RXFIFO_BELOW_THRESHOLD ((uint32_t)0x00000100) /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ -#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD ((uint32_t)0x00000200) /* Rx FIFO fill level: fill-level above flow-control activate threshold */ -#define ETH_MAC_RXFIFO_FULL ((uint32_t)0x00000300) /* Rx FIFO fill level: full */ +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ #if defined(STM32F1) #else -#define ETH_MAC_READCONTROLLER_IDLE ((uint32_t)0x00000000) /* Rx FIFO read controller IDLE state */ -#define ETH_MAC_READCONTROLLER_READING_DATA ((uint32_t)0x00000020) /* Rx FIFO read controller Reading frame data */ -#define ETH_MAC_READCONTROLLER_READING_STATUS ((uint32_t)0x00000040) /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ #endif -#define ETH_MAC_READCONTROLLER_FLUSHING ((uint32_t)0x00000060) /* Rx FIFO read controller Flushing the frame data and status */ -#define ETH_MAC_RXFIFO_WRITE_ACTIVE ((uint32_t)0x00000010) /* Rx FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_NOTACTIVE ((uint32_t)0x00000000) /* MAC small FIFO read / write controllers not active */ -#define ETH_MAC_SMALL_FIFO_READ_ACTIVE ((uint32_t)0x00000002) /* MAC small FIFO read controller active */ -#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004) /* MAC small FIFO write controller active */ -#define ETH_MAC_SMALL_FIFO_RW_ACTIVE ((uint32_t)0x00000006) /* MAC small FIFO read / write controllers active */ -#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE ((uint32_t)0x00000001) /* MAC MII receive protocol engine active */ +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -1047,39 +1176,40 @@ /** * @} - */ - -#if defined(STM32L4xx) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ - defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ -#endif /* STM32L4xx || STM32F7*/ + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1092,11 +1222,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1106,12 +1236,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1119,7 +1249,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1166,6 +1296,28 @@ #define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter #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) || defined(STM32L0) || defined(STM32L4) +#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 +#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 || STM32L0 || STM32L4 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ /** * @} */ @@ -1200,6 +1352,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1213,17 +1367,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1234,7 +1388,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1243,31 +1397,42 @@ #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) || 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 */ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1282,8 +1447,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1292,7 +1457,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1300,6 +1465,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1311,7 +1477,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1407,7 +1573,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1452,10 +1618,17 @@ #define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 #define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC #define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC -#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG -#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG -#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG -#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#if defined(STM32H7) + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else + #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG + #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG + #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG + #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ #define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT #define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT #define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT @@ -1480,7 +1653,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1667,7 +1840,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1686,14 +1859,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1709,14 +1886,18 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT +#if defined(STM32H7) + #define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + /** * @} */ @@ -1724,7 +1905,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1733,7 +1914,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1762,8 +1943,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1828,7 +2009,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1836,17 +2017,17 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI @@ -1863,8 +2044,8 @@ #define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE #define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET #define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE #define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE #define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET @@ -2111,6 +2292,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2302,13 +2498,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2327,12 +2523,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 @@ -2361,111 +2573,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2473,28 +2685,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2665,6 +2877,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 @@ -2694,7 +2915,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2702,6 +2923,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2755,7 +3000,9 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 -#if defined(STM32WB) +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) #else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK #endif @@ -2850,10 +3097,23 @@ #define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED #define DfsdmClockSelection Dfsdm1ClockSelection #define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 -#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 #define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK #define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG #define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2861,17 +3121,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32G4) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2907,7 +3169,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2932,26 +3194,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2960,8 +3222,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2983,6 +3245,25 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) +#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) +#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 +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif /** * @} */ @@ -3001,7 +3282,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -3033,7 +3314,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -3045,8 +3326,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3151,7 +3432,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3160,7 +3441,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3171,6 +3452,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3196,11 +3478,47 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#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) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ @@ -3209,7 +3527,7 @@ } #endif -#endif /* ___STM32_HAL_LEGACY */ +#endif /* STM32_HAL_LEGACY */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h index 0f8f5d4f..c0ef4cd3 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h @@ -6,43 +6,25 @@ ****************************************************************************** * @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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CAN_H -#define __STM32F0xx_HAL_CAN_H +#ifndef STM32F0xx_HAL_CAN_H +#define STM32F0xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal_def.h" @@ -50,103 +32,98 @@ * @{ */ -/** @addtogroup CAN +#if defined (CAN) +/** @addtogroup CAN * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ - */ -/** - * @brief HAL State structures definition - */ + */ +/** + * @brief HAL State structures definition + */ typedef enum { HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0 = 0x22U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX1 = 0x32U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0 = 0x42U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX1 = 0x52U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX0_RX1 = 0x62U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX0_RX1 = 0x72U, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< CAN in Timeout state */ - HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; -/** +/** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE. */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the Receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE. */ -}CAN_InitTypeDef; + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ -/** + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ + + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; + +/** * @brief CAN filter configuration structure definition */ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ + + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + This parameter mus be a number between Min_Data = 0 and Max_Data = 13. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -155,24 +132,26 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t BankNumber; /*!< Select the start slave bank filter - This parameter must be a number between Min_Data = 0 and Max_Data = 28. */ - -}CAN_FilterConfTypeDef; + This parameter can be a value of @ref CAN_filter_activation */ -/** - * @brief CAN Tx message structure definition + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + STM32F0xx devices don't support slave CAN instance (dual CAN). Therefore + this parameter is meaningless but it has been kept for compatibility accross + STM32 families. */ + +} CAN_FilterTypeDef; + +/** + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -182,65 +161,59 @@ typedef struct uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - -}CanTxMsgTypeDef; + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -/** - * @brief CAN Rx message structure definition +} CAN_TxHeaderTypeDef; + +/** + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ -/** - * @brief CAN handle Structure definition - */ -typedef struct +} CAN_RxHeaderTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ - - CAN_InitTypeDef Init; /*!< CAN required parameters */ - - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + CAN_TypeDef *Instance; /*!< Register base address */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure for RX FIFO0 msg */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanRxMsgTypeDef* pRx1Msg; /*!< Pointer to reception structure for RX FIFO1 msg */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ + +} CAN_HandleTypeDef; - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - __IO uint32_t ErrorCode; /*!< CAN Error code - This parameter can be a value of @ref CAN_Error_Code */ - -}CAN_HandleTypeDef; /** * @} */ @@ -254,19 +227,32 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ -#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< BOF error */ -#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ -#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD (0x00000080U) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< LEC transfer error */ -#define HAL_CAN_ERROR_FOV0 (0x00000200U) /*!< FIFO0 overrun error */ -#define HAL_CAN_ERROR_FOV1 (0x00000400U) /*!< FIFO1 overrun error */ -#define HAL_CAN_ERROR_TXFAIL (0x00000800U) /*!< Transmit failure */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + +#define HAL_CAN_ERROR_INTERNAL (0x00800000U) /*!< Internal error */ + /** * @} */ @@ -275,7 +261,7 @@ typedef struct * @{ */ #define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -344,8 +330,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -353,8 +339,17 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_activation CAN Filter Activation + * @{ + */ +#define CAN_FILTER_DISABLE (0x00000000U) /*!< Disable filter */ +#define CAN_FILTER_ENABLE (0x00000001U) /*!< Enable filter */ /** * @} */ @@ -362,8 +357,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -371,8 +366,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ -#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -380,17 +375,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ #define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -398,83 +403,72 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 (0x00000203U) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 (0x00000204U) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 (0x00000403U) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 (0x00000404U) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ -#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ -#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up flag */ -#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0U), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ -#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ -#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ - +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ - -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ - */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - -/** - * @} - */ - -/** @defgroup CAN_Mailboxes CAN Mailboxes -* @{ -*/ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ @@ -497,7 +491,8 @@ typedef struct /** * @brief Enable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) @@ -505,198 +500,175 @@ typedef struct /** * @brief Disable the specified CAN interrupts. * @param __HANDLE__ CAN handle. - * @param __INTERRUPT__ CAN Interrupt + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&0x03U))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. * @param __HANDLE__ specifies the CAN Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) - - -/** @brief Check if the specified CAN interrupt source is enabled or disabled. - * @param __HANDLE__ specifies the CAN Handle. - * @param __INTERRUPT__ specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__ CAN handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TME2))) - - /** - * @brief Release the specified receive FIFO. - * @param __HANDLE__ CAN handle. - * @param __FIFONUMBER__ Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__ specifies the CAN Handle. - * @param __TRANSMITMAILBOX__ the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disables the DBG Freeze for CAN. - * @param __HANDLE__ specifies the CAN Handle. - * @param __NEWSTATE__ new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFOs can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ - -/* Initialization and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); + /** * @} - */ - + */ + /** * @} - */ + */ /* Private types -------------------------------------------------------------*/ /** @defgroup CAN_Private_Types CAN Private Types @@ -714,13 +686,12 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ #define CAN_FLAG_MASK (0x000000FFU) /** * @} @@ -735,55 +706,49 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) - +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - +#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \ + ((ACTIVATION) == CAN_FILTER_ENABLE)) #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) -#define IS_CAN_STDID(STDID) ((STDID) <= (0x7FFU)) -#define IS_CAN_EXTID(EXTID) ((EXTID) <= (0x1FFFFFFFU)) -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) - -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) - -#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ - ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ - ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) - -#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ - ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ - ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ - ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ - ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ - ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) /** * @} @@ -794,17 +759,17 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); * @} */ + +#endif /* CAN */ /** * @} */ -#endif /* STM32F072xB || STM32F042x6 || STM32F048xx || STM32F078xx || STM32F091xC || STM32F098xx */ - #ifdef __cplusplus } #endif -#endif /* __STM32F0xx_HAL_CAN_H */ +#endif /* STM32F0xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c index 3bcafc4e..fb863824 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -68,11 +68,11 @@ * @{ */ /** - * @brief STM32F0xx HAL Driver version number V1.7.0 + * @brief STM32F0xx HAL Driver version number V1.7.2 */ #define __STM32F0xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ #define __STM32F0xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32F0xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32F0xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c index b1887075..986ffe15 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c @@ -3,119 +3,164 @@ * @file stm32f0xx_hal_can.c * @author MCD Application Team * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using __HAL_RCC_CAN1_CLK_ENABLE(); - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins to AF9 using the - following function HAL_GPIO_Init(); - - (#) Initialise and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() - (#) Or transmit the desired CAN frame using HAL_CAN_Transmit_IT() function. + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. - (#) Receive a CAN frame using HAL_CAN_Receive() function. + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() - (#) Or receive a CAN frame using HAL_CAN_Receive_IT() function. + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @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 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 * - * 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. - * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f0xx_hal.h" -#ifdef HAL_CAN_MODULE_ENABLED - -#if defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) - /** @addtogroup STM32F0xx_HAL_Driver * @{ */ +#if defined(CAN) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants @@ -128,350 +173,218 @@ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0U; - + uint32_t tickstart; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) + + if (hcan->State == HAL_CAN_STATE_RESET) { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - + /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - } - - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - hcan->Init.SJW | - hcan->Init.BS1 | - hcan->Init.BS2 | - (hcan->Init.Prescaler - 1U) )); - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) - { - status = CAN_INITSTATUS_SUCCESS; - } - } - - if(status == CAN_INITSTATUS_SUCCESS) - { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Return function status */ - return HAL_OK; + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } -} - -/** - * @brief Configures the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0U; - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = (1U) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - /* Select the start slave bank */ - MODIFY_REG(hcan->Instance->FMR , - CAN_FMR_CAN2SB , - CAN_FMR_FINIT | - (uint32_t)(sFilterConfig->BankNumber << 8U) ); /* Filter Deactivation */ - CLEAR_BIT(hcan->Instance->FA1R, filternbrbitpos); - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CLEAR_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); } - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) { - /* 32-bit scale for the filter */ - SET_BIT(hcan->Instance->FS1R, filternbrbitpos); - - /* 32-bit identifier or First 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - - /* 32-bit mask or Second 32-bit identifier */ - hcan->Instance->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CLEAR_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - SET_BIT(hcan->Instance->FM1R, filternbrbitpos); - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(hcan->Instance->FFA1R, filternbrbitpos); + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } else { - /* FIFO 1 assignation for the filter */ - SET_BIT(hcan->Instance->FFA1R, filternbrbitpos); - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - SET_BIT(hcan->Instance->FA1R, filternbrbitpos); + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); } - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(hcan->Instance->FMR, ((uint32_t)CAN_FMR_FINIT)); - + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + /* Return function status */ return HAL_OK; } /** - * @brief Deinitializes the CANx peripheral registers to their default reset values. + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) { /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ + + /* Stop the CAN module */ + (void)HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ HAL_CAN_MspDeInit(hcan); - + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Change CAN state */ hcan->State = HAL_CAN_STATE_RESET; - /* Release Lock */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } @@ -479,953 +392,1456 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) /** * @brief Initializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspInit could be implemented in the user file - */ + */ } /** * @brief DeInitializes the CAN MSP. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_MspDeInit could be implemented in the user file - */ + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + + /* CAN is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief IO operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0U; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Process locked */ - __HAL_LOCK(hcan); + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Select one empty transmit mailbox */ - if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) - { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Cancel transmission */ - __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + return HAL_ERROR; } } - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - /* Return function status */ return HAL_ERROR; } } /** - * @brief Initiates and transmits a CAN frame message. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ - ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ - ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) + if (hcan->State == HAL_CAN_STATE_LISTENING) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0)) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) { - transmitmailbox = CAN_TXMAILBOX_0; - } - else if(HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1)) - { - transmitmailbox = CAN_TXMAILBOX_1; - } - else - { - transmitmailbox = CAN_TXMAILBOX_2; - } - - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << CAN_TI0R_STID_Pos) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << CAN_TI0R_EXID_Pos) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[0] << CAN_TDL0R_DATA0_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] << CAN_TDL0R_DATA3_Pos) | - ((uint32_t)hcan->pTxMsg->Data[6] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)hcan->pTxMsg->Data[5] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)hcan->pTxMsg->Data[4] << CAN_TDL0R_DATA0_Pos)); - - /* Change CAN state */ - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Return function status */ - return HAL_ERROR; - } - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. - * @param Timeout Timeout duration. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) -{ - uint32_t tickstart = 0U; - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) - { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - return HAL_TIMEOUT; + return HAL_ERROR; } } - } - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } + return HAL_ERROR; } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Receives a correct CAN frame. + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber FIFO number. + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Increment counter */ + count++; + + /* Check if timeout is reached */ + if (count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + uint32_t tsr = READ_REG(hcan->Instance->TSR); + /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Check if CAN state is not busy for RX FIFO0 */ - if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Check if CAN state is not busy for RX FIFO1 */ - if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \ - (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1))) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - return HAL_BUSY; - } - - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - case(HAL_CAN_STATE_BUSY_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - case(HAL_CAN_STATE_BUSY_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1; - break; - default: /* HAL_CAN_STATE_READY */ - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - } - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR); - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + assert_param(IS_CAN_STDID(pHeader->StdId)); } else { - /* Enable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + assert_param(IS_CAN_EXTID(pHeader->ExtId)); } - - /* Return function status */ - return HAL_OK; -} + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); -/** - * @brief Enters the Sleep (low power) mode. - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - MODIFY_REG(hcan->Instance->MCR, - CAN_MCR_INRQ , - CAN_MCR_SLEEP ); - - /* Sleep mode status */ - if (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while (HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_SLAK) || - HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK) ) - { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + ((tsr & CAN_TSR_TME1) != 0U) || + ((tsr & CAN_TSR_TME2) != 0U)) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Check transmit mailbox value */ + if (transmitmailbox > 2U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; + + return HAL_ERROR; + } + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Wakes up the CAN peripheral from sleep mode, after that the CAN peripheral - * is in the normal mode. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @retval Number of free Tx Mailboxes. */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) { - uint32_t tickstart = 0U; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) + uint32_t freelevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) { - hcan->State= HAL_CAN_STATE_TIMEOUT; + freelevel++; + } - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + { + freelevel++; + } - return HAL_TIMEOUT; + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + { + freelevel++; } } - if(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_SLAK)) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_ERROR; - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; + /* Return Tx Mailboxes free level */ + return freelevel; } /** - * @brief Handles CAN interrupt request + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + /* Select the Tx mailbox */ + if (TxMailbox == CAN_TX_MAILBOX0) + { + transmitmailbox = 0U; + } + else if (TxMailbox == CAN_TX_MAILBOX1) + { + transmitmailbox = 1U; + } + else /* (TxMailbox == CAN_TX_MAILBOX2) */ + { + transmitmailbox = 2U; + } + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + 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->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; + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) +{ + HAL_CAN_StateTypeDef state = hcan->State; + + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Handles CAN interrupt request * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); - /* Check Overrun flag for FIFO0 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) { - /* Set CAN error code to FOV0 error */ - errorcode |= HAL_CAN_ERROR_FOV0; - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - } - - /* Check Overrun flag for FIFO1 */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) - { - /* Set CAN error code to FOV1 error */ - errorcode |= HAL_CAN_ERROR_FOV1; - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - } - - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) - { - /* Check Transmit request completion status */ - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) { - /* Check Transmit success */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1)) || - (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))) - { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - else /* Transmit failure */ - { - /* Set CAN error code to TXFAIL error */ - errorcode |= HAL_CAN_ERROR_TXFAIL; - } + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - /* Clear transmission status flags (RQCPx and TXOKx) */ - SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2 | \ - CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0U)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Set error code in handle */ - hcan->ErrorCode |= errorcode; - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + ((esrflags & CAN_ESR_EWGF) != 0U)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + ((esrflags & CAN_ESR_EPVF) != 0U)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + ((esrflags & CAN_ESR_BOFF) != 0U)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + ((esrflags & CAN_ESR_LEC) != 0U)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI Flag */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; - - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - /* - Disable FIFO 0 message pending Interrupt */ - /* - Disable FIFO 0 Overrun Interrupt */ - /* - Disable FIFO 1 message pending Interrupt */ - /* - Disable FIFO 1 Overrun Interrupt */ - /* - Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_FMP0| - CAN_IT_FOV0| - CAN_IT_FMP1| - CAN_IT_FOV1| - CAN_IT_TME ); + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non blocking mode + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Transmission complete callback in non blocking mode + * @brief Transmission Mailbox 1 complete callback. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } @@ -1449,233 +1865,97 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief return the CAN state + * @brief Return the CAN state. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { + HAL_CAN_StateTypeDef state = hcan->State; + + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + else + { + /* Neither sleep mode request nor sleep mode acknowledge */ + } + } + /* Return CAN state */ - return hcan->State; + return state; } /** - * @brief Return the CAN error code + * @brief Return the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } /** - * @} - */ - -/** - * @} - */ - -/** @addtogroup CAN_Private_Functions CAN Private Functions - * @brief CAN Frame message Rx/Tx functions - * - * @{ - */ - -/** - * @brief Initiates and transmits a CAN frame message. + * @brief Reset the CAN error code. * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * the configuration information for the specified CAN. * @retval HAL status */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) { - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } + HAL_StatusTypeDef status = HAL_OK; + HAL_CAN_StateTypeDef state = hcan->State; - /* Change CAN state */ - switch(hcan->State) + if ((state == HAL_CAN_STATE_READY) || + (state == HAL_CAN_STATE_LISTENING)) { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_TX */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receives a correct CAN frame. - * @param hcan Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber Specify the FIFO number - * @retval HAL status - * @retval None - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - CanRxMsgTypeDef* pRxMsg = NULL; - - /* Set RxMsg pointer */ - if(FIFONumber == CAN_FIFO0) - { - pRxMsg = hcan->pRxMsg; - } - else /* FIFONumber == CAN_FIFO1 */ - { - pRxMsg = hcan->pRx1Msg; - } - - /* Get the Id */ - pRxMsg->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (pRxMsg->IDE == CAN_ID_STD) - { - pRxMsg->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_TI0R_STID_Pos; + /* Reset CAN error code */ + hcan->ErrorCode = 0U; } else { - pRxMsg->ExtId = (0xFFFFFFF8U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_EXID_Pos; - } - pRxMsg->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[FIFONumber].RIR) >> CAN_RI0R_RTR_Pos; - /* Get the DLC */ - pRxMsg->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_DLC_Pos; - /* Get the FMI */ - pRxMsg->FMI = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR) >> CAN_RDT0R_FMI_Pos; - /* Get the FIFONumber */ - pRxMsg->FIFONumber = FIFONumber; - /* Get the data field */ - pRxMsg->Data[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA0_Pos; - pRxMsg->Data[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA1_Pos; - pRxMsg->Data[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA2_Pos; - pRxMsg->Data[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR) >> CAN_RDL0R_DATA3_Pos; - pRxMsg->Data[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA4_Pos; - pRxMsg->Data[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA5_Pos; - pRxMsg->Data[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA6_Pos; - pRxMsg->Data[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR) >> CAN_RDH0R_DATA7_Pos; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 overrun and message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); - } - - if((hcan->State == HAL_CAN_STATE_BUSY_RX0) || (hcan->State == HAL_CAN_STATE_BUSY_RX1)) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + status = HAL_ERROR; } - /* Change CAN state */ - if (FIFONumber == CAN_FIFO0) - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX0): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX1; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX1; - break; - default: /* HAL_CAN_STATE_BUSY_RX0 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - else /* FIFONumber == CAN_FIFO1 */ - { - switch(hcan->State) - { - case(HAL_CAN_STATE_BUSY_TX_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX; - break; - case(HAL_CAN_STATE_BUSY_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_RX0; - break; - case(HAL_CAN_STATE_BUSY_TX_RX0_RX1): - hcan->State = HAL_CAN_STATE_BUSY_TX_RX0; - break; - default: /* HAL_CAN_STATE_BUSY_RX1 */ - hcan->State = HAL_CAN_STATE_READY; - break; - } - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; + /* Return the status */ + return status; } /** @@ -1686,12 +1966,16 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum * @} */ +#endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ - -#endif /* defined(STM32F072xB) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F091xC) || defined(STM32F098xx) */ -#endif /* HAL_CAN_MODULE_ENABLED */ +#endif /* CAN */ + +/** + * @} + */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c index b7d8d1de..42f3f508 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -494,18 +494,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { - if (HAL_IS_BIT_SET(FLASH->CR, FLASH_CR_LOCK)) + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c index 7984891b..4ee0bc08 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -919,22 +919,22 @@ static uint32_t FLASH_OB_GetWRP(void) */ static uint32_t FLASH_OB_GetRDP(void) { - uint32_t tmp_reg = 0U; + uint32_t tmp_reg; /* Read RDP level bits */ tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); - if (tmp_reg == FLASH_OBR_RDPRT1) + if (tmp_reg == 0U) { - return OB_RDP_LEVEL_1; + return OB_RDP_LEVEL_0; } - else if (tmp_reg == FLASH_OBR_RDPRT2) + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) { return OB_RDP_LEVEL_2; } else { - return OB_RDP_LEVEL_0; + return OB_RDP_LEVEL_1; } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h index 70e83cdd..2c1ab465 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/stm32f0xx_hal_conf.h @@ -5,7 +5,7 @@ ****************************************************************************** * @attention * - *

    © COPYRIGHT(c) 2018 STMicroelectronics

    + *

    © COPYRIGHT(c) 2020 STMicroelectronics

    * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -72,6 +72,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED @@ -192,6 +193,10 @@ #include "stm32f0xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f0xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ @@ -302,9 +307,9 @@ * If expr is true, it returns no value. * @retval None */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((char *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); + void assert_failed(char* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ diff --git a/Target/Source/ARMCM0_STM32F0/can.c b/Target/Source/ARMCM0_STM32F0/can.c index 3252cb67..ec79ea27 100644 --- a/Target/Source/ARMCM0_STM32F0/can.c +++ b/Target/Source/ARMCM0_STM32F0/can.c @@ -42,6 +42,9 @@ /** \brief Timeout for transmitting a CAN message in milliseconds. */ #define CAN_MSG_TX_TIMEOUT_MS (50u) +/** \brief Set CAN base address to CAN1. */ +#define CAN_CHANNEL CAN + /**************************************************************************************** * Type definitions @@ -95,12 +98,6 @@ static const tCanBusTiming canTiming[] = /** \brief CAN handle to be used in API calls. */ static CAN_HandleTypeDef canHandle; -/** \brief Message buffer for transmitting CAN messages. */ -static CanTxMsgTypeDef canTxMessage; - -/** \brief Message buffer for receiving CAN messages. */ -static CanRxMsgTypeDef canRxMessage; - /************************************************************************************//** ** \brief Search algorithm to match the desired baudrate to a possible bus @@ -158,7 +155,7 @@ void CanInit(void) { blt_int16u prescaler = 0; blt_int8u tseg1 = 0, tseg2 = 0; - CAN_FilterConfTypeDef filterConfig; + CAN_FilterTypeDef filterConfig; blt_int32u rxMsgId = BOOT_COM_CAN_RX_MSG_ID; blt_int32u rxFilterId, rxFilterMask; @@ -179,19 +176,17 @@ void CanInit(void) } /* set the CAN controller configuration. */ - canHandle.Instance = CAN; - canHandle.pTxMsg = &canTxMessage; - canHandle.pRxMsg = &canRxMessage; - canHandle.Init.TTCM = DISABLE; - canHandle.Init.ABOM = DISABLE; - canHandle.Init.AWUM = DISABLE; - canHandle.Init.NART = DISABLE; - canHandle.Init.RFLM = DISABLE; - canHandle.Init.TXFP = DISABLE; + canHandle.Instance = CAN_CHANNEL; + canHandle.Init.TimeTriggeredMode = DISABLE; + canHandle.Init.AutoBusOff = DISABLE; + canHandle.Init.AutoWakeUp = DISABLE; + canHandle.Init.AutoRetransmission = ENABLE; + canHandle.Init.ReceiveFifoLocked = DISABLE; + canHandle.Init.TransmitFifoPriority = DISABLE; canHandle.Init.Mode = CAN_MODE_NORMAL; - canHandle.Init.SJW = CAN_SJW_1TQ; - canHandle.Init.BS1 = ((blt_int32u)tseg1 - 1) << CAN_BTR_TS1_Pos; - canHandle.Init.BS2 = ((blt_int32u)tseg2 - 1) << CAN_BTR_TS2_Pos; + canHandle.Init.SyncJumpWidth = CAN_SJW_1TQ; + canHandle.Init.TimeSeg1 = ((blt_int32u)tseg1 - 1) << CAN_BTR_TS1_Pos; + canHandle.Init.TimeSeg2 = ((blt_int32u)tseg2 - 1) << CAN_BTR_TS2_Pos; canHandle.Init.Prescaler = prescaler; /* initialize the CAN controller. this only fails if the CAN controller hardware is * faulty. no need to evaluate the return value as there is nothing we can do about @@ -216,20 +211,24 @@ void CanInit(void) /* configure the reception filter. note that the implementation of this function * always returns HAL_OK, so no need to evaluate the return value. */ - filterConfig.FilterNumber = 0; + /* filter 0 is the first filter assigned to the bxCAN master (CAN1) */ + filterConfig.FilterBank = 0; filterConfig.FilterMode = CAN_FILTERMODE_IDMASK; filterConfig.FilterScale = CAN_FILTERSCALE_32BIT; filterConfig.FilterIdHigh = (rxFilterId >> 16) & 0x0000FFFFu; filterConfig.FilterIdLow = rxFilterId & 0x0000FFFFu; filterConfig.FilterMaskIdHigh = (rxFilterMask >> 16) & 0x0000FFFFu; filterConfig.FilterMaskIdLow = rxFilterMask & 0x0000FFFFu; - filterConfig.FilterFIFOAssignment = 0; + filterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; filterConfig.FilterActivation = ENABLE; - /* the bank number is don't care for STM32F3 devices as it only supports one CAN - * controller. + /* select the start slave bank number (for CAN1). this configuration assigns filter + * banks 0..13 to CAN1 and 14..27 to CAN2. */ - filterConfig.BankNumber = 14; + filterConfig.SlaveStartFilterBank = 14; (void)HAL_CAN_ConfigFilter(&canHandle, &filterConfig); + /* start the CAN peripheral. no need to evaluate the return value as there is nothing + * we can do about a faulty CAN controller. */ + (void)HAL_CAN_Start(&canHandle); } /*** end of CanInit ***/ @@ -242,35 +241,51 @@ void CanInit(void) ****************************************************************************************/ void CanTransmitPacket(blt_int8u *data, blt_int8u len) { - blt_int8u byteIdx; blt_int32u txMsgId = BOOT_COM_CAN_TX_MSG_ID; + CAN_TxHeaderTypeDef txMsgHeader; + blt_int32u txMsgMailbox; + blt_int32u timeout; + HAL_StatusTypeDef txStatus; /* configure the message that should be transmitted. */ if ((txMsgId & 0x80000000) == 0) { /* set the 11-bit CAN identifier. */ - canHandle.pTxMsg->StdId = txMsgId; - canHandle.pTxMsg->IDE = CAN_ID_STD; + txMsgHeader.StdId = txMsgId; + txMsgHeader.IDE = CAN_ID_STD; } else { /* negate the ID-type bit */ txMsgId &= ~0x80000000; /* set the 29-bit CAN identifier. */ - canHandle.pTxMsg->ExtId = txMsgId; - canHandle.pTxMsg->IDE = CAN_ID_EXT; + txMsgHeader.ExtId = txMsgId; + txMsgHeader.IDE = CAN_ID_EXT; } - canHandle.pTxMsg->RTR = CAN_RTR_DATA; - canHandle.pTxMsg->DLC = len; - /* copy the message data. */ - for (byteIdx = 0; byteIdx < len; byteIdx++) + txMsgHeader.RTR = CAN_RTR_DATA; + txMsgHeader.DLC = len; + + /* submit the message for transmission. */ + txStatus = HAL_CAN_AddTxMessage(&canHandle, &txMsgHeader, data, + (uint32_t *)&txMsgMailbox); + if (txStatus == HAL_OK) { - canHandle.pTxMsg->Data[byteIdx] = data[byteIdx]; + /* determine timeout time for the transmit completion. */ + timeout = TimerGet() + CAN_MSG_TX_TIMEOUT_MS; + /* poll for completion of the transmit operation. */ + while (HAL_CAN_IsTxMessagePending(&canHandle, txMsgMailbox) != 0) + { + /* service the watchdog. */ + CopService(); + /* break loop upon timeout. this would indicate a hardware failure or no other + * nodes connected to the bus. + */ + if (TimerGet() > timeout) + { + break; + } + } } - /* submit the message for transmission. no need to check the return value. if the - * response cannot be transmitted, then the receiving node will detect a timeout. - */ - (void)HAL_CAN_Transmit(&canHandle, CAN_MSG_TX_TIMEOUT_MS); } /*** end of CanTransmitPacket ***/ @@ -285,48 +300,38 @@ blt_bool CanReceivePacket(blt_int8u *data, blt_int8u *len) { blt_int32u rxMsgId = BOOT_COM_CAN_RX_MSG_ID; blt_bool result = BLT_FALSE; - blt_bool packetIdMatches = BLT_FALSE; - blt_int8u byteIdx; + CAN_RxHeaderTypeDef rxMsgHeader; - /* poll for received CAN messages that await processing. */ - if (HAL_CAN_Receive(&canHandle, CAN_FIFO0, 0) == HAL_OK) + if (HAL_CAN_GetRxMessage(&canHandle, CAN_RX_FIFO0, &rxMsgHeader, data) == HAL_OK) { /* check if this message has the configured CAN packet identifier. */ if ((rxMsgId & 0x80000000) == 0) { /* was an 11-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->StdId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_STD) ) + if ( (rxMsgHeader.StdId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_STD) ) { /* set flag that a packet with a matching CAN identifier was received. */ - packetIdMatches = BLT_TRUE; + result = BLT_TRUE; } } else { - /* negate the ID-type bit */ + /* negate the ID-type bit. */ rxMsgId &= ~0x80000000; /* was an 29-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->ExtId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_EXT) ) + if ( (rxMsgHeader.ExtId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_EXT) ) { /* set flag that a packet with a matching CAN identifier was received. */ - packetIdMatches = BLT_TRUE; + result = BLT_TRUE; } } - - /* only continue if a packet with a matching CAN identifier was received. */ - if (packetIdMatches == BLT_TRUE) - { - /* copy the received package data. */ - for (byteIdx = 0; byteIdx < canHandle.pRxMsg->DLC; byteIdx++) - { - data[byteIdx] = canHandle.pRxMsg->Data[byteIdx]; - } - *len = canHandle.pRxMsg->DLC; - /* update the return value to indicate that new packet data was received. */ - result = BLT_TRUE; - } + } + /* store the data length. */ + if (result == BLT_TRUE) + { + *len = rxMsgHeader.DLC; } /* Give the result back to the caller. */ return result;

    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 E0o><}%m4rY diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/Debug/demoprog_stm32f091.srec b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/Debug/demoprog_stm32f091.srec index dee2eb61..5a2e1920 100755 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/Debug/demoprog_stm32f091.srec +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/Debug/demoprog_stm32f091.srec @@ -1,22 +1,22 @@ S01A000064656D6F70726F675F73746D3332663039312E7372656395 -S315080028000080002019470008694700086947000842 +S3150800280000800020414400089144000891440008D3 S3150800281000000000000000000000000000000000AA -S3150800282000000000000000000000000069470008E2 -S3150800283000000000000000006947000899470008EA -S31508002840694700086947000869470008694700089A -S31508002850694700086947000869470008694700088A -S31508002860694700086947000869470008694700087A -S31508002870694700086947000869470008694700086A -S31508002880694700086947000869470008694700085A -S31508002890694700086947000869470008694700084A -S315080028A0694700086947000869470008694700083A -S315080028B069470008694700086947000800000000E2 +S3150800282000000000000000000000000091440008BD +S31508002830000000000000000091440008C1440008A0 +S315080028409144000891440008914400089144000806 +S3150800285091440008914400089144000891440008F6 +S3150800286091440008914400089144000891440008E6 +S3150800287091440008914400089144000891440008D6 +S3150800288091440008914400089144000891440008C6 +S3150800289091440008914400089144000891440008B6 +S315080028A091440008914400089144000891440008A6 +S315080028B09144000891440008914400080000000073 S309080028C0EE11AA5508 S315080028C410B5064C2378002B07D1054B002B02D0F4 S315080028D4044800E000BF0123237010BDC400002093 -S315080028E400000000EC470008044B10B5002B03D089 +S315080028E40000000014450008044B10B5002B03D063 S315080028F40349044800E000BF10BDC04600000000BC -S31508002904C8000020EC470008002243088B4274D311 +S31508002904C800002014450008002243088B4274D3EB S3150800291403098B425FD3030A8B4244D3030B8B42CE S3150800292428D3030C8B420DD3FF22090212BA030CD7 S315080029348B4202D31212090265D0030B8B4219D3B8 @@ -32,493 +32,448 @@ S315080029C48B4201D34B01C01A524103098B4201D3EE S315080029D40B01C01A5241C3088B4201D3CB00C01A5B S315080029E4524183088B4201D38B00C01A52414308D3 S315080029F48B4201D34B00C01A5241411A00D20146F8 -S31508002A04524110467047FFE701B5002000F0F0F880 -S31508002A1402BDC0460029F7D076E7704703460B4344 -S31508002A247FD4002243088B4274D303098B425FD3B5 -S31508002A34030A8B4244D3030B8B4228D3030C8B42E1 -S31508002A440DD3FF22090212BA030C8B4202D31212C7 -S31508002A54090265D0030B8B4219D300E0090AC30B9C -S31508002A648B4201D3CB03C01A5241830B8B4201D349 -S31508002A748B03C01A5241430B8B4201D34B03C01A32 -S31508002A845241030B8B4201D30B03C01A5241C30AAA -S31508002A948B4201D3CB02C01A5241830A8B4201D31B -S31508002AA48B02C01A5241430A8B4201D34B02C01A05 -S31508002AB45241030A8B4201D30B02C01A5241CDD2AA -S31508002AC4C3098B4201D3CB01C01A524183098B42F5 -S31508002AD401D38B01C01A524143098B4201D34B01DE -S31508002AE4C01A524103098B4201D30B01C01A524141 -S31508002AF4C3088B4201D3CB00C01A524183088B42C8 -S31508002B0401D38B00C01A524143088B4201D34B00B0 -S31508002B14C01A5241411A00D2014652411046704722 -S31508002B245DE0CA0F00D04942031000D34042534027 -S31508002B3400229C4603098B422DD3030A8B4212D3E7 -S31508002B44FC22890112BA030A8B420CD38901921119 -S31508002B548B4208D3890192118B4204D389013AD056 -S31508002B64921100E08909C3098B4201D3CB01C01A2B -S31508002B74524183098B4201D38B01C01A524143093E -S31508002B848B4201D34B01C01A524103098B4201D32C -S31508002B940B01C01A5241C3088B4201D3CB00C01A99 -S31508002BA4524183088B4201D38B00C01A5241D9D2B1 -S31508002BB443088B4201D34B00C01A5241411A00D232 -S31508002BC40146634652415B10104601D34042002B2E -S31508002BD400D54942704763465B1000D3404201B5AD -S31508002BE4002000F005F802BD0029F8D016E7704762 -S31508002BF47047C046F0B5D6464F4680B583B0814681 -S31508002C048A4600920193002501E00135EDB2112DA3 -S31508002C1420D8134B6A00D75C9B185E78BC1901341C -S31508002C244B465C4321000F48FFF7DEFF0029ECD131 -S31508002C3421000C48FFF7F2FE80B25346188001388B -S31508002C4480B2094B9842E0D8009B1F70019B1E7006 -S31508002C54012000E0002003B00CBC91469A46F0BD62 -S31508002C642448000880BB0000FF03000010B508488C -S31508002C74084B0360E1231B02436000238360C3609F -S31508002C84036183610C33436101F02EFC10BDC04619 -S31508002C944801002000440040F0B58DB000256B467D -S31508002CA4DD852D276F4400233B700BAE337033004C -S31508002CB43A002E216944FA204000FFF79BFF184C7E -S31508002CC4184B23602563184B6363A561E561256288 -S31508002CD46562A562E562A560E5603B78013B1B0475 -S31508002CE423613378013B1B0563616B46DB8D6360A7 -S31508002CF4200000F0A8F906950795012308930B4AC6 -S31508002D04019202950A4A03920422049205950993AC -S31508002D140D330A9301A9200000F006F90DB0F0BDA1 -S31508002D24E00000200064004024010020E0CC0000FC -S31508002D34E0FF000010B5010000230122044801F059 -S31508002D44F3FA002801D0002010BD0130FCE7C04684 -S31508002D544801002010B5FFF789FFFFF79DFF10BD56 -S31508002D64BFF34F8F034A044BDA60BFF34F8FC04655 -S31508002D74FDE7C0460400FA0500ED00E010B5224B55 -S31508002D841B78002B16D12148FFF7D4FF012800D061 -S31508002D9410BD1E4B1B78013BDBB23F2BF8D801F064 -S31508002DA4F5FC1B4B18600122174B1A700022194BAD -S31508002DB41A70EDE7174B1B7801331448C018FFF750 -S31508002DC4B9FF01280AD001F0E1FC114B1B686433F2 -S31508002DD49842DDD900220C4B1A70D9E70D4A1378AC -S31508002DE40133DBB21370094A12789342D0D1002218 -S31508002DF4054B1A70054B5B78FF2BC9D1034B9B789F -S31508002E04002BC5D1FFF7ACFFF9010020B80100205B -S31508002E14FC010020FA01002010B5002200210D480B -S31508002E2400F0D1F9002808D10A4B5B6B0A4A1968E5 -S31508002E34914203D00022012A07D010BD9A68002ABD -S31508002E4401D00022F7E70122F5E79B8AFF2BF4D18C -S31508002E54FFF786FFE00000206706000010B5FFF7BD -S31508002E648DFFFFF7D9FF10BD10B500222021902051 -S31508002E74C00500F023FC10BD10B501F087FC040062 -S31508002E840F4B1B68C31AF422FF3293420ED90D4B1B -S31508002E941B78002B0BD1F33AFF3A0A4B1A70202100 -S31508002EA49020C00500F00AFC054B1C6010BD0022EA -S31508002EB4044B1A7020219020C00500F0FFFBF3E7AD -S31508002EC4040200200002002010B5040000F084FF6C -S31508002ED4FA218900FFF718FD00F0F0FA0022210014 -S31508002EE40120404200F0B8FA002010BD10B5064A89 -S31508002EF4136810210B4313600020FFF7E5FF01F068 -S31508002F049FFB002010BDC04600200240024A1368F9 -S31508002F14013313607047C04608020020014B186845 -S31508002F247047C04608020020F0B501273A004B69ED -S31508002F349A4004688026B600A359414D2B404D6A31 -S31508002F442D022B433B43A35106688725AD007359CD -S31508002F54D44323407351CB69002B1CD10668103D1A -S31508002F64735923407351CB681D044B681B041B0C0F -S31508002F741D434B694833DB0006689D518B681B0467 -S31508002F840D682D042D0C2B434D694835ED00066854 -S31508002F94B44665446B60CB69012B1DD08B69002B45 -S31508002FA439D106688125AD007359234073510B69DD -S31508002FB4002B37D106688525AD0073591C4074511A -S31508002FC40B6A012B35D00168802292008B580120A8 -S31508002FD483438B500020F0BD06688325AD007359E2 -S31508002FE4134373510B681D044B681B041B0C1D43C8 -S31508002FF44B694833DB0006689D518B681B04CD6812 -S315080030042D042D0C2B434D694835ED000668B4464E -S3150800301465446B60C2E706688125AD00735913439E -S315080030247351C4E705688524A4002B5913432B510F -S31508003034C6E7016887239B00CC582243CA50C2E7D7 -S31508003044FFC0FFFF704770B5041E00D1B9E03D23E9 -S31508003054C35C002B1FD002213D23E1542268136868 -S315080030648B4313602268136801390B431360FFF717 -S3150800307455FF050023685A68D20712D4FFF74EFF96 -S31508003084401B0A28F6D903223D23E2540022013BB9 -S31508003094E254032070BD00223C33C254FFF7D2FF2A -S315080030A4D9E75A68D2077BD5A269012A50D01A688B -S315080030B480218A431A60E369012B4ED0226813687B -S315080030C440218B431360236A012B4CD02268136872 -S315080030D420218B431360636A012B4AD02268136844 -S315080030E410218B431360A36A012B48D02268136806 -S315080030F408218B431360E36A012B46D022681368C0 -S3150800310404218B4313602168A368E2681343226988 -S315080031141343626913436268013A1343CB61226815 -S31508003124136801218B431360FFF7F8FE0500236833 -S315080031345A68D2072FD5FFF7F1FE401B0A28F6D99D -S3150800314403223D23E2540022013BE2540320A1E773 -S315080031541A6880210A431A60ADE722681368402179 -S315080031640B431360AFE72268136820210B431360EF -S31508003174B1E72268136810210B431360B3E722688A -S31508003184136808210B431360B5E722681368042102 -S315080031940B431360B7E75B68DB0709D5002300E038 -S315080031A40023012B06D004223D23E254012071E7B3 -S315080031B40123F6E70023236401223D33E254002069 -S315080031C468E7012066E7F8B504000D0016003C23FD -S315080031D4C35C012B00D13DE101223C23C2540029E2 -S315080031E40FD10133C35C222B1CD03D23C35C422B75 -S315080031F418D03D23C35C622B14D03D23C35C722BC9 -S3150800320410D0012D13D0002D35D13D23E35CDBB25C -S31508003214322B28D0522B2AD0122B1DD022223D2302 -S31508003224E2541CE000223C23E254022013E13D232D -S31508003234E35C322B0BD03D23E35C522B07D03D23B2 -S31508003244E35C622B03D03D23E35C722BDBD10022C3 -S315080032543C23E2540220FEE042222B33E254FFF7D9 -S315080032645DFE07003AE062223D23E254F7E7722244 -S315080032743D23E254F3E73D23E35CDBB2222B0BD078 -S31508003284422B0DD0122B03D032223D23E254E6E71B -S3150800329452222B33E254E2E762223D23E254DEE76C -S315080032A472223D23E254DAE7002E04D0FFF736FEF5 -S315080032B4C01B864212D203223D23E2540022013B5C -S315080032C4E2540320C7E023681A6903231A405342C9 -S315080032D45341DBB2002B0BD0731CE5D1002DF2D180 -S315080032E42368DA6803231A4053425341DBB2F1E7F1 -S315080032F4002D76D1636B2A001B32120121685158BE -S3150800330404220A409A606ED12A001B3212012168EF -S315080033145258520D1A602A001B321201216850585D -S31508003324400801210140D9602168891848680F219D -S315080033340140196121688C4662445168090AFF22D2 -S315080033440A40DA611D622A0121688918B931FF31F8 -S315080033540968197521688918B931FF310968090A94 -S31508003364597521688918B931FF310968090C9975A5 -S3150800337421688918B931FF310968090ED975216898 -S315080033848918BD31FF310968197621688918BD3154 -S31508003394FF310968090A597621688918BD31FF3150 -S315080033A40968090C997621688C466244BD32FF3255 -S315080033B41268120EDA76002D1DD12268D3682021F0 -S315080033C40B43D360002D2CD13D23E35CDBB2622B87 -S315080033D41FD0722B21D0422B13D001223D23E25455 -S315080033E412E0A36B87E72A001B32120121685258A0 -S315080033F4D2085A608FE72268136920210B431361A8 -S31508003404E0E71222053BE25400223C23E254002062 -S3150800341421E032223D23E254F6E752223D23E254C8 -S31508003424F2E73D23E35CDBB2622B0BD0722B0DD0A3 -S31508003434522B03D001223D23E254E5E71222153B21 -S31508003444E254E1E722223D23E254DDE742223D230A -S31508003454E254D9E70220F8BD70B5002811DB8308C9 -S31508003464144DC0339B005C5903221040C000FC3243 -S3150800347416008640B44389010A40824022435A51C1 -S3150800348470BDC0B20F230340083B9B0806339B005C -S31508003494094A944663445D6803221040C000FF2429 -S315080034A422008240954389010C4084402C435C6089 -S315080034B4E6E7C04600E100E000ED00E001380A4B0B -S315080034C498420FD8094A50600948036A1B021B0A26 -S315080034D4C02109060B430362002393600733136074 -S315080034E4002070470120FCE7FFFFFF0010E000E022 -S315080034F400ED00E0042805D0054A136804218B432F -S3150800350413607047024A136804210B431360F8E7F3 -S3150800351410E000E0704710B5FFF7FCFF10BD00008F -S31508003524F0B5C64600B582B0002381E0DF08083747 -S31508003534BF003E5807251D40AD000F24AC40A643E6 -S315080035440C69AC40250035433D5081E085686446E6 -S315080035542540CE68BE403543856045682C004546FF -S31508003564AC434D682E09012535409D402C434460E3 -S31508003574C46865462C408D68BD402C43C4604C68BD -S31508003584E40054D5464DAE6901242643AE61AD69BF -S315080035942C400194019C9C08A51CAD00414EAE59D3 -S315080035A403271F40BD000F27AF40BE439027FF05E2 -S315080035B4B84268D03C4FB84267D03C4FB84266D050 -S315080035C43B4FB84265D03B4FB8425AD00527AF4067 -S315080035D43D0035430234A400324EA551364C2568C5 -S315080035E4D44326002E404F68FF0301D515432E0009 -S315080035F4314D2E606D682E0026404F68BF0301D5F5 -S3150800360415432E002C4D6E60AD682E0026404F687B -S31508003614FF0201D515432E00274DAE60ED682C40F8 -S315080036244E68B60201D52A431400234AD4600133EE -S315080036340A681400DC402ED001249C40A04622408F -S31508003644F5D04D68022D00D170E7122D00D16DE733 -S3150800365406685F0003252C00BC40E443A4462640C4 -S315080036644C682540BD40354305604D686E1E012EE5 -S3150800367400D86BE7112D00D168E7122D00D077E743 -S3150800368464E70427A3E70027A1E701279FE70227A2 -S315080036949DE703279BE702B004BC9046F0BDC046ED -S315080036A400100240000001400004004800080048D9 -S315080036B4000C00480010004800040140002A01D10B -S315080036C4816270478161FCE770B582B004000368C3 -S315080036D4DB073BD5C34B5A680C231340042B2DD068 -S315080036E4C04B5A680C231340082B1ED06368012B61 -S315080036F450D0002B55D1BB4B1A68BB490A401A60F7 -S315080037041A68BA490A401A606368002B61D0FFF741 -S3150800371405FC0500B34B1B689B0317D4FFF7FEFB98 -S31508003724401B6428F6D903203BE2AE4B5B68C022F3 -S3150800373452021340802252029342D7D1A94B1B68E6 -S315080037449B0303D56368002B00D127E223689B07F4 -S3150800375467D5A44B5B680C221A4251D0A14B5A6810 -S315080037640C231340082B42D0E368002B7BD09D4AD8 -S31508003774136801210B431360FFF7D0FB0500994B2F -S315080037841B689B0766D4FFF7C9FB401B0228F6D9BA -S31508003794032006E2934A116880235B020B431360F5 -S315080037A4B2E7052B09D08F4B1A688F490A401A606D -S315080037B41A688E490A401A60A6E78A4B1968802255 -S315080037C4D2020A431A601968802252020A431A600E -S315080037D49AE7FFF7A3FB0500824B1B689B03B5D545 -S315080037E4FFF79CFB401B6428F6D90320D9E17D4BDF -S315080037F45B68C02252021340802212029342B3D15C -S31508003804784B1B689B0704D5E368012B01D001207C -S31508003814C7E174490B68F82293432269D20013431B -S315080038240B6023681B0744D5E369002B2ED06D4A29 -S31508003834536A01210B435362FFF770FB0500694B7A -S315080038445B6A9B0735D4FFF769FB401B0228F6D948 -S315080038540320A6E163490B68F82293432269D20040 -S3150800386413430B60DDE75F4A136801218B4313603A -S31508003874FFF754FB05005B4B1B689B07D1D5FFF785 -S315080038844DFB401B0228F6D903208AE1554A536AA0 -S3150800389401218B435362FFF741FB0500514B5B6AD9 -S315080038A49B0706D5FFF73AFB401B0228F6D90320E7 -S315080038B477E123685B0775D54A4BDB69DB000BD4D4 -S315080038C4484AD169802040050143D161D369034040 -S315080038D40193019B012500E00025454B1B68DB0588 -S315080038E41FD5A368012B30D0002B34D13D4B1A6A5F -S315080038F401218A431A621A6A03318A431A62A3683F -S31508003904002B3ED0FFF70AFB0600364B1B6A9B07C3 -S3150800391446D4FFF703FB801B364B9842F5D90320A0 -S315080039243FE1334A116880235B000B431360FFF7BA -S31508003934F5FA06002E4B1B68DB05D2D4FFF7EEFA20 -S31508003944801B6428F6D903202BE1264A136A012131 -S315080039540B431362D3E7052B09D0224B1A6A0121BC -S315080039648A431A621A6A03318A431A62C7E71D4BE5 -S315080039741A6A04210A431A621A6A03390A431A623A -S31508003984BDE7FFF7CBFA0600164B1B6A9B0707D55C -S31508003994FFF7C4FA801B174B9842F5D9032000E1B8 -S315080039A4012D29D02368DB0658D56369012B29D054 -S315080039B4053347D00B4B5A6B04210A435A635A6B97 -S315080039C403398A435A63FFF7A9FA0500054B5B6B6B -S315080039D49B0743D5FFF7A2FA401B0228F6D9032012 -S315080039E4DFE0C04600100240FFFFFEFFFFFFFBFFBB -S315080039F400700040881300006C4AD3696C490B4078 -S31508003A04D361CFE7694B5A6B04210A435A635A6B4D -S31508003A1403390A435A63FFF781FA0500634B5B6B64 -S31508003A249B0706D4FFF77AFA401B0228F6D9032027 -S31508003A34B7E05E494B6BF8229343A269D20013435D -S31508003A444B630BE0594A536B04218B435363536B03 -S31508003A54F4318B43A169C9000B43536323689B065E -S31508003A6445D5524B5A680C2313400C2B23D04F4B85 -S31508003A745A680C231340082B16D0236A002B23D02C -S31508003A844A4A516B80235B020B435363FFF746FA9A -S31508003A940500464B5B6BDB0329D4FFF73FFA401B53 -S31508003AA40228F6D903207CE0404B5B68C022520208 -S31508003AB413409342E1D13D4B5B6BDB0317D5236A75 -S31508003AC4012B14D001206CE0384A536B39490B405A -S31508003AD45363FFF723FA0500344B5B6BDB0306D508 -S31508003AE4FFF71CFA401B0228F6D9032059E0636A3B -S31508003AF4002B55D02D4A51680C220A40082A52D068 -S31508003B04022B12D0294A13682B490B401360FFF77E -S31508003B1405FA0400254B1B689B013DD5FFF7FEF902 -S31508003B24001B0228F6D903203BE0204A13682249E1 -S31508003B340B401360FFF7F2F905001C4B1B689B0149 -S31508003B4406D5FFF7EBF9401B0228F6D9032028E02F -S31508003B54164BDA6A0F218A43216B0A43DA625A68DA -S31508003B6416490A40E16AA06A01430A435A60196879 -S31508003B74802252040A431A60FFF7D0F904000B4B5B -S31508003B841B689B0106D4FFF7C9F9001B0228F6D95E -S31508003B94032006E0002004E0002002E0012000E003 -S31508003BA4002002B070BD0120FBE7C04600100240A9 -S31508003BB4FFFFFFEFFFFFFEFFFFFFFFFEFF7FC2FFD2 -S31508003BC430B589B004AA1F4B180032C832C2110096 -S31508003BD402680A606A46103313CB13C21B68136063 -S31508003BE4194B5A680C231340082B04D00C2B26D0E7 -S31508003BF4164809B030BD910C0F23194004A8445C3B -S31508003C041149C96A0B406946C95CC0235B021A405C -S31508003C1480235B029A4208D0C0235B029A4209D0E9 -S31508003C240A48FEF771FE6043E3E70848FEF76CFEB0 -S31508003C346043DEE70648FEF767FE6043D9E70448B3 -S31508003C44D7E7C046044800080010024000127A006C -S31508003C54006CDC0270B505000C00594B1A68012388 -S31508003C6413408B420BD256490B68012293432343D4 -S31508003C740B600B681A40944201D001209DE02B6822 -S31508003C849B0706D54F4A5368F0218B43A9680B4313 -S31508003C9453602B68DB0764D56B68012B25D0022B90 -S31508003CA429D0032B2DD0474A1268920700D485E001 -S31508003CB444494A680320824313434B60FFF72EF9AD -S31508003CC406006B68012B22D0022B2ED0032B3AD088 -S31508003CD43C4B5B680C221A4243D0FFF71FF9801B42 -S31508003CE4394B9842F4D9032067E0364A126892039E -S31508003CF4DED4012061E0334A12689201D8D4012047 -S31508003D045BE0304A526BD203D2D4012055E02D4BE6 -S31508003D145A680C231340042B23D0FFF7FFF8801BA3 -S31508003D24294B9842F3D9032047E0264B5A680C23BB -S31508003D341340082B15D0FFF7F1F8801B224B984245 -S31508003D44F3D9032039E01F4B5A680C2313400C2B74 -S31508003D5407D0FFF7E3F8801B1B4B9842F3D90320DF -S31508003D642BE0174B1A68012313409C420BD21449C3 -S31508003D740B680122934323430B600B681A40944251 -S31508003D8401D0012019E02B685B0706D50D4A536854 -S31508003D940E490B40E9680B435360FFF711FF094BC3 -S31508003DA45A6812090F231340094AD35CD840094BB1 -S31508003DB418600020FFF788F8002070BD0120FCE792 -S31508003DC4002002400010024088130000FFF8FFFF9D -S31508003DD448480008C0000020014B18687047C046D0 -S31508003DE4C000002010B5FFF7F7FF044B5A68120A03 -S31508003DF407231340024AD35CD84010BD0010024082 -S31508003E045848000870B582B004000368DB0335D54A -S31508003E144B4BDB69DB0066D4494AD16980204005EF -S31508003E240143D161D36903400193019B0125454BA5 -S31508003E341B68DB0559D5424B1B6AC0229200134006 -S31508003E4413D061680A4093420FD03D4B186A3E4A24 -S31508003E5402401E6A8021490231431962196A3B4E9F -S31508003E64314019621A62C30753D4354A136A36496C -S31508003E740B4061680B431362012D59D02368DB0795 -S31508003E8406D52F4A136B03218B43A1680B4313638F -S31508003E9423689B0706D52A4A136B2D490B40E1680C -S31508003EA40B43136323685B0306D5254A136B294919 -S31508003EB40B4021690B43136323689B0606D5204AE6 -S31508003EC4136B10218B4361690B43136323685B05EA -S31508003ED433D51B4A136B40218B43A1690B431363E8 -S31508003EE4002002B070BD0025A1E7164A1168802398 -S31508003EF45B000B431360FFF711F80600114B1B68B0 -S31508003F04DB0598D4FFF70AF8801B6428F6D9032042 -S31508003F14E7E7FFF703F80600094B1B6A9B07A4D4D7 -S31508003F24FEF7FCFF801B0C4B9842F5D90320D8E713 -S31508003F34D3690A490B40D361A0E70020D1E7C046FC -S31508003F440010024000700040FFFCFFFFFFFFFEFF69 -S31508003F54FFFFFCFFFFFFF3FF88130000FFFFFFEFDF -S31508003F647047000070B50400836802691343426908 -S31508003F741343C269134301680A688A480240134313 -S31508003F840B602268536888490B40E1680B43536009 -S31508003F94A369226A134321688A6884480240134342 -S31508003FA48B602568824B9D4233D0824B9D4244D018 -S31508003FB4814B9D425FD0814B9D4200D17DE0804B71 -S31508003FC49D427CD07F4B9D427BD07F4B9D427AD0CD -S31508003FD47E4B9D426DD0102380221202E1699142E4 -S31508003FE473D0022B00D1C3E000D8B3E0042B00D170 -S31508003FF4CAE0082B00D0D3E06168480880231B0276 -S315080040049C466044FEF780FC0004000CE86000202F -S3150800401485E06F4B1A6B03231340012B09D0002B41 -S3150800402405D0022B07D0032B45D01023D4E7002351 -S31508004034D2E70423D0E70823CEE7654B1B6BC022DF -S31508004044920213408022520293420ED009D980224A -S31508004054920293420BD0C0229202934209D10223C0 -S31508004064BAE7002B05D10023B6E70423B4E70823EF -S31508004074B2E71023B0E7564B1B6BC022120313405A -S315080040848022D20293420ED009D980221203934287 -S315080040940BD0C0221203934209D102239CE7002BBA -S315080040A405D1002398E7042396E7082394E7102309 -S315080040B492E7002390E702238EE700238CE7002388 -S315080040C48AE7002388E7002386E7022B28D00FD93E -S315080040D4042B30D0082B3AD16368580880235B0236 -S315080040E49C4660446168FEF70FFC83B200200CE02E -S315080040F4002B2CD1FFF776FE400063685B08C018D6 -S315080041046168FEF701FC83B200200F22190091436F -S315080041140A005B1007210B4013432268D36070BD65 -S31508004124636858082B4B9C4660446168FEF7ECFBB1 -S3150800413483B20020E9E7FFF743FD400063685B08A4 -S31508004144C0186168FEF7E0FB83B20020DDE70120B2 -S315080041540023DAE7002B23D1FFF744FE61684B08F6 -S31508004164C018FEF7D1FB0004000CE8600020D6E76F -S3150800417461684808184B9C466044FEF7C5FB000472 -S31508004184000CE8600020CAE7FFF71AFD61684B08CF -S31508004194C018FEF7B9FB0004000CE8600020BEE76F -S315080041A40120BCE7F369FFEFFFCFFFFFFFF4FFFF32 -S315080041B4003801400044004000480040004C0040DC -S315080041C4005000400014014000180140001C014042 -S315080041D4001002400024F40000127A00436ADB0748 -S315080041E406D5026853682C490B40816A0B43536011 -S315080041F4436A9B0706D50268536828490B40C16A77 -S315080042040B435360436A5B0706D50268536824491F -S315080042140B40016B0B435360436A1B0706D50268C0 -S31508004224536820490B40416B0B435360436ADB06D2 -S3150800423406D5026893681C490B40816B0B4393604F -S31508004244436A9B0606D50268936818490B40C16BF6 -S315080042540B439360436A5B060BD50268536814499B -S315080042640B40016C0B43536080235B03026C9A4238 -S315080042740AD0436A1B0606D5026853680D490B40E3 -S31508004284816C0B4353607047026853680A490B40B4 -S31508004294416C0B435360ECE7FFFFFDFFFFFFFEFF96 -S315080042A4FFFFFBFFFF7FFFFFFFEFFFFFFFDFFFFFC0 -S315080042B4FFFFEFFFFFFFF7FFFFFF9FFFF0B5C646BF -S315080042C400B505000F0016009846069C2B68DB69A6 -S315080042D43A009A4313005A425341B3421ED1631C0F -S315080042E4F4D0002C05D0FEF719FE4346C01A8442C2 -S315080042F4ECD22A6813680B490B4013602A68936842 -S31508004304A331FF318B43936020236922AB540132D6 -S31508004314AB5400224833EA54032000E0002004BCCE -S315080043249046F0BD5FFEFFFFF0B585B004000F00B0 -S3150800433416001D006A23C35C202B02D0022005B098 -S31508004344F0BD002900D181E0002A00D180E0802355 -S315080043545B0182689A4205D06823E35C012B08D185 -S315080043640220ECE70369002BF6D1CB07F4D501202C -S31508004374E5E701226823E2540023E36621326A331F -S31508004384E254FEF7CBFD03905823E6520233E65275 -S31508004394A36880225201934208D0002B15D12369C1 -S315080043A4002B0ED1FF225C33E25212E02369002B64 -S315080043B403D1294A5C33E2520BE0FF225C23E25222 -S315080043C407E07F225C23E25203E0802252059342EF -S315080043D402D05C23E65A10E02369002B03D17F221E -S315080043E45C33E252F5E73F225C23E252F1E72368A5 -S315080043F49B8CF2B213403B7001375A23E35A9BB2A3 -S31508004404002B1BD05A22A35A013B9BB2A3520095F8 -S31508004414039B002220212000FFF750FF002819D112 -S3150800442480235B01A2689A42E1D12369002BDED17D -S3150800443423689B8C33403B800237DEE720226A33AD -S31508004444E2540022023BE254002078E7012076E792 -S31508004454012074E7032072E7FF01000030B583B03A -S3150800446404000023C366FEF759FD050023681A4AAB -S31508004474934210D0194A93420DD0194A93420AD04E -S3150800448420236922A3540132A35400224833E25458 -S31508004494002003B030BD1B681B0710D423681B68B3 -S315080044A45B07EDD50F4B00932B0000228021C9032F -S315080044B42000FFF703FF0028E2D00320E9E7094BB1 -S315080044C400932B000022802189032000FFF7F6FEC3 -S315080044D40028E3D00320DCE700380140004400400C -S315080044E400480040FFFFFF0110B5041E30D06923C1 -S315080044F4C35C002B22D024226923E2542268136861 -S3150800450401218B4313602000FFF72CFD012814D0EA -S31508004514636A002B18D1226853680E490B4053600E -S31508004524226893682A218B43936022681368293981 -S315080045340B4313602000FFF791FF10BD0022683378 -S31508004544C254FFF70DFDD6E72000FFF747FEE2E762 -S315080045540120F2E7FFB7FFFF114B1A6801210A434E -S315080045641A605A680F4802405A601A680E48024090 -S315080045741A601A680D4802401A605A680C480240C4 -S315080045845A60DA6A0F208243DA621A6B09480240D3 -S315080045941A635A6B8A435A6300229A607047C04664 -S315080045A4001002400CB8FF08FFFFF6FEFFFFFBFFF2 -S315080045B4FFFFC0FFACFEF0FF00B599B001230B93D3 -S315080045C405220C92033A1492802252021592A022D2 -S315080045D49203169217930BA8FFF776F8002800D0D3 -S315080045E4FEE707230793053B0893002309930A93D9 -S315080045F4012107A8FFF72EFB002800D0FEE70223B7 -S315080046040093002303936846FFF7FCFB002800D0B9 -S31508004614FEE719B000BD10B5FEF768FCFFF7CCFF3E -S31508004624FEF722FC00F09FF810BD10B5FFF7F3FF64 -S31508004634FEF790FBFEF720FCFEF710FCFAE70000F5 -S31508004644F0B58BB0314B9A6901252A439A619A6968 -S315080046542A400092009A59698022920211435961AC -S31508004664596911400191019958698024E40220434B -S3150800467458615969214002910299D9691143D9614E -S31508004684D9690A400392039ADA69802189040A439C -S31508004694DA61DB690B400493049B002200210520A0 -S315080046A44042FEF7D9FE0022002102204042FEF7CE -S315080046B4D3FE0022002101204042FEF7CDFE20232E -S315080046C4059306950024079408949027FF0505A9E1 -S315080046D43800FEF725FF0C23059302260696079451 -S315080046E40894099505A93800FEF71AFFC0239B000C -S315080046F4059306960794032308930133099305A99A -S315080047040348FEF70DFF0BB0F0BDC046001002408B -S31508004714000400480D4885460D480E490E4A0023F4 -S3150800472402E0D458C4500433C4188C42F9D30B4A53 -S315080047340B4C002301E013600432A242FBD3FFF7BB -S315080047440BFF00F02DF8FFF770FFFEE7008000204E -S31508004754C0000020C400002068480008C4000020E7 -S315080047640C020020FEE710B5FFF736FBFA21890094 -S31508004774FEF7CAF8FEF7A2FE0420FEF7BBFE0022E7 -S31508004784002101204042FEF767FE10BD10B5FEF772 -S31508004794C5FB10BD10B5FEF7B9FBFEF7BCFE10BD90 -S315080047A470B500260C4D0D4C641BA410A64209D105 -S315080047B4002600F019F80A4D0A4C641BA410A642F8 -S315080047C405D170BDB300EB5898470136EEE7B30040 -S315080047D4EB5898470136F2E7604800086048000835 -S315080047E46048000864480008F8B5C046F8BC08BC28 -S315080047F49E467047F8B5C046F8BC08BC9E46704746 -S3150800480402030405060708090A0B0C0D0E0F1010FF -S315080048140102030405060708090A0B0C0D0E0F10FE -S3150800482405020602060307030803090309040A0422 -S315080048340B040C040C050D050E050F050F061006D2 -S31508004844100710080000000000000000010203041D -S3110800485406070809000000000102030422 -S30908004860ED28000829 -S30908004864C52800084D -S3090800486800127A00B2 -S7050800471992 +S31508002A04524110467047FFE701B5002000F006F86A +S31508002A1402BDC0460029F7D076E770477047C0461E +S31508002A2410B50948094B0360E1231B0243600023E0 +S31508002A348360C36003610C2242618361C3610362DC +S31508002A44436201F0E5FB10BD080100200044004084 +S31508002A54F0B5DE46574680B585B082468B46029267 +S31508002A64039301F053F8FA218900FFF74DFF01900B +S31508002A74002501E00135EDB2112D20D8134B6A006B +S31508002A84D65C9B185F78F419013453465C432100DD +S31508002A940198FFF7BFFF0029ECD121000198FFF741 +S31508002AA433FF80B25B461880013880B2084B9842DF +S31508002AB4E0D8029B1E70039B1F70012000E00020D3 +S31508002AC405B00CBC92469B46F0BDC0464C45000872 +S31508002AD4FF030000F0B5D64600B58CB000256B465A +S31508002AE4DD852D276F44002600233B706B462C2278 +S31508002AF49B181E703A002E216944FA204000FFF7FD +S31508002B04A7FF1C4C1C4B236026766676A676012303 +S31508002B149A46E37626776677A560E5603B78013BB7 +S31508002B241B0423616B462C229B181B78013B1B054F +S31508002B3463616B46DB8D6360200000F022F906951D +S31508002B440795534608930D4B019302950C4B039333 +S31508002B54042304930595534609930D330A9301A94F +S31508002B64200000F0B5F9200000F038FA0CB004BCD7 +S31508002B749246F0BDE000002000640040E0CC00006E +S31508002B84E0FF000010B5010000230122044801F00B +S31508002B945FFA002801D0002010BD0130FCE7C046CA +S31508002BA40801002010B5FFF73BFFFFF793FF10BDA0 +S31508002BB4BFF34F8F034A044BDA60BFF34F8FC04607 +S31508002BC4FDE7C0460400FA0500ED00E010B5214B08 +S31508002BD41B78002B16D12048FFF7D4FF012800D014 +S31508002BE410BD1D4B1B78013BDBB23F2BF8D801F017 +S31508002BF461FC1A4B18600122164B1A700022184BF6 +S31508002C041A70EDE7164B1B7801331348C018FFF703 +S31508002C14B9FF01280AD001F04DFC104B1B68643338 +S31508002C249842DDD900220B4B1A70D9E70C4A13785F +S31508002C340133DBB21370084A12789342D0D10021CB +S31508002C44044A1170044A5278FF2AC9D1022BC7D103 +S31508002C54FFF7AEFFB901002078010020BC0100206F +S31508002C64BA01002000B58BB001AB03AA00210F48B6 +S31508002C7400F0E3F9002806D10D4B039A9A4204D0D2 +S31508002C840023012B08D00BB000BD059B002B01D0F7 +S31508002C940023F6E70123F4E701AB1B78FF2BF2D1F7 +S31508002CA4079B022BEFD1FFF783FFC046E000002005 +S31508002CB46706000010B5FFF789FFFFF7D3FF10BDBD +S31508002CC410B5002220219020C00500F08BFB10BD12 +S31508002CD410B501F0EFFB04000F4B1B68C31AF4226E +S31508002CE4FF3293420ED90D4B1B78002B0BD1F33AC6 +S31508002CF4FF3A0A4B1A7020219020C00500F072FB97 +S31508002D04054B1C6010BD0022044B1A70202190202C +S31508002D14C00500F067FBF3E7C4010020C0010020EA +S31508002D2410B5040000F0ECFEFA218900FFF7ECFD6B +S31508002D3400F058FA002221000120404200F020FA4F +S31508002D44002010BD10B5064A136810210B43136002 +S31508002D540020FFF7E5FF01F007FB002010BDC04681 +S31508002D6400200240024A1368013313607047C046C4 +S31508002D74C8010020014B18687047C046C8010020E6 +S31508002D84704770B5041E00D1A0E02023C35C002B55 +S31508002D941AD02268136802218B431360FFF7EAFFEF +S31508002DA4050023685A68920711D5FFF7E3FF401B0D +S31508002DB40A28F6D9626A80239B02134363620522B2 +S31508002DC42023E254012070BDFFF7DAFFE1E71A6811 +S31508002DD401210A431A60FFF7CDFF050023685A68E4 +S31508002DE4D2070ED4FFF7C6FF401B0A28F6D9626A33 +S31508002DF480239B021343636205222023E2540120A5 +S31508002E04E1E7227E012A3ED01A6880218A431A60A5 +S31508002E14637E012B3CD02268136840218B431360E0 +S31508002E24A37E012B3AD02268136820218B431360B2 +S31508002E34E37E012B38D02268136810210B431360F4 +S31508002E44237F012B36D02268136808218B4313602D +S31508002E54637F012B34D02268136804218B431360E3 +S31508002E642168A368E268134322691343626913431A +S31508002E746268013A1343CB6100236362012220335B +S31508002E84E25400209FE71A6880210A431A60BFE7C4 +S31508002E942268136840210B431360C1E7226813684C +S31508002EA420210B431360C3E72268136810218B4360 +S31508002EB41360C5E72268136808210B431360C7E744 +S31508002EC42268136804210B431360C9E701207AE7D3 +S31508002ED430B502682023C35C013BDBB2012B06D95B +S31508002EE4426A8023DB0213434362012030BD8024F7 +S31508002EF4A40010590123184310511F204C6920407F +S31508002F0483408725AD005059DC4320405051C86999 +S31508002F14002818D1103D505920405051C86805045E +S31508002F2448680004000C054348694830C0008550C9 +S31508002F348868050408680004000C05434869483095 +S31508002F44C00010184560C86901281AD08869002885 +S31508002F5432D18125AD0050592040505108690028C6 +S31508002F6430D18525AD00505904405451096A0129C8 +S31508002F742ED08021890053580120834353500020C2 +S31508002F84B4E78325AD005059184350510868050421 +S31508002F9448680004000C054348694830C000855059 +S31508002FA488680504C8680004000C05434869483065 +S31508002FB4C00010184560C9E78125AD00505918436B +S31508002FC45051CBE78524A400105918431051CDE776 +S31508002FD487218900505803435350CAE770B5040043 +S31508002FE42023C35C012B06D0426A80231B031343A8 +S31508002FF44362012070BD02221F33C254026813685B +S3150800300401218B431360FFF7B5FE050023685B684F +S31508003014DB070ED5FFF7AEFE401B0A28F6D9626A0F +S3150800302480239B021343636205222023E254012072 +S31508003034E0E7002363620020DCE770B52024045D22 +S31508003044013CE4B2012C06D9426A8023DB0213430D +S315080030544362012070BD002977D10468E468A40797 +S315080030646CD00C001B3424010568655904242C40D3 +S31508003074946075D10C001B34240105686459640DE9 +S3150800308414600C001B34240105686659760801256A +S315080030943540D56005682D196E680F2535401561CC +S315080030A405682D196E68360AFF2535409561056849 +S315080030B4AC4664446468240C54610A010468A41880 +S315080030C4B934FF3424681C700468A418B934FF346E +S315080030D42468240A5C700468A418B934FF34246884 +S315080030E4240C9C700468A418B934FF342468240E8C +S315080030F4DC700468A418BD34FF3424681C710468A1 +S31508003104A418BD34FF342468240A5C710468A4181E +S31508003114BD34FF342468240C9C710468A4466244B4 +S31508003124BD32FF321268120EDA71002920D1026804 +S31508003134D36820310B43D36000208BE7426A80238F +S315080031449B0313434362012084E704682469A407A4 +S3150800315487D1426A80239B0313434362012079E79C +S315080031640C001B34240105686459E408546088E794 +S315080031740268136920210B43136100206AE70000E3 +S3150800318470B5002811DB8308144DC0339B005C59C5 +S3150800319403221040C000FC3216008640B44389015D +S315080031A40A40824022435A5170BDC0B20F230340DD +S315080031B4083B9B0806339B00094A944663445D68AA +S315080031C403221040C000FF2422008240954389014F +S315080031D40C4084402C435C60E6E7C04600E100E00E +S315080031E400ED00E001380A4B98420FD8094A5060AE +S315080031F40948036A1B021B0AC02109060B4303621A +S315080032040023936007331360002070470120FCE70E +S31508003214FFFFFF0010E000E000ED00E0042805D001 +S31508003224054A136804218B4313607047024A1368DE +S3150800323404210B431360F8E710E000E0704710B56B +S31508003244FFF7FCFF10BD0000F0B5C64600B582B016 +S31508003254002381E0DF080837BF003E5807251D40D4 +S31508003264AD000F24AC40A6430C69AC402500354399 +S315080032743D5081E0856864462540CE68BE403543A6 +S31508003284856045682C004546AC434D682E090125E2 +S3150800329435409D402C434460C46865462C408D687F +S315080032A4BD402C43C4604C68E40054D5464DAE6911 +S315080032B401242643AE61AD692C400194019C9C0807 +S315080032C4A51CAD00414EAE5903271F40BD000F276C +S315080032D4AF40BE439027FF05B84268D03C4FB8427A +S315080032E467D03C4FB84266D03B4FB84265D03B4F97 +S315080032F4B8425AD00527AF403D0035430234A400EE +S31508003304324EA551364C2568D44326002E404F68C4 +S31508003314FF0301D515432E00314D2E606D682E002E +S3150800332426404F68BF0301D515432E002C4D6E6009 +S31508003334AD682E0026404F68FF0201D515432E00BE +S31508003344274DAE60ED682C404E68B60201D52A4377 +S315080033541400234AD46001330A681400DC402ED0D2 +S3150800336401249C40A0462240F5D04D68022D00D188 +S3150800337470E7122D00D16DE706685F0003252C005F +S31508003384BC40E443A44626404C682540BD4035432A +S3150800339405604D686E1E012E00D86BE7112D00D10D +S315080033A468E7122D00D077E764E70427A3E7002728 +S315080033B4A1E701279FE702279DE703279BE702B0BA +S315080033C404BC9046F0BDC04600100240000001400F +S315080033D40004004800080048000C00480010004893 +S315080033E400040140002A01D1816270478161FCE72B +S315080033F470B582B004000368DB073BD5C34B5A6833 +S315080034040C231340042B2DD0C04B5A680C231340AD +S31508003414082B1ED06368012B50D0002B55D1BB4B0B +S315080034241A68BB490A401A601A68BA490A401A60F7 +S315080034346368002B61D0FFF79DFC0500B34B1B683E +S315080034449B0317D4FFF796FC401B6428F6D9032080 +S315080034543BE2AE4B5B68C022520213408022520202 +S315080034649342D7D1A94B1B689B0303D56368002BEA +S3150800347400D127E223689B0767D5A44B5B680C2217 +S315080034841A4251D0A14B5A680C231340082B42D038 +S31508003494E368002B7BD09D4A136801210B43136014 +S315080034A4FFF768FC0500994B1B689B0766D4FFF772 +S315080034B461FC401B0228F6D9032006E2934A1168E8 +S315080034C480235B020B431360B2E7052B09D08F4BAD +S315080034D41A688F490A401A601A688E490A401A609F +S315080034E4A6E78A4B19688022D2020A431A60196829 +S315080034F4802252020A431A609AE7FFF73BFC05004A +S31508003504824B1B689B03B5D5FFF734FC401B642824 +S31508003514F6D90320D9E17D4B5B68C02252021340D9 +S31508003524802212029342B3D1784B1B689B0704D5B9 +S31508003534E368012B01D00120C7E174490B68F8221E +S3150800354493432269D20013430B6023681B0744D5AF +S31508003554E369002B2ED06D4A536A01210B4353624B +S31508003564FFF708FC0500694B5B6A9B0735D4FFF730 +S3150800357401FC401B0228F6D90320A6E163490B681F +S31508003584F82293432269D20013430B60DDE75F4AAE +S31508003594136801218B431360FFF7ECFB05005B4BB3 +S315080035A41B689B07D1D5FFF7E5FB401B0228F6D914 +S315080035B403208AE1554A536A01218B435362FFF774 +S315080035C4D9FB0500514B5B6A9B0706D5FFF7D2FB6F +S315080035D4401B0228F6D9032077E123685B0775D5D3 +S315080035E44A4BDB69DB000BD4484AD1698020400585 +S315080035F40143D161D36903400193019B012500E08E +S315080036040025454B1B68DB051FD5A368012B30D065 +S31508003614002B34D13D4B1A6A01218A431A621A6A6D +S3150800362403318A431A62A368002B3ED0FFF7A2FB34 +S315080036340600364B1B6A9B0746D4FFF79BFB801B89 +S31508003644364B9842F5D903203FE1334A1168802363 +S315080036545B000B431360FFF78DFB06002E4B1B68BC +S31508003664DB05D2D4FFF786FB801B6428F6D9032032 +S315080036742BE1264A136A01210B431362D3E7052B70 +S3150800368409D0224B1A6A01218A431A621A6A03313B +S315080036948A431A62C7E71D4B1A6A04210A431A6247 +S315080036A41A6A03390A431A62BDE7FFF763FB060081 +S315080036B4164B1B6A9B0707D5FFF75CFB801B174B4A +S315080036C49842F5D9032000E1012D29D02368DB06A9 +S315080036D458D56369012B29D0053347D00B4B5A6B50 +S315080036E404210A435A635A6B03398A435A63FFF718 +S315080036F441FB0500054B5B6B9B0743D5FFF73AFB7C +S31508003704401B0228F6D90320DFE0C0460010024019 +S31508003714FFFFFEFFFFFFFBFF007000408813000059 +S315080037246C4AD3696C490B40D361CFE7694B5A6B32 +S3150800373404210A435A635A6B03390A435A63FFF747 +S3150800374419FB0500634B5B6B9B0706D4FFF712FB5B +S31508003754401B0228F6D90320B7E05E494B6BF822D2 +S315080037649343A269D20013434B630BE0594A536B44 +S3150800377404218B435363536BF4318B43A169C9000A +S315080037840B43536323689B0645D5524B5A680C234F +S3150800379413400C2B23D04F4B5A680C231340082B89 +S315080037A416D0236A002B23D04A4A516B80235B0226 +S315080037B40B435363FFF7DEFA0500464B5B6BDB03EB +S315080037C429D4FFF7D7FA401B0228F6D903207CE050 +S315080037D4404B5B68C022520213409342E1D13D4BF1 +S315080037E45B6BDB0317D5236A012B14D001206CE02D +S315080037F4384A536B39490B405363FFF7BBFA050044 +S31508003804344B5B6BDB0306D5FFF7B4FA401B02287F +S31508003814F6D9032059E0636A002B55D02D4A51681E +S315080038240C220A40082A52D0022B12D0294A1368BD +S315080038342B490B401360FFF79DFA0400254B1B68C0 +S315080038449B013DD5FFF796FA001B0228F6D90320FB +S315080038543BE0204A136822490B401360FFF78AFAB3 +S3150800386405001C4B1B689B0106D5FFF783FA401B12 +S315080038740228F6D9032028E0164BDA6A0F218A4370 +S31508003884216B0A43DA625A6816490A40E16AA06A51 +S3150800389401430A435A601968802252040A431A608B +S315080038A4FFF768FA04000B4B1B689B0106D4FFF765 +S315080038B461FA001B0228F6D9032006E0002004E07A +S315080038C4002002E0012000E0002002B070BD0120C3 +S315080038D4FBE7C04600100240FFFFFFEFFFFFFEFFB5 +S315080038E4FFFFFFFEFF7FC2FF30B589B004AA1F4B56 +S315080038F4180032C832C2110002680A606A461033D8 +S3150800390413CB13C21B681360194B5A680C23134054 +S31508003914082B04D00C2B26D0164809B030BD910CC0 +S315080039240F23194004A8445C1149C96A0B40694627 +S31508003934C95CC0235B021A4080235B029A4208D002 +S31508003944C0235B029A4209D00A48FEF7DDFF6043AA +S31508003954E3E70848FEF7D8FF6043DEE70648FEF7C4 +S31508003964D3FF6043D9E70448D7E7C0462C45000887 +S315080039740010024000127A00006CDC0270B50500E3 +S315080039840C00594B1A68012313408B420BD2564933 +S315080039940B680122934323430B600B681A40944235 +S315080039A401D001209DE02B689B0706D54F4A536832 +S315080039B4F0218B43A9680B4353602B68DB0764D556 +S315080039C46B68012B25D0022B29D0032B2DD0474A0F +S315080039D41268920700D485E044494A680320824362 +S315080039E413434B60FFF7C6F906006B68012B22D018 +S315080039F4022B2ED0032B3AD03C4B5B680C221A427E +S31508003A0443D0FFF7B7F9801B394B9842F4D9032002 +S31508003A1467E0364A12689203DED4012061E0334A2D +S31508003A2412689201D8D401205BE0304A526BD20363 +S31508003A34D2D4012055E02D4B5A680C231340042B8D +S31508003A4423D0FFF797F9801B294B9842F3D9032013 +S31508003A5447E0264B5A680C231340082B15D0FFF76A +S31508003A6489F9801B224B9842F3D9032039E01F4B6E +S31508003A745A680C2313400C2B07D0FFF77BF9801BDD +S31508003A841B4B9842F3D903202BE0174B1A680123E2 +S31508003A9413409C420BD214490B68012293432343D7 +S31508003AA40B600B681A40944201D0012019E02B6878 +S31508003AB45B0706D50D4A53680E490B40E9680B4364 +S31508003AC45360FFF711FF094B5A6812090F23134075 +S31508003AD4094AD35CD840094B18600020FFF720F93F +S31508003AE4002070BD0120FCE70020024000100240BF +S31508003AF488130000FFF8FFFF70450008C000002087 +S31508003B04014B18687047C046C000002010B5FFF77F +S31508003B14F7FF044B5A68120A07231340024AD35C78 +S31508003B24D84010BD001002408045000870B582B028 +S31508003B3404000368DB0335D54B4BDB69DB0066D42D +S31508003B44494AD169802040050143D161D3690340BC +S31508003B540193019B0125454B1B68DB0559D5424B4F +S31508003B641B6AC0229200134013D061680A4093422C +S31508003B740FD03D4B186A3E4A02401E6A802149020C +S31508003B8431431962196A3B4E314019621A62C307F6 +S31508003B9453D4354A136A36490B4061680B4313629A +S31508003BA4012D59D02368DB0706D52F4A136B032149 +S31508003BB48B43A1680B43136323689B0706D52A4ADC +S31508003BC4136B2D490B40E1680B43136323685B03AE +S31508003BD406D5254A136B29490B4021690B43136300 +S31508003BE423689B0606D5204A136B10218B4361690B +S31508003BF40B43136323685B0533D51B4A136B4021B8 +S31508003C048B43A1690B431363002002B070BD0025E2 +S31508003C14A1E7164A116880235B000B431360FFF77C +S31508003C24A9F80600114B1B68DB0598D4FFF7A2F820 +S31508003C34801B6428F6D90320E7E7FFF79BF80600FC +S31508003C44094B1B6A9B07A4D4FFF794F8801B0C4BFB +S31508003C549842F5D90320D8E7D3690A490B40D361BA +S31508003C64A0E70020D1E7C0460010024000700040DB +S31508003C74FFFCFFFFFFFFFEFFFFFFFCFFFFFFF3FF55 +S31508003C8488130000FFFFFFEF7047000070B50400BB +S31508003C9483680269134342691343C269134301687B +S31508003CA40A688A48024013430B60226853688849A5 +S31508003CB40B40E1680B435360A369226A13432168E6 +S31508003CC48A688448024013438B602568824B9D4268 +S31508003CD433D0824B9D4244D0814B9D425FD0814B69 +S31508003CE49D4200D17DE0804B9D427CD07F4B9D4216 +S31508003CF47BD07F4B9D427AD07E4B9D426DD010235C +S31508003D0480221202E169914273D0022B00D1C3E0EA +S31508003D1400D8B3E0042B00D1CAE0082B00D0D3E0C6 +S31508003D246168480880231B029C466044FEF7ECFD44 +S31508003D340004000CE860002085E06F4B1A6B03232F +S31508003D441340012B09D0002B05D0022B07D0032BD7 +S31508003D5445D01023D4E70023D2E70423D0E7082369 +S31508003D64CEE7654B1B6BC022920213408022520297 +S31508003D7493420ED009D98022920293420BD0C022D4 +S31508003D849202934209D10223BAE7002B05D10023F4 +S31508003D94B6E70423B4E70823B2E71023B0E7564B83 +S31508003DA41B6BC022120313408022D20293420ED008 +S31508003DB409D98022120393420BD0C02212039342DC +S31508003DC409D102239CE7002B05D1002398E7042395 +S31508003DD496E7082394E7102392E7002390E7022343 +S31508003DE48EE700238CE700238AE7002388E700236D +S31508003DF486E7022B28D00FD9042B30D0082B3AD1CA +S31508003E046368580880235B029C4660446168FEF731 +S31508003E147BFD83B200200CE0002B2CD1FFF776FE45 +S31508003E24400063685B08C0186168FEF76DFD83B2DD +S31508003E3400200F22190091430A005B1007210B404A +S31508003E4413432268D36070BD636858082B4B9C469D +S31508003E5460446168FEF758FD83B20020E9E7FFF77E +S31508003E6443FD400063685B08C0186168FEF74CFDB3 +S31508003E7483B20020DDE701200023DAE7002B23D1F3 +S31508003E84FFF744FE61684B08C018FEF73DFD0004C1 +S31508003E94000CE8600020D6E761684808184B9C4681 +S31508003EA46044FEF731FD0004000CE8600020CAE710 +S31508003EB4FFF71AFD61684B08C018FEF725FD0004D4 +S31508003EC4000CE8600020BEE70120BCE7F369FFEFB9 +S31508003ED4FFCFFFFFFFF4FFFF003801400044004016 +S31508003EE400480040004C00400050004000140140C7 +S31508003EF400180140001C0140001002400024F40090 +S31508003F0400127A00436ADB0706D5026853682C490F +S31508003F140B40816A0B435360436A9B0706D50268C4 +S31508003F24536828490B40C16A0B435360436A5B07CD +S31508003F3406D50268536824490B40016B0B4353604A +S31508003F44436A1B0706D50268536820490B40416B30 +S31508003F540B435360436ADB0606D5026893681C491B +S31508003F640B40816B0B439360436A9B0606D5026834 +S31508003F74936818490B40C16B0B439360436A5B060D +S31508003F840BD50268536814490B40016C0B43536004 +S31508003F9480235B03026C9A420AD0436A1B0606D541 +S31508003FA4026853680D490B40816C0B435360704794 +S31508003FB4026853680A490B40416C0B435360ECE7AB +S31508003FC4FFFFFDFFFFFFFEFFFFFFFBFFFF7FFFFF76 +S31508003FD4FFEFFFFFFFDFFFFFFFFFEFFFFFFFF7FF27 +S31508003FE4FFFF9FFFF0B5C64600B505000F00160093 +S31508003FF49846069C2B68DB693A009A4313005A4292 +S315080040045341B3421ED1631CF4D0002C05D0FEF7ED +S31508004014B1FE4346C01A8442ECD22A6813680B4997 +S315080040240B4013602A689368A331FF318B4393606E +S3150800403420236922AB540132AB5400224833EA5494 +S31508004044032000E0002004BC9046F0BD5FFEFFFF9D +S31508004054F0B585B004000F0016001D006A23C35C82 +S31508004064202B02D0022005B0F0BD002900D181E042 +S31508004074002A00D180E080235B0182689A4205D039 +S315080040846823E35C012B08D10220ECE70369002BC3 +S31508004094F6D1CB07F4D50120E5E701226823E254DB +S315080040A40023E36621326A33E254FEF763FE039083 +S315080040B45823E6520233E652A368802252019342F9 +S315080040C408D0002B15D12369002B0ED1FF225C33AF +S315080040D4E25212E02369002B03D1294A5C33E252E7 +S315080040E40BE0FF225C23E25207E07F225C23E252C4 +S315080040F403E080225205934202D05C23E65A10E07C +S315080041042369002B03D17F225C33E252F5E73F2271 +S315080041145C23E252F1E723689B8CF2B213403B70AE +S3150800412401375A23E35A9BB2002B1BD05A22A35AAF +S31508004134013B9BB2A3520095039B00222021200039 +S31508004144FFF750FF002819D180235B01A2689A4221 +S31508004154E1D12369002BDED123689B8C33403B8055 +S315080041640237DEE720226A33E2540022023BE25495 +S31508004174002078E7012076E7012074E7032072E738 +S31508004184FF01000030B583B004000023C366FEF7C0 +S31508004194F1FD050023681A4A934210D0194A93423E +S315080041A40DD0194A93420AD020236922A354013216 +S315080041B4A35400224833E254002003B030BD1B68E0 +S315080041C41B0710D423681B685B07EDD50F4B0093B8 +S315080041D42B0000228021C9032000FFF703FF0028D3 +S315080041E4E2D00320E9E7094B00932B000022802143 +S315080041F489032000FFF7F6FE0028E3D00320DCE756 +S31508004204003801400044004000480040FFFFFF0119 +S3150800421410B5041E30D06923C35C002B22D0242297 +S315080042246923E2542268136801218B431360200032 +S31508004234FFF72CFD012814D0636A002B18D12268D5 +S3150800424453680E490B405360226893682A218B43AE +S3150800425493602268136829390B4313602000FFF71B +S3150800426491FF10BD00226833C254FFF70DFDD6E74F +S315080042742000FFF747FEE2E70120F2E7FFB7FFFF5A +S31508004284114B1A6801210A431A605A680F480240FA +S315080042945A601A680E4802401A601A680D480240A5 +S315080042A41A605A680C4802405A60DA6A0F20824338 +S315080042B4DA621A6B094802401A635A6B8A435A63CC +S315080042C400229A607047C046001002400CB8FF08E6 +S315080042D4FFFFF6FEFFFFFBFFFFFFC0FFACFEF0FF8C +S315080042E400B599B001230B9305220C92033A149254 +S315080042F4802252021592A0229203169217930BA8B3 +S31508004304FFF776F8002800D0FEE707230793053B56 +S315080043140893002309930A93012107A8FFF72EFBA4 +S31508004324002800D0FEE7022300930023039368467F +S31508004334FFF7FCFB002800D0FEE719B000BD10B556 +S31508004344FEF700FDFFF7CCFFFEF7BAFC00F09FF876 +S3150800435410BD10B5FFF7F3FFFEF724FCFEF7B8FC13 +S31508004364FEF7A8FCFAE70000F0B58BB0314B9A6962 +S3150800437401252A439A619A692A400092009A596942 +S315080043848022920211435961596911400191019998 +S3150800439458698024E40220435861596921400291EE +S315080043A40299D9691143D961D9690A400392039AD2 +S315080043B4DA69802189040A43DA61DB690B400493CC +S315080043C4049B0022002105204042FEF7D9FE002264 +S315080043D4002102204042FEF7D3FE002200210120DC +S315080043E44042FEF7CDFE2023059306950024079444 +S315080043F408949027FF0505A93800FEF725FF0C2326 +S3150800440405930226069607940894099505A9380083 +S31508004414FEF71AFFC0239B00059306960794032309 +S3150800442408930133099305A90348FEF70DFF0BB05A +S31508004434F0BDC04600100240000400480D488546F9 +S315080044440D480E490E4A002302E0D458C4500433DA +S31508004454C4188C42F9D30B4A0B4C002301E01360B1 +S315080044640432A242FBD3FFF70BFF00F02DF8FFF747 +S3150800447470FFFEE700800020C0000020C400002072 +S3150800448490450008C4000020CC010020FEE710B5C2 +S31508004494FFF736FBFA218900FEF736FAFEF7A2FE85 +S315080044A40420FEF7BBFE0022002101204042FEF74D +S315080044B467FE10BD10B5FEF75DFC10BD10B5FEF71E +S315080044C451FCFEF7BCFE10BD70B500260C4D0D4C14 +S315080044D4641BA410A64209D1002600F019F80A4D57 +S315080044E40A4C641BA410A64205D170BDB300EB5850 +S315080044F498470136EEE7B300EB5898470136F2E7DA +S315080045048845000888450008884500088C45000841 +S31508004514F8B5C046F8BC08BC9E467047F8B5C04610 +S30D08004524F8BC08BC9E4670476E +S3150800452C02030405060708090A0B0C0D0E0F1010DA +S3150800453C0102030405060708090A0B0C0D0E0F10D9 +S3150800454C05020602060307030803090309040A04FD +S3150800455C0B040C040C050D050E050F050F061006AD +S3150800456C10071008000000000000000001020304F8 +S3110800457C060708090000000001020304FD +S30908004588ED28000804 +S3090800458CC528000828 +S3090800459000127A008D +S705080044416D diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/boot.c b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/boot.c index 09955d06..502e7443 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/boot.c +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/boot.c @@ -127,10 +127,13 @@ static void BootComRs232Init(void) rs232Handle.Instance = USART2; rs232Handle.Init.BaudRate = BOOT_COM_RS232_BAUDRATE; rs232Handle.Init.WordLength = UART_WORDLENGTH_8B; - rs232Handle.Init.StopBits = UART_STOPBITS_1; - rs232Handle.Init.Parity = UART_PARITY_NONE; - rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.StopBits = UART_STOPBITS_1; + rs232Handle.Init.Parity = UART_PARITY_NONE; + rs232Handle.Init.Mode = UART_MODE_TX_RX; + rs232Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + rs232Handle.Init.OverSampling = UART_OVERSAMPLING_16; + rs232Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + rs232Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; /* Initialize the UART peripheral. */ HAL_UART_Init(&rs232Handle); } /*** end of BootComRs232Init ***/ @@ -285,9 +288,6 @@ static const tCanBusTiming canTiming[] = /** \brief CAN handle to be used in API calls. */ static CAN_HandleTypeDef canHandle; -/** \brief Message buffer for receiving CAN messages. */ -static CanRxMsgTypeDef canRxMessage; - /************************************************************************************//** ** \brief Search algorithm to match the desired baudrate to a possible bus @@ -341,7 +341,7 @@ static void BootComCanInit(void) { unsigned short prescaler = 0; unsigned char tseg1 = 0, tseg2 = 0; - CAN_FilterConfTypeDef filterConfig; + CAN_FilterTypeDef filterConfig; unsigned long rxMsgId = BOOT_COM_CAN_RX_MSG_ID; unsigned long rxFilterId, rxFilterMask; @@ -350,18 +350,16 @@ static void BootComCanInit(void) /* set the CAN controller configuration. */ canHandle.Instance = CAN; - canHandle.pTxMsg = NULL; - canHandle.pRxMsg = &canRxMessage; - canHandle.Init.TTCM = DISABLE; - canHandle.Init.ABOM = DISABLE; - canHandle.Init.AWUM = DISABLE; - canHandle.Init.NART = DISABLE; - canHandle.Init.RFLM = DISABLE; - canHandle.Init.TXFP = DISABLE; + canHandle.Init.TimeTriggeredMode = DISABLE; + canHandle.Init.AutoBusOff = DISABLE; + canHandle.Init.AutoWakeUp = DISABLE; + canHandle.Init.AutoRetransmission = ENABLE; + canHandle.Init.ReceiveFifoLocked = DISABLE; + canHandle.Init.TransmitFifoPriority = DISABLE; canHandle.Init.Mode = CAN_MODE_NORMAL; - canHandle.Init.SJW = CAN_SJW_1TQ; - canHandle.Init.BS1 = ((unsigned long)tseg1 - 1) << CAN_BTR_TS1_Pos; - canHandle.Init.BS2 = ((unsigned long)tseg2 - 1) << CAN_BTR_TS2_Pos; + canHandle.Init.SyncJumpWidth = CAN_SJW_1TQ; + canHandle.Init.TimeSeg1 = ((unsigned long)tseg1 - 1) << CAN_BTR_TS1_Pos; + canHandle.Init.TimeSeg2 = ((unsigned long)tseg2 - 1) << CAN_BTR_TS2_Pos; canHandle.Init.Prescaler = prescaler; /* initialize the CAN controller. this only fails if the CAN controller hardware is * faulty. no need to evaluate the return value as there is nothing we can do about @@ -386,20 +384,20 @@ static void BootComCanInit(void) /* configure the reception filter. note that the implementation of this function * always returns HAL_OK, so no need to evaluate the return value. */ - filterConfig.FilterNumber = 0; + filterConfig.FilterBank = 0; filterConfig.FilterMode = CAN_FILTERMODE_IDMASK; filterConfig.FilterScale = CAN_FILTERSCALE_32BIT; filterConfig.FilterIdHigh = (rxFilterId >> 16) & 0x0000FFFFu; filterConfig.FilterIdLow = rxFilterId & 0x0000FFFFu; filterConfig.FilterMaskIdHigh = (rxFilterMask >> 16) & 0x0000FFFFu; filterConfig.FilterMaskIdLow = rxFilterMask & 0x0000FFFFu; - filterConfig.FilterFIFOAssignment = 0; + filterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; filterConfig.FilterActivation = ENABLE; - /* the bank number is don't care for STM32F3 devices as it only supports one CAN - * controller. - */ - filterConfig.BankNumber = 14; + filterConfig.SlaveStartFilterBank = 14; (void)HAL_CAN_ConfigFilter(&canHandle, &filterConfig); + /* start the CAN peripheral. no need to evaluate the return value as there is nothing + * we can do about a faulty CAN controller. */ + (void)HAL_CAN_Start(&canHandle); } /*** end of BootComCanInit ***/ @@ -413,16 +411,18 @@ static void BootComCanCheckActivationRequest(void) { unsigned long rxMsgId = BOOT_COM_CAN_RX_MSG_ID; unsigned char packetIdMatches = 0; + CAN_RxHeaderTypeDef rxMsgHeader; + unsigned char rxMsgData[8]; /* poll for received CAN messages that await processing. */ - if (HAL_CAN_Receive(&canHandle, CAN_FIFO0, 0) == HAL_OK) + if (HAL_CAN_GetRxMessage(&canHandle, CAN_RX_FIFO0, &rxMsgHeader, rxMsgData) == HAL_OK) { /* check if this message has the configured CAN packet identifier. */ if ((rxMsgId & 0x80000000) == 0) { /* was an 11-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->StdId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_STD) ) + if ( (rxMsgHeader.StdId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_STD) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -433,8 +433,8 @@ static void BootComCanCheckActivationRequest(void) /* negate the ID-type bit */ rxMsgId &= ~0x80000000; /* was an 29-bit CAN message received that matches? */ - if ( (canHandle.pRxMsg->ExtId == rxMsgId) && - (canHandle.pRxMsg->IDE == CAN_ID_EXT) ) + if ( (rxMsgHeader.ExtId == rxMsgId) && + (rxMsgHeader.IDE == CAN_ID_EXT) ) { /* set flag that a packet with a matching CAN identifier was received. */ packetIdMatches = 1; @@ -445,7 +445,7 @@ static void BootComCanCheckActivationRequest(void) if (packetIdMatches == 1) { /* check if this was an XCP CONNECT command */ - if ((canHandle.pRxMsg->Data[0] == 0xff) && (canHandle.pRxMsg->DLC == 2)) + if ((rxMsgData[0] == 0xff) && (rxMsgHeader.DLC == 2)) { /* connection request received so start the bootloader */ BootActivate(); diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h index 32a59ff8..861e1215 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_TrueStudio/Prog/lib/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -2,43 +2,25 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.8.1 - * @date 14-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention * - *

  • L+s^4w~=iXKA@?eG2PSBu&EnmM0TT%PPT}s$(FZlu{*sCcVmzSSyKl4q1@)Ix39xh{}cw4hieZ?|Cp zl~I;cGQVs|aoOUM0)nZaFcl=(4yVUV6%;{njp0a&&n(N$*0_ukXfxD|G2%gc`7rS? zQ-ur{567wxu{L)m*b@2}L2>OpakkQ8x0W7HaVXmjPc%J5Ys zmE35?PBD^|PY)R~9hsHE-=v&+DdqyuCF6$AsO}zeSl^IDqUwpX0`CyZ@QT%tF#x0u zwY_=e`G2DZ2`z$)!4<>ylDtxUhl<(h7f1Xr)RN`c{HNWr9C}|rv?U9R7P;o<!5PxM*P>^7Tt8&MwHyE6Fa+V*@fS$Sy5alMMrMmn(xXPCCW<*>D1#z29bx(H%7bxYP^U(&Vb8fD5JQc%B7x{Ok|Oy-+_}E zuN!DGLjVX*&T(95j4d=qMQR$7tV!s7#`x2Wagj6wl7-J&TxzgJB_@lbw9bWM~a|YmhxHTE@e#D#g$(5H(@n;%i*+0;Z9CfwJ)F>`nVvAZB8@qwW zj^t+Jo#K4-uVKiVxI<#@sB93Zgh;fuoKaa$v%ow?Prz)i+Y6)m+5^~nA-4~-?z9)RRl zQ{m(P=Zl4kq#NP9tMR43G+8XPE!A5rOX_K(ALDzBG0CD-ViPd#(h#xP{3xVK3Q_VaLP_1U}HqFf$gQRnignLttBF#lYYby~x zh34`n$Xb=JYi?;pZA*SbQxUH3#^`-ml0X}vPY4Axv z6*0yapLpO0P4;1wzDuZa)KR3yI;ijggqNn0)R^+WUayG1U&-yM>Oz9`YwT!^>d z-9M#Yzq@~OzkYZBWOUvK_PhN6)qb}hz<_>t=yGspx0BKaeuqU(I^;VnYGVKIu!Qag zew>=VsF6Ak)MueSyPCGNq?r2I;+hgYg{UHnVn<&O->k|lE~;KrO&62c)s!U|Yp6$O zkrt++mj7xMaXMYKU~B3Bh-<-0SiXc;Cm#drBT-=<(QLy zBNi1GA%lfXLAyQp5ng)gZAiZ!=~mfo{R6tKMD5R%NSmR>*3-@09{m=*1Ba(%ckHN9 zH>vtOgzs-XbpPKEv8rfJ4It(IZ@bSOjO2;-7I1K=?e$Y#zHHuDL!2P{5x$h3(~m6gG*z5V)j z#@_YY99|C@&1c}p^aqkwpSaTIpe&WpqKV)}EhTI+QhsIN;o7WJxH>BpMj0ttwvHmA zwT>dLwvHm|Z5<;TfVLduBO_SU(}+h#)5|#SHjqsM^QNfx*x+khdeVX=Mbt=W&n0=e z?vtpAU{U9z$w^m}7d2Pb*40(u^Ix*rQPXjilYECpu*jRDku1cVxz;qR|-^Th2X( zq))hUm;j+n`-7e~CS79CK)CRzKgeTBx|u-w=``6?|HV9Vks*qa&(tdU&}fH)uH-YY ztUL?hi+eC>F&VD#LR2J$?kS`~Acf+TMj@;K-)TRS@oyD;X=fT1Q*VK@lemnP!RU-^ zl6^=xy}G)xRgJX`!8yGLev8xZ7|{5R0g@r3DFKQxXCh`UAdxlqhT}K%0YVo8g?}2hcHy7;)W1p( zV^N~trPXN<#}^fiVNv>KKDDk!4Y&mGUPCxt0vILFZ}+c@_Zd^@54qEWbpPH?H4mICl2E8yWi$ zHIZ&yr>q6;53$hHM=26}$udeBK8pIY^zoIWLx-flbc7$E!}oO^(#DK|I_zh7S1D$eNHJl`qEP=&4`s=EMpusS|kl( zBc5{6!`RKCYtgrMi!KuX(umrPJ^xIiNhN-1RBLw;U~29D(x}$%T9HET7uag;zF6q6 z;Hc3d=?@=_SLQv!*k5%W&Kqcn+4*pKW$9(dGJd}a7m42uB}hc6#rsXi%^_2KOV{H4 zCii?YyRRt4+iZcv(lSa98AIk+c+{wp)c6cS#3sh(OqG>-zCTrFVe<;(pPOPQvT@LY z#FV=H+%)S1(q#!?szrWonpZ?RYoL^Vy8PU7rIP7YII3@dju;0w|8CInHZcAm$7g*>0o$Mei6r&)AWxf23i}K&ktR;u$S=t~$a7164=7K9 zIvZ>28ym3Z^)Rj|Wfi_4J2?#TuflXve+t6;o)TZ+MTyakJaR)Ra(T^gHkTy~f zzJo^S6FO>b8K@C--1^-Hepd)CeJ71P3XMo~e1?hZ&i#Mee~>n?qfdE!E56mIYa|-t zY3>u#y)^INPbGf{Nk|tec^N8^_>57%S8MP7w^c&wa3Y-bEMq_FDoGol60vVxv@G)L z2k+PtrVFin2(3sGipYlzknh+|aFG@9V$`dnMNy=rB805xFbbS5Yttb&lf!-%U@Ns$ z(?NSehEUTUs7VrFjF65B;~{-4L)ZtM+^g#(7UF63iEe8ro#3QOZDU<+B`qm3enVKo z451cdGIDA(&}lka)Iuu3E@9=V4qTP2t3`bNO6{d-YJr=ns$IkQ<}iFWmnzH%=tCki zMx(}~!c0gP=OLW)JkD#*(5jAkqSs7dBK>XxZB|#?-shGvd=fMw(XHMNF5~a>W1V;0 zi0i(QLEbcR6!c<9O|K(lzkri-QdO3s0jl!4V^vW-+?K@2d}^QzNx-T)W9f-{_~c_L z%LZf#X>G1(YAIW(k4pGA+@3(t-wI{YqTNwpccjR@2xDKwHHgPZmrchIz5PLX{j93W zPmH!PLY4NhxI$1v59z0=zZ&hsNK=ym$Hc?YqAAjn9rv?+4^5plQ)+6eS5q`z6+Hk| zPnVc%qlBI|Ko1hx>NDKsmzdIo+1)49MK%7YFf3A)1L28nFf3hNG&`pmmKetO)7Ld7 z+i0P$r=bXmZ9QZXfL~*pFq4eyL!qtQqeWY!sVaoFKjDMK$4cX(1sl?q))tao_5Y&F zEhb!pNy_*d%8(R78td>CNPIz+Y9!;gnd~DdOE@mkAW*aR)vnu2W5!c@8PXYh%}7=k z6+Tp^riAwmZhyv-m+(OsJ37|hU1#cr5T=DBq`nnRZp1d7fMoM&^wUB=S5Yo)3M-T@ zh`1657qx90cJH>0unz#59FE(JTqPOUXu;HICZZ-aIvr7kqUtw{?G!CoTui$%A}L<7 zc#+tlA>t=eG>)R~Qi>*usEeYG@E?#_?B+;`AZ9u3kt;bVFPGjsj-ZPLG;JU>6VQn) zY>k1j#0Zj|=Tx*-m8d(SnVLd7n3vX8wbUT5NlhwkX=u!;ZD~e|qNWsAh+9Ok0Zx5h z+*DEDyt29}x3;OelJ;FAYorRIGuLNTG*#!r%EeUqmL_& zR>rZg_rRNmDI9^ihz<;mJ&{=4P$wDCSX7g1XzQiUBpvSn+bXEFPJrwzY$D{=*!JXR(y)LS*UxoV4?@(f=v74bLi5{Z%h6&=#BQ-rt zO@>6HXYF`sA2JKfkO7us%I|bpAH?eC`*I)i2`YT*2oLWm0wpDb7;(Lf+Ko1gC z*Ij3*YGMaScmBK~a2J%38sk%`;iWUVM~NCqg*PKCc#E-bbv4qWmtIq0hI$*sKeA&_ z#!P5IBI-)~$UbW>8Q@6(hN#Qo*nZ1^F~5{l*G%aHS`&cEPAAZB3FLjppY1bdQ}PQ) zwh1pJCKEok4^O1zy_CG73AazJZe+aMK71slj>K&&*m!sJlnj+hG`8@L?!`4zaOp1qJ|AG4Txq`85HXAh z-b#r$eOcRBQ%Oa6iNQXMbiIwzz3mv|8x3(uwuiBljbrQhzK$pa?BX8^SCwH;XKPDs zU2|~#(otOyDh!Q}w+pKEOD}^(*K+%8;5Q9iN&Vr_l~lDuLo2CE7Q2f|58X_Ey&?5{W4sr9$gcUV zhSaOMFj7NhWWYv^?e8*n;Vi~}z}h&sX!CZ|?5bbyX=thzJvqj| z;FbhF0oE-s73zM{&`w?cMuyakvmVE0EKvjEP=-eK_0LcPngyq2`faemnfaCP;RBgu z=H8oNHG?+xph6oz!;crF)&PYd2M|JV+>ic>cmzDQcDuVY$k57>A`T`}S%Bpq>?&g*V zehQqC%+46rK~ad;Mh4U@tJCaQAin%_&6blTugm zarmT^Ro@D9r5KSjY&{%G5*SzGEMaYPb!9_+6|O^Vt;c;hY#dhLQzyoxGPCg&aYfM| zy-b^a@?GKoakU@7r(qIt-SWoIv8FT|ca1)SA~55J(d`*cs?lUx!g)P4a$08jaUNka zN0519JOv?aH+J0W%tO&C^V(+90$BVN;9lm&N$4S=dg6Q*!WG~?@_4Cws*OVROB$7z^$f5)DbInsh& z1aENp#6B(>M{ql>sN?&-Fv|M3iW{Zz?t^H^9Y)0 zkI^Tf`cI@^ZA`&TJ9}HyOJUPLeJtv~Q4QXvJMcBKR}n)0h1<+gEiZim1!}>N(mQvi z&T%uo)fAh;aIlU^9DRCwtLd0o$Dt}u1dy>$hJsuq(>n-Vkm~~}mqKGeZ;>=-V-aZ$ zmW(P^m6a^Rt)Tq2;n+DB`6qn82a-q<`ZUyS!*ksvCe7k^4+SAfz)umb{f4orCuoJI z{PnOxE?x#1A03{MDP%kqGD-@%jE@d?6-pUD8VWL!d|x0e{T2qQ%ZLuRw;)TZE2~kC z>~GHVJnFfL8S?556a{sF<|z7}79FG!#T8ag!r40))s@=SrV* z5Uedh+pKoum*L<*7g&~g)eD&iO#7Y^H-09nYRCjkZ~h46#Z)!zxG1O^`=_d#ni`tQ z8tTii=38Bsk)FxWu4*9Mf@nvBbS5%%s-O_U{BlswYD6zCp z-=3Q?ei7uI1Bm){+;eBldEK2_ej+L1F9Rm zcMZsdTP2#%5no-+4pN@m_;AYex)?xfcN!mI&6Cy>@nx60zsC?KTWbDm&GIzO=d7iX z+@E>W7$IxiL{u9MPt*IK`Q&M&{3Em}=ChK0FHi_)wHjDygs`uR zT2&ey%-{q@8r)#yQ3!Ph=E3^SL21JYgZ8lkZJ&|(&`ECzSF>A8Z$KfI%OHd0A^h0i z$0J?l7iMMlzadVLu(>Rp(uyMJiDR;;9vg6~t7!E{O=@gvXwmoNa5b&DtiJ4wG8l-w z=gJWIKIfG!4b+eU)u>TxX`rtnsC#o<5x0mpv^1bnB2R7vF~wI4ghCdjO|WG(vq!ig zGd@WqtZ2Y)pYsgp>g(`UJfo*CpEG7QV?xd_BR*NCP*?sAZom{>RLio;MtA+n2KF}| zmSMCp+_eegJyPXqgh>c)KJ0|zujWxB;6*wWn&!Rvh%-hv=V0HJyNZ4A7Pz~V$BhMd zUx^9!-+8(F>66gfcqZs-usjr>Kt@=-5BD_YU|T-e;?@ViiYQb%bbAxG*!jDtsWLB` z-6O#&v3V`Rr(pFZ$*QtNW3?H(*0f5+AK$0@Ptl6gRLPlw&O_fO+2r$Gv!a<`z)RBUH$pi8ay!l3b(}a zF<@F^g-{oY(#MYb7#1}bAX^log^E;FbI_pP5Dw3!j;g{&hx8}*xAeW8OkmVrz zPHz~(MzL?fy2R3?dc!br3P}}%+lfMiRBsq&&v^n;r6UDt@VJ`)`}ry|Np&y69!U0q zluX!!p@DX~%~^;bhi)@RVh?~oi?i9_{&GlYc`>1{~BVM~OcT^Xc^hY{)yU|5qciy2Gv zqSC2NEmjOfy9$o)G=_~~pMYJ7hgs|+!8Wnnf$$fw{h-b^#%RPgwj`iCE;g|;{(>nv5N%4XyZ4yaw zyO849BT*P6K^wyJkm6Um6wm90QM$Ii68mC5F@=p_o4}^buSxKUDP=rK(0Sw}Anxx& z$iytgH~+`pmjG5(Tz}u?-J6$}yq7(MB#;n7Ab@O2Lr z=`@oy{$)-Odr=HC4E=$}!e!2YK}>{vc7z7aC~dFaZzy%iP~)YsNkA{A~S z3rB%Y{ej2AEglOeD;Cgt?fhbigpQsg+NNsQQ5?| za~OU`Ro$wv*Tv{mtq;Eqtg2rVei^d7rnWl#wqo_#$X8?PYb)0@)-0{5#cAsdq7Z*! zv!gl^ZRvV+GHXwq5?PCMvW(e$ez~;sBy5BQV2S`R+r=7+%b@eLC3XDVVV!*L2hKoS(UpOY}wNwocaK$e+fxuAs$WGv(M9vyB?hhxh( zt@-Y^hsqvB z-LajVZ2S)NQKfCuq0-ovkuH`<-&6%{5(?TOd5AY{po+JqY@m^wvY%`=HTibDw zZI;NcH(8AZyxJrMRftq(>pL#yZ%NG0Fy;&=;h5BP@6WM=mW9fz1LJ;B;{LeRxDya} z2PW^w68Cp3@SUnGP1=|iW(M@MO2X}hFVPCo75LQ7Ym%IyatE5&|7|5rl64(Dl?7fg zjyFbOa~KOe$IMoxK*z;4RAL(&9ox4PsFauD*`lfJ_2v{#MGLR7aM1cOWu;4|PnugO ztKb@!9J^|1^|EEv%L;Mu@|jDqN%hLYBZrM%QrWO-$@E!MmQ=Bk`(NOwSzRSKh<-_9 z-SQ@Gp|b>s6|bH=V}8ZF*)y8zu)t)={K|$E)lEw}uE~C|n3v$dy7(LTUk3Yaea3a_7b0IdO$~tKf2?@&-(%ZXlcS zvv`R5T*_zEEUm!!>hhWu6|?FZR#n!b95X+@%6aAbmI zYpRslr@%D|I)7zDb>*^1;6GVas~T$>D{3lL=g1p(od2-1-NMR{hMLulHB~C$CyeZJ zyRiuq(iA=g_^L%f9ivt6w_59w8|ye}4Ks`}H#_p}*bQoKK{#mrhQ^wW)e%(1SnVE- zYSxCemDt)rV}8ns>Ugrfjwf$v{OFPE#~`5dkMnoF5GA*zYIH? ztjAa4eT5n8y{wwOY2x>@=64Su zM^+`R70NgI^JkH`(E-$nd>Z$?&Az5*^vAb1i@RnNMJFsh>ck?3U-YNDnsHpej`B^o znrZQLOF!>Z<^AhsBy*2`{proY*jV8g{psDQ5pV1xvUCkqO(OkG6ff`+)d~CV4Mjer z9KF6!-ye6QFZ4l+J(N{OqUs5a^o+{8?ipQ)aRByoM%y3)(LJI5=$=sV(mkQ_=JkZi zi|z@PH?JpDUYhrW3gSplsD$!*Ld6q3p&b9Uj2phZ+3}^SmNtu9BO>u|QkhBte&f=X z+3YA=<|c>c#ef3GOjYJRhZHR1rmo3FSgVAQy&*Dkr7-d?E%zkH9HzS1HY+wx{qk%` zCDfuLUo_S9G?mfcF40dw?C7J`EwpcUTKxA){LipGjD})A$5x$=ASTo+J3G%d%WSic zZ5E+*o~jJi3p1N(qLb1QQc0*^HAEeUB(tYG^R}4 z#$l^U%SM1<#26-~XPAVo3jx$eSqqkDEkNN>TCZY5$WdB#8u0zuYNVz1Luk)#RRHzscO~qQ(imdNxMIO5LX-_NiP_^_`i?vO&<{-<$gKc%T zsPKDQkxr|vNNEYxR&Kx=Hq;IFYkz|!KhCo`d)k(&McdQ1{E}_UR+@;?F4v93$6alO zbhAd{*~$v3IK);6maD053v^a1qwI0j!rO)IHDQ0ePxCt&4ZH$n{(qwrDR@RGxQI=& zBFCA4W`N_A<5{2@DkCfo>TK^sf{rkiNbVp(Xch@c1%-|?*s*&lYA)$SYPJbA&x4v! zDhSGkbU=umoKq}UZocJ*gf8ktnm!Ynu0$)6G^G~^B?BC%7e&Moz>7PPoQ0N3u)9DG zhFl<>gaJ%BB`E&PQ50?LM2apEik>G$Not@_rWSQhp1x9I-{;8#&FNl_laFU=v693! zohXS1g_bW!i^@!(!%jmV#9+s7ug*jkPbFBTSVE4K4Ar@<6Uoc8mFnE-BYD=q62~cV z5}3WHJ^hNEglzR2MNvk!lQ86PClL;$nVy}R<|L*$cD9n}&Q2ux1|j(~kQ~Yab#_Ls zbr zJae2enWV|dCz0kl#~x`ppr4s4jhd0FQ}sgC zZE#*sw?R+0!H5d4g>aHmyUy$pkd_W4``F{r2aAbNHw zw~QP4{BjF#I&!$#lfMkp-VcMpv3xSY@?4r1sa7IPtsRO3)pqL~4sdR&SNxb>@k7FL zgs{D83Owvs+Z?G|x>t1#3Xc#9-rXdW){WKJ-d+fx>B*dN>jE8In3qbtKHBA z==wzHIvRAbKiL_AzU|zh=>0Bn%;C!3lH%RHCqkUYz@$=%9_<|@4fUf+Iz2tw@2z` z^SgE{D@9pUonzx2c(!cpA|Od+>6CpgjppD5IMDzG%>x_}S8HduRZchK;VR+bxfmWE z=w9h?tMKp##e*e5(( zlo+i@-HeC*!oy#&{a2(^?Pi(5NLMw(dCBBKl}OSD(`~A@kTCF$Vqmgkj#0e`j~HyM zcTpx}J$3XV-7&(%2b{tkwMe&1=ZBVD%oQ%~_g3f@cgK`CO?ddBns^&oF5S&iV!d#2 z8Rx{p-s_eralY`-eBpXGONkxA#fP5NDk;(Z7T^Cs*!WK{x~h|;=uUeG{9M?$D5PpT z?$O!ZMjRd&4q`_fWd6zqqZ3CQyk@-VHRIXH{H2g~IP0)%Ot25Csm)!3w%3KWJ*r0^ zTO`Q-dOxPbjQ_RV{wTElTG5t=H46c(qRPs~UJj+%MY*}y+M&qtCIkJbOAtIQL)nbm z)qW581w}=xRPIw}mEKNK0%NN0I%o=JLKaO=|U*6klCSGsZExq$%e^p|? zh_1hpTf)0+RN5Jme@9|}jIqn!q35ddtux}@FLA%9I1hO{#bTdv8wHnY z<{DoEEuB?}p}!gD7O$zVh@Q%iL*>+la-ajb1jl>Ym@SIRpjThD0!-?Hu0`ck%xbm2 zf_;9u-nAlSf8Y@~6T2;1#&LMI=w|&d&eQ1z3xIm|Jnmw9 z9)GEoP_1sYJg=duXJtAL?|Die!{Tje>}%z?9ADeV<%n1GaXC(_$K?pL`EfZOG_s}w zyVqc?g`A?(=5aaV-THAk;@A3dIpWvmaXI4M)}}<_dw}C|BtRR-<%nn7$K{BB>&NAY zUz^9}h(N8LelXgSepVPEs<7yaG-9ven$z1<;s65%Dhp6$``N|-i)ngDI+9M#N zc9ZNmO0i>Rp|!o5u*V>jmEt`Hp*}xREUO-aP*&A`8G}$CajEUXKeWC=I&2rp7T@1w z?bwNSq3o2Q505pXj{Y>gwhZmS{g|x+`{PGk&ww4iF**5O$Glvv^tnq_=UtQRrffy_ z7arL-QJ`0DF^*l}ysyU;-8Xl#xZ7@y$C%*}-4Sd24;E8lr?7)*O)zD#z(=-<6l1(w zG4c~(gvZePWJ={cWmK`Rt*4jm5T2{uV^kgV`P4nVY={1w>gf5xD~+CBw%D>>FU$~= ztEZREJCwTBUN$+SJKWdyi0;7kPVjEt*YAevv)8FE9)E^>%{VSj7@-t*{Gv#(w(81PBu$7l9`Q|u?n#%rIR?EnTJP6Id;C|l;NDF9JN2j zi`|aLTH*0JG=7p%is1C7!ct)rPCggIW+LqtD#LqrkKx_Zo4Lf>$^6h+!01+p|A^j0 z7i~{(W>0UX+TSs}mwHcc=6WTN|DrcjwNiM3k?zlYr}cw(!u^^5R5j+Ue0E}gX1pD2 zQS6BM{SHnuaje}^Y5tJrcdn{8mGzzMB=m6-OM3N#8ETJAauPy#%Xfm=_SW7`(&+qt zgPmYLDp}j6-A$Y5m)(*3(`32vHf`gTI%cWr)vRu6s9D`uQ>6la!p|?q9H?c0Gn4{!<`&#Ny^V6vV2{!BUmHENm$bce zS0J|Aws~J;7do=9mA*#dL`~*#lU{=YHdc)uaMm-Z2#77kxCZ_S3cLx7(QwC8Ipu=U_8` zFEyfY6?Z{SbChz#*k*06NPQ=5 zu5YUuoG%I!?_n3u6wd4jVo~+Y}TpCprN=(cO%JRAC_MY`Jd6K&~*bL!HZ} z4#(?e3=|6kKNbdf#7j40V1zL6d;o3bB+K9Z7?>yw{8NsU>xL;XLm0SB9d=}OLk3O~ z27V$8I8dQSx=uybvUwamBKeAsBa%yn0c;hE-4^n3T1$bNeDr4b;^J)K;(fMy+33Y& z`Cd-q*xYm{3G>U-#L3PWhF0#whU~TYtM0|&Ug7XJ=$up>ItgP_(^J#4a4-rO4yr`! zLd9=9s`s(5bRK*8vaLYZDt_Z(AQ{{B!-l$87-0SJTK7__LSf+BU;s*0kb>-CW?-2U z=3Aywv1}_Njj)h49L(LMdW5d)=@IJb5$fp?>gf>*x959$gnD{}npPb?YWWDP2tM#s zg#&aJt!czLS5PIH#_(RBuzC@tcI#rnL^on#vaoQC>Q9P22e}(@F-y4E>zy+%X9z#7jJj^b#bV*& zHFOJPWubMzWvGW|734VPaMe!uSJz>vrJ1d>y5x^beas(M3q#v54xJ(^gkYIsV3St} z%Y&SOcEa(tRmAgK6Y`uu2~1e4PcD4MXE+HZuw#c}T$6Szr`+DE?ARN6?ARVVw#Sa` zv17xvbB`U{W5-5YY6mb@8#gpIRj&$Lt9wIXB~sREQ%x<`Wr- zW6E|RJFu0i+G9nk>i1Pu{kd#2hjXd80MtAE{WWZ}V;L{t*|XDJ&rWjyihoXZdG#S_D zsVPLx$MNL+!v&Y@wB>n!%@I_X*2bjOYJnwNl6K57e>Pm&oSHJ=@jC zw_W|bx-|_|)$u2ZgkLgg?#wAOM^tzlyY!q}q|Pl`TH6#Z7yt9&hp#x-nO+6z9cARS za+HzN_EARS6@8SE>>jYg^>zfGx@L71n-OYL@a9JudC+hb&RLZRoS*`?d6bcOw|Z@tI%KO;L#>Q$jT;kvU zXZTN8T3L1Gvbs8M5h9S1rFC^2PVt{Z{~1+vY^{pd#b#AqefVu)RsEXq%aG+YwbkLb z6|2`qz8X_sTe+sOW@$}rP16PjQHZ~=g;0&VbbXaVtvpc^Z&SuW#g{h@+9;5;cuY?` ztnxokR8{^k)c9%Hd3kwyv-T~WNJGAyeDn(}He&Nvc8l*!AruP%zajzX_s4{;0m|6f z)QLhED>S@C8Zxr25bUdsof!QRiT-a&1ggh>eJ94gOk)3v8A?`y->j_6wLMm5^^!w* zwqyJz&6nzF=&>>}a6M)0k{&CQTWfXZPFg)yW{;IwzpgPY^pCqlL+?4+FBEMD0KY}@fjvu|`BB}J*KVEBxb^y%FX`y%(sb_Uy<`Z_r&ScYJa zRPBwOok!5=LXbKeO&u4~&q=_35@m%r*}=9k6>Dq>c9|HCmN=$kF1BHeLH3ibXTU+FwD^5tOL{T!0W7*Gf*u+*Z^F@shL6zOLsM zv&Cpcd`9@ewsSh&ypOVMO|Sn{_iEXy8z<7MWwq$l5{T~AvZ8yn#7p;T$(z@!B`>;H zOWwR*EqQ6)t0jmdy;>4V^=efa;`wQ!^l`}>`nb+gDm07F|E4f94C1XaOvT%$iR{u^ zlBBZy6>2s`E-&4uRM&Blo-2{w%t&z<5VA_P%CWT_7v<#=<aF>-$IPR0`i!X%_U(QGHtg=)S?5~y;&mvE_YIFp0<`TcTp!_ltlxM){Pw7(Hn zJAu#j65(GppZU4@B|6#;%sjVBwBO`GyvbA|Nzk<&C)r&RnaKHLwRUaqxHN{9%+=QW!ci;zf?}iYPC#P_M=-*&A5D7n z5h@*+1j~e)?{M=I+mGG#gc>b}4zvlkOU%0%vs4(2G#TmMfd<-L66sqWyHb=OtyOZf z;j#s{VffYi7CPaJaP6NhzuWX5(T;z9JN}vN_@}qyU)ao_wD(o8OV`sa#2tHS?xLX@ zMz=Y~geBuPjoEbQ9l0W&b6R>bSTyFL>U|4lUCWgNCl@y`)1j#3Nx}h)&|e5ZkpSrw zgoSVe9UXedUeV%jkFVqLDUdUmx+dc}6}M^3r$g`9D;jwbyzp_D0_s`- zHz=b+@5n_@7q@BfsHavu3zg@5I4i`W=#2&dKxEHjB zdqHcs7qo_Z!RbKS7Vd?u;a=Dp?uD)4Uf2@%WW+|5fdbHpjTitWNG;GA>OG=8F5apA zkO&=?NAesD7eG4vCUQl-SlHSZ3tN6sf{&RfP$fDO6fQoe3Xo209K!&SFJ`y)#q5?} z;DZ=G*Q@tP7IX2Qu3(q0r<;vio(*s<i)A|zjVF&d^Ql$B0%jPr?+`Xo=mIG@f$!eXvyZoJYehwjC=kxqp=Fr`K{_wq*s zI};f|Iumirvm7pfbfyuep0#iRq(jA%=UTV`(%DFudTxgcARW>Xxgu07ATbdtB*F!; z5za;sNR3YGXpje1w!}kdETXx zhN$Rd~Z~>$BPDL9>9)Neaj(5k_UPWV{Mt zv+2Y}N4+CT$aQ5)3JGmVVwv|11l#fx09$^+Y|Ws^39WrGzvUMQ93yQ?7t+q8yHkD- zqI@H>AHCn%#s@7PN`=d|v5XtBA7xjAi&0kqMfckD%?_yOH%@;ipvX#Y?v{?yjy z5w-^NzD4NB)mAtV%i#2my}Z-SZ`EA>FUaZ-UjuA7|sH!AY0?u~#(JUWL|Xtn@e#Rn7g0I|doPZXZJWqN(~a zSlh#Ku>M}P8N*C8jqO#4tn%BE9BI*)#;M=wY8c&O^&Zg+rZ3}$$w7zSu~+oR=fev` zkQa5)?_As{l<3eqaz#AnwDe>!1^_nYj*#DB@z9Sd4$O3z8{{cv^K3f&CiaTP$Wk&| zVDuxiz(|MQkt^akr==%@MPqJXotl3^oS>!EW;n44Qw!}&JduT<_VdBek3|s)| zTufN_ilA8(i{^X;K?{pc>t8TuxBP_AmfuinB`QunXXA!A=`<)HpNs@R^^ONqZ?byf zQ;3=05;5%x8q@NWU<+CXV}R(S=&Rl%#wh($1;(G@i~Ld5qAzMO2&F^s*h@TBCsIq# zXbKkMJ78v{>hj?^2)Ad#(>roeeB!x)POK+`MPsHofSCx@#UJBvgJwD+E#>1qqCegN z7&T7&yZDig8)VTDp7<;hAf2hW<#`EQgrq}6kt>3xS>s;NEQ&?*Eqn;oqZ5mU$|}?} zYupc2Uo4d*yBG;Y5G~W3ZgYhqsfD6h%QoDoxAezaqN^C4d)I~oc1Y>miDj=Vf zGJtf-6p+uTB6OAl@;M(jLeg2TfPB^pkPf4aTt56{NrWPj&NkfgWH12LyZ2~?aAsX~ zxp)emMRZ~#iFm3=Vm-;bkhicUd6E2@j9^jaEbAPpfR@8W=}9LRF$08fH&4yhV2r1E zxYl5#qItN~R$#4#YYo;~9MNL-%GNdlJPMnjCwa`hRX!~vjs$AhUoS%DVNnSooLbK!z!I*SQYPoZT&%jk%v z0XLgubYm$6pw%IGAK(xl9WoPpt;B0{osO1Oq4<;0@Wqz{eUmNzj4*sfc@f6|TZ2(d%@MZ-JD_C6Q}rUW6niwg42al#bVteW zLb^wIa5(CszrZd%T_Ey|#>K1zT+D;&V$4w$3%w&(#B%||#CjG2B3~|S=}8>X(SBFG z$3`0h4602>F!Nb2Ksx*;a*-DKVt(uw+u(uHoKEZ)0L0KxsNN$qP+U2<@iCo3+>wjX zQAi+=PNYUD6d<1AE1J=vfI_}u)udmP%F#P=v1%KP8x+uq^<=OT+|BhYI<|E2Cnw>H zu^s4}*Tugr3dbl!d~U{#oI>YZ1?2Mr^^4Do)h|9TSHJkYTK(eldi9IXo7FEqf24l# zd8hit=e_C|pAV{Ed_Jmv@%c;ji%(J=dqvA30I%j!r%=37joy)qABtxjJ$POUCij&ivF1GiRK>@7JEg1F&SRbUo;a5y<@NFkC(#h03S!>Nvgp;opA~spECqV zXTAdRc{*-{q(khnS9IK7zKv0DzCaP^#O6MtiT>ErqL_~ltUAqg*fwmt(6tY@eD)DO zpFPI(*<+J^_R)zxdz{~Ak5BU16M{bb7{_N%4EXFx33mUG50_yZzVL_k!F}k&^&zNf z9;0hxd95P#Kru#rm;y@e0U#LUCLGkqZiLT)cHt2F@IeqzDfkRQKqDcbVGz(^5YPw+ zXcPoA7~~FzfQH)r4`;0XQteC46#E=A-5#1?2Oztopq&I~nq?1!lt|rJLZnMZftd~7370CQ5hU6q- z^Vz{HuKc0`8`S!V1AN<;5=GYJ0z42?WneDURF>~#mRvup8H~ZS>`wH-Dn^kCk z-R#F`eRff?&+b1!C$--`96E4>3lTv0Vw&Pqz)k!(jkL1$RP8eWsu!m23er!Txe5R zkDxsRA%kN3u-^7C$fgY$KncJ}U&w$;vImOuuua9;Yvxb}`H%q>?0vHkGJy6#21Sqo z)Q>XgU(zE25y23!aqT2Sn>i%|d!KqfCiAuv!%7SuioHVRDp2$U|W_CaZKG)k3msDZ|#G?{>s z<`|SZ6H(es^4tAYk=_r*3UXC{`-n_?STX4DXCH?AoPw+pLRLvT=&X{_JgcOGq;pLa zt-8o%`O!x9Kwd}o$V2vENwCN4h3t`oUwh3gW{=*;9xO55M=5f?kEO^qs{q*pg#|9f zM%DifHkSS0VB_fj8*H5Te}Rnwb_r^y4$atNOL-+o$7FI8cc=`J)r;*C7#tnU4$Yd5 zWrwVk*d+rxoE2Ip9m|S6u-Io0lGG`&i#tAbI)SAD15n2ndkQzVgSD-HhbIw~ZGc@^ zY99_W;s}@!%5p-R;b>S=>=grM8Nnp!llCyrZ>U_|xT>aU zHaM*o9;L(bPqE>St8SW9)l{>#div_7>W1Z&Rn;>q*Uw!)qk1*4>Q2swlVfnV`px|C zH~kbn*8~mYXZWQ#ZNxcbtE;P;s+SS3>btazXG78As1J*y4?^| zcma-|nB7pfqM?#IH5rDmu@^mcIi^qvJcwsXUA;t9h(MOHDcdmi;MWbf8BxPotBRr}g`FL8!_u+7~;u_pjYbzU9hA9?0R=~*s9bx}P4K+;?hbM20 z5%h@;aBM?mqXZbBV)!<4()-adC=4oxG_DbrML6db8pdCu11_v?s9C-tCZrHu4{doQ zI%Ij>YKc<%?MD?E#*5MZP(Cf@$)Il1vSkg`jogpRFn|hTaQhp^hxip{lVX@0Rt5MX z(5G#L`ggpq} zma+FR(Gcca)#tjn<+(x6{s9Qpsr{(lw;s6 z@&(vZ70t*N70pn5Vi^}58^d2DxL2+>ub3{J8jIem$J#=F&2h2l!@=7?|D9>AqHkGE z3iUsn-YWW06)n(9VgLQ(rFikgId#UQdDB>{&ZumvUR@>XCn3LgLX7rHNa$2_NYTBo z%`l9Vh`?1z)JpC}r3i6fInywn$1f7V#DilP;OPj z!h!k_=yPXB_?tFqM#ap=h@n!bLZoA@@EiC=0=y9AFsQtoFSgw$b0gNothEu#FHd2( z4chiM{Q3@V_(p1G@xEbx#Mpp$q+XUB^3?@mKzLubQrSw%&RS>~&qiW_~C=!exeGM|np{M2gD+D`0m=1>pDdYdnih zs_7GJF#Q=p-lkX3Nl7Hp$tZQlEvSzcd4Wi7 ztN27U{#}cbDk>-ngZa~^oDhw(w~Dy7$uK^^ua|JwE1L^Hbm@J{8pHTDu>2MfMkwkY zZ66AgAFUN#j}5nAb=YL-2L#wveZ64>TcDevO!vSL0!dK}x(P}eY}ZdtX$ zEDG6gn_<);;O_wovwrOQiiqNheRat>!V|*@xie7%HV<{}xrQ;&!{#wnxuQA}$}5Jx zCKdEsUYx93q2be}%s2r}rLzFl)n)!gm?i;y42g1I6)se)n$so>5RuYilsh!xXci)!#8{dhQ=v=1l~=b2 zI0IHybj>f>W9>Ck6GmZd+oZYRyR8Lo!=$2U6 zs)V9!G10`AuM?9c3O!90d^8gkUR3a5Dh2+0Ju1Lh{5m*}`>v_4t*NR+vjbtZqM0{H z?r9kTOtNJ)D57u)@o6{0EQ&=gLey1gV>rJF@#A(H#>^HUM7RwHmqfboCMkVMikFF_ z>gRA^$sj+y*)WECxTA8sl43ZhWRSOS!6KvBptDgpjEoH{Dxdm&6kJhZJ?Rl+GXqgH zaNti2qd&s$1Ibc!n_k5 zX0|jSB4Nb1*m1wKO&$Xti7iZeK0uc7?*|M6|EhsJpQna~{RP4O4@Npmlz*fU>#GoK zc*rpDA3?C7ewmhFo(eH$w_)Hv5(2pZue!1!51>R8Ps5%h7Ve3XjcK^dNwUi;i zgfd&ERjyv98%q*u9(a5eAyCFe6dgr8eoRgJ#G^2(-4w0&`j&c3)utl5~bx<@h+Sj70m zlZNph5AgzYqJ(w2V7V&N{%Cjn5WlwLKB+3wF6gIxpMfv3P}sLwALu|8==>LC z(y@m^=+)8b?owfK+>3_sas;0Q_2`#EM#81T9(_F$P9uvFg~;}OgriC6MU4(=bfZ+q z^wNoK^$)~)PXr-s*e3K_AV~0d*5z<#W0|X8YPO1DNS|CL{xza@wAM!(C0@Z zfu^il=5-FMFp>acUy}|`P1~wvXns~nAF>K2scC}GsQ7@2bx~7g(;A^lGV>D%^+-&F z^ERxml44duT=?teA%JJP2(d0t;h0$wbsD3y_ok(=( zzUC730;0!X1uMkUGX92Ov56DiWRW=U`E46M)A|xf76tfQD=YC;O?9tC8qgPJ7_*@c<^YXK=o zH7Ybe1IV3#Sjb2MIl?sj{{SQlxk4b@0GS9Gk1EuV&j2|GkiPviWT9pF9|0t(NJB0G z#7;1br^Apd0XYVc@AcPV9t30?Am1w1kWAa~KL*Ix2586)fTa1M2_+hW5l8=GKn@?I zAwK}*2Y~ED4JI@jkk|)+yfj!tAPN5w(2M7WXowFfxB-xJhiOO-AU_A>is2f9FZ}-k zWa|hGnE=Q*=+4O_HRK%}kGutt7mv^o=$8LJK=zH+ko|!C9gx44X~-vljD*JRJ5oa? z-~^urK=z|H7A`Kp@mfCxWbe@$aupyS0CMLz4Y?JNA<)xrjn|N$0kQ&+brUq?aX@Ya z0Ld-akTHNH zA^5OkHDoRzGXa@6RYOh#kjDY}0+4YtHRP9o9EBWt!YmDW9gvNH^f^&O{s_qZfP4^! zOv^C*ICahV)odN+89>UBkDr*MA$ySHz5>WM=V{2ZfI#}jwD}tHDj*5S>qjrpkbQtm z1EgS~hP(sFg@F7i4A~C|=r-oE%LzW>0zX6D`QbYEm z?0puHk!NT~6H3wEC|6dTsUbT7Sq#X9wHophK&}B~-zp8kNV)$FK*p`r5afRUAe2Tg ztkaNvfYbo;HYzA2ElU260l5i~4>o8>YJ%baEg+?vG^7@gl5F(IZPt+8fUE$-IY&cI zgEVdjr0HA@`8pu)19HxJ8gc|U9fXqaf(tan-^=hX1LR*9X-F|3KLX^KZ)nH}K;8l5 zvWqoj1|TDHFgEl}4Ot1udO-SIsv%zoWH%ryzoj9&0P*+6nABw&vImfIKwiIGLtX@A z8z9z|8nQUY@c#mk!@sQ|9|MvMYjw=k8e;W^wg58q8VyMWzdFuuZSqjLYe5C1( z8ge!uX9ALYlZNaCi_>ZRScYDgg^QVhrkfMo90kg4{N*tX;pwx3`x(Y#k821Ib6pO|51!Bvo{f3~AQ$h^5FR!9 zCLpVy)DRy2nOkHSmA}-GBAg{z3CQVBX~^k-+)Bt^4dHo{e*xt6r!|B}KaT1T1MwLR z;mLk$0QvFr8p31u?f~SZ7c_*Y;(Y{2=tT|Txpl)(|34mv@I<&eK)(Bu4zmrA+W}eo zvWD;&wSNF|-YXiyW6nmyY8d;fhU^C9EI>G{E9DQ51iKTEN5c>v*!4F+E_z*u;aOV4 zVQb9!wTAGpt9n2(-p~-9L-iv-UJ65aPSiVqT=g3r22uKl48#nCH#LOEDy;^j|63Yz zJ|MRN@|Q4VHz4}~`Pn`lhGzuP(%JG`4dFRGYXO<`wubQhoO=KX{7yr7xXovPyZ{Jj zz-=0|yDj{(Xn324p)95!=03dC8%MEOhO<7cwiJRgc_BQVm-<_V&$5hLf~K41w|%C4 zV=!y5Z4G=bXl1TT44myx9^p1A^fcmaqNf#a9u1YYXub1lCypa6BMEUl8#MDx6~|u2 zk>NU}dB@xkw49{O>llr*X2>N$J98a>CkED~G+qJJropBH<597he@7-&k(>9y;EN;j zd6to5S>~rfbGStQH%4x|q0+pdmHN%VW=1!3QNV8}<(=X7n)6}Mc9(?41suZHSK9vZ zOM*U4RD*50>qEX<6=7_#B#Polyyr}Ni0Kz|%`E<*nsgmh!j z%oIAW1Dz#(m<*&OtG^aa*3+7v%ndANPO*#tB>7O#Oce_62ZaOk!xXO96xw#ibDG9pMViLMKtoESs1n<8 zN|o4S?XW7n86zdz$=ax?aP7PXsF59T8_NE%UP*ziMHMfb zi)JOtJo8#a9!I=KqfZXJe=TGV7T(VbL5q^z!>L6>o)m3y&n`Wse0tCxKg&~LJIy^c zlru}k&2}mBrD3sQ%B!7BlZQb?%d+kZnXbfmH)2GFw5`l%*Wz>2V7pdv!-lQdpWIv# zA2&y-3~4_ZG6x9m$ABBNIFsCr(!3de4_ZZ;>`a`!rX+rZ;a0lIDv!!j#zg6rFq{o69b9vy1d8nlA0JuaM$afPUNSp ze)>vN-OYKACk7g`Q-mJ2-W5G;zQ;|Eb8U*I=Q}Bfh#o14*>|8yVs;*w=f#&OQWCq5 zq?lH&64HYp3T0$(WU#9frJNG=pDs3Yw0j`K`>oXX)IV7}%8B z*Q-Y~dUk7=#~ciL^S&_pyMcaCeH8kXf|Ecd)RqM$ep&1z;nj}v48ZhRWcfFLX_^T_ z`Rl(lA(`aT+$AI3_2t)s^gchI4@9QH&K8B6y)C@j!QBrX6v)=wer1}r;Qss>;x5VC zoEX^RE?#v;1(28qyKI!i*=J)ujIuorsesKKih%{tByH3e9{Mz81TNEb?hS#=!VA1%B-?{4nf*0hVQ7 z{A*L!hueQmqD(hkRfuCn(T1GthVsq`+Nom$>sb_(o?@F>dAd-~?yn1VR7+m9<7VYG z1QVp-@R@1P1^rHuo0NAIzYZq)Oy@MWsl3Ub>@!iYnAsbG0k4pO;gQ#b(1SDnt_mH~ zS?JCyoe)g&sMi3^vf3g z+LE_Ru(B&p=`H*6;>K$JG>r8&VzmV8*?GGb0*7g!Wg}SG9~cK#6cMakA9}*nWyJkY zFgNth+cM({lt6A(`DM2#%+CO`s(RS3Xt7()Vvk-NahzcpheIH5B97i=s+fD7aRe-A zV9uP6nCmuQxzGo7EZZ5h+@`!Y12)yd@0)o{z~V0?$B-}F+_IekU-`8s?g-i^gkW0G z$JttVjo-)DI=)`5NM(PgB9$GULMqMeI7mI!GD?tD&fjC2nL_HeJwmGG=9Dk+NF99> zEZBsiaf*Nq#aH-!PQvil_!h974Q{Wz;}ZjG+<6smyTP&>qlmpkQMV1$se)xxA*iD? zd9|ZcCt1cgsPRo8Z0s~8!|#zW$8l3ikAx(%oh@Y}nOew`9p*pXN#LM z=$#pVj*36A;@p7cPM>>pVxVa#a#!Q${+|MI zs<3vOV$E`Um*!IaHkIERu#T9GTI8s}sL$QZ(ooRS#^+jhX{hvC6*;@%RTf}ByhRG) z74GSn)oodc&w_&D6vf(JMS*KuZesa@qfdo}n^>9v6SygmNS#j%Y#8hd*!F5Sx$HjB zcS&MkRBHLZJlFbVD6ws zW{8@&tIMzL|CFxwV3ii;HJou?&_3yQ$>44!gRdN(G4j?vyM_gd&L}!F&@fPr)BG=KdzK4rKHOpdgyq^H2-7_p+CAd|@TfwC8E+u1Vk z&nSr;DTz?_Y)Zccsc~eIojL;Rw{(lp$}Dz{afg*X9|$>f`yT6T7x#$sO7##*uqQ=_!4C+ZN;!Zh4=a zan|`t0XTN03N_Y}@oMx8%NS%?!M)%(5anaEMNkpcEs{4yx&jgp_mlf`lYR!oLragquNvTeqr8N_UP5s?wdqg1p)< z-O=k|{2n5(#0uCa@t^JXEA1_%JI57O0n33!^BA=EtT?g5B1Nx{`S{b|PKx+Po<>3s zd|aofn*rn4KKedghpk7!w7zr+L_6G&wh4zYl~g%~X?}=CLL6M7ZQ{TT`y=A@x)Le0X6bSl@>X2(lisbwU+ts>k8JxFSXys_X!pY(OIB<##>`R^r)B1JQrI8~Fyi(K3 zIRgqWCk@1b7qp_p@LdnQ){%5k5jWn1Tb>Kc_QvO0(*x`SDR?=NA`ZNw2mW2a z>*>M0#7o&i4^9RK)8I@DMJuOb#DTNKGO}R0fA9HlfphKir1dEyZ?n7k#&_60oO!`c z>67E64uzbvI^sYseR6?+z8db@`s7t2Pf~qy8)Ew8I6Xw+=KPR2a6>6v*tw6t78dd& zuMxM-#B)ao&75SS@N$+(9C(H1lJ+M=1$XB2MEpNRvv(46u)aCAa1>t7!if(r3gOgu-V5XX{d=UjP-JnsE`T_dN8#mMo;dI#lRz)hJ_cTEyefe9 z6E8E#AYA})GLXW_*+6mNgbYyrrr&v)rDgDw%Pi`I(2ClA6R?;DrxdALnRALPP9rj( z#)z8vE*^12gYg!KB;&%%Ei*})(Ol zVltVBag3R@vBj#>Vm)WEK(bhZS}g7?mi-nBYKt|N#p=cUB0f3&!c=YCtUExiH!}5O zlIv#CKoGOE*IEqFZV4SJHp}qES^a{(;dfA0*}1xTmQk!5sJ#n<3F+_4Fg7gb{IW}e z{^Q?M)=ovJG?*yOVuT9lP^14COp=%~pAIH_aTW%H@+)^wFyz*UriL*l0Aq^yB?jiX zr-TYH(*OeGbTZZM=X^4Y+1+B@0bR=A_H9=SGy!3&ioZ)`@$b0Xn zh9!=;W902aDo5Ng-0%0S!NkBx?&?tC-HJO-jZ@rlZk*!8dN>}5WynTq&lZ3wzLS!&$VLItNP!a0La znXR0{XFh;#Y=GM{Cr}D=j>PYRW|AbpTNvB2-I6^z6QLcG`h-Nl34tmC&ImMrbubZF z7l+Kg(t)_0qszH&Du-mkgMShM=NGC7IKj{yjlSBrIk4|R1k#NEsYDQHC4zlA0?t=7 z|8X!8_}&Vc2@=7t8G-G_Mj+#hoc*Xc;PglHQk0Exa3I5%&W9n>8mJ2YzaRpPSw)YI zO7}IVQmVp|b1BVp*qM#F74gI|Mon;Vx22f5St^dt$wUeV#W7W6tZssD8n(bTRi7G$ zW!30d0~jz3&e&8DbIPX0IhoeKtI1ls3N~8ie*Eoz^a4m{*9Z5r%EXYIZ7zFBXY!Q6 zk+OPSR`HoYY#N*us-($jq1L~btN7Z}=)G2DQdym99pj0v^2ZDu~(9A|vg3r_pT5uD$T z!g-FOkW*t-jm>m0N2A&@Z)1&pQ+zeiF_w{z*3P4dB2fgiTM4L7**$0!C#BC|6@sqB zH8amtRS)LmNVUSgrq!V#WW+Q$8&?U7({XvV({4esOvXscb;HbLDQK=4#-TAz0zlUv z`ZKCz0M6N=-Fdx&aIChmvIdwTJ{ zQu#rpxu}=JT~Hg{Rl4ZrBxMy1XDM6clUF+um7+WN1Eix>tn&2DDjicwX?y8u74HI( zX>iW7%D|^YoTvG*-f7ta?Z}5R{TJ~D)Vx$dab&^3Kqpkn-IiGkD7 zOC-@A;m`v(vpAodS34|@u#6O_<`WN^W>7f%#e?7wbmo@!o_5ptolr=W_gl*T0VeG& zBkz-eZO#!_(QuM@9MNF79G0^CYeeHnG_NokH$`=mRlF)qKh85(SmR6|XaOc5CO!0! zX$B-?-Tx4=X60=;`p)VnnU~OE_#@C~8l17Nw15g=p32gdQ`O_3z0NX*V94TG#L{1A z-^*BR3xf}-WiKOXd@|7yJ@<_RCI+@1H#=av!8!XeJdx^dDcvqpFOavKhB1estKS+u z?u3~E$7hcJa8qNX=&#FoCNZ#j*dpXM(98MsN)~ZaiMB`qh8F$>D!n-npOQ+@Xkzf# zhT7PJ{&f7OOEEud()%ZTuX5Xjsm$$bN>5HiG^WAX`l?{%bbT`oZx*NNTb!96hmame zRyh$_1@(1~{fZZh?PfSIO)<ERO1|?EPsxdUL;^A< zu}huH?dZ=>pu_o z6ukU%QhbcmKa*~JQ+gn{j6>n&I*$18qNl*zfx1Qa#z@^Ft@@MZj)36_33D-s!pqel zao~jwioqJ|_Yu7N6yC=TA^7K8HN{+1qA+t+NgS9(685dg6duJpRW%ingiy?-DGD#w zro@346w{3P6YzSY4!i)>yJhB%5WHM-qwsRkP26}BK8WCb zPvMPpdAUGm8eF-f>Hsd?u}HKPXAFB#yrH%3zYg=8M#_NRHJsn%xUj8{bT*e3y?Y(lJ2mY6N^4)M*%^TZo9JI{Er6OC zflh_GJk*CL6$Pc%Y>tUT%m+wG#&OLgz zHD-C_y|AIJr-YpKCeU+h^bUEv@ zC5p~Vbba;&Mo5Htu9#DV-gSLkNRjX$G_>n6ARVia-usv*&;c4J*W4+bTy)2)9m892 zro0rv`CJQ}T(zfga@k&dIFazF`-yX$qVs)?b70E_D+xtp!i-{(RM~6HPn54MlIt*1kH2ARwqfhR@U08q7Cl@mYQbDZOX2G;5 zXS3TFGHqwz1AQ?2u)bGFIwZN&Q?<*Ldc;{wzz|NhtX}&;nLSf9P|XAwL-h!^%OwJ? z990oe^{hC{3`BrwJ30S~M1YAXuq|UFxDzro4K74gs!p+5%#bx@ZlY-bRpZs+G=Vx_M% zO@U1Jc_Z(1v~sRiI^tWt5zRjSl){ONWmTrwbxiHxdmcrS879zi*^-WuG)21|_LVI7&`*<6_EJ$6l4b3HKf4KY_Pe#4 z($LF-snHhafMO2yPuL2cwyKhwbejfO7^}jFON=e1fJKp6rS9AQ>5Tf|A$!zhd} zqdRc-e$)JxDQ4px`$?GV`peI9%|ZV`FT&P>X=rPmm9;Ljf5wL1jaln5HnHC^l%Wme%9-860Gnt-DRPnZm;rrLC5hGjY|x;{1AL^b?ZvU z+t%cF^sq_h(}4u^HI6U3*WEIAs?Wwac_@h8{@Kmxv$2N5%G{LstHi)!;5;joBL+E_ zS*!HmI_o&n1NwtjWyY>I!mWsV-(WfiWmZ&U>B;OkH4QG-R(QEuI}W^9CU^vN{r>w* z^Jr-c-*X@FhVsr{G03*7UtGRr#lYpy+sVt%wgc5KE`6DE^f#A%TBl;;LU2{!a3#3K z#ozHoiKe~r7*xyaynUFe6H2nkX}W> zmGlIWo=&`7J1%vqDfUELF=8q`E?O~P`na+2KS(NH3 zVnzX)`72R>uIg79xvZa8JG4UmStNgi>GdAQzjAs#mkqE3zP|i2(GKnnpzv~YfH?4q z&1gQ4sV-h);TcYKVNoA$EO2)Lg_GM0#EsK>hd8Gwx&B_`9Hwns?oXg_a)W~Sa3cHL z-*_81k5V`+^Exnu zF1-zj0e|MkVQ1*+?p!6Uz3fd+pWO1m24`)bYhY@i$MY5U&Lj&2WI?D2yqd#-EZ0Za9 zGudk@Gz~o}F_1cG2AA&7c`<0szg~=1x4!h0K$7dLIN!}!H6-Xe=>no~mxl(Ay)`j# z#?iOHqQVL&Od2^AtNOiOj*61RKsBb)|A9UGror7WlrE4hi0w|Me`=ClNZD3d%%x6%da{(r(s-b^RWNS z1s>Dj<|GO=cPHW14r&ZWp^~-k4(U4f4wCK@+XMvv6Ua=18=RyAnZ+GWEN(_(agP#< z+nZS2FT~;&A=XQ8;K8jyEbcR6ar+UAyOLPkti<}+K0LSuh{e4^EN=Z_akmdkHuz|l z)DI!zRVYe-5i&PP>OTZpZL_3rAY><^@M{|TQ&fOz{T0fG7mQxLXI`(%q=1uFaPsA_ zG>?yrV%NJBq3pl}``WE;uyh1lh=E`rEsz!H9q1G27Z?yI4ICC285kWnYU(!<_6*l* zgW@gqxk1%>`c-0JRmz}}U6ExmHL1^)rUdlI82pZJPBr3k%D(EZEnU|CjIdg4vNvS!w%zF{``3=VLo6EZ!=thcH{#*d zPL@IKi!9?_lWO)BHT-s}$}+TPu;a_-vVRC(?&hQLGONUg7fX{99!S;G81ExqES@;} z=EEvrGM0U^3s^8Z3B0N#Rr!!ao0lO?%!l~ko-A?1wMH#b_CK9!&JZ4+L|i3L*hx7> zT2@)blV*;cZ@ZIb+5V-kO!;`$M3k#JUQM-f#F6O43cro|8pd~fr+<$nEUMHMCp