py32f0xx_ll_flash.h 60 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409
  1. /**
  2. ******************************************************************************
  3. * @file py32f0xx_ll_flash.h
  4. * @author MCU Application Team
  5. * @brief Header file of FLASH LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2023 Puya Semiconductor Co.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by Puya under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. * @attention
  19. *
  20. * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  21. * All rights reserved.</center></h2>
  22. *
  23. * This software component is licensed by ST under BSD 3-Clause license,
  24. * the "License"; You may not use this file except in compliance with the
  25. * License. You may obtain a copy of the License at:
  26. * opensource.org/licenses/BSD-3-Clause
  27. *
  28. ******************************************************************************
  29. */
  30. /* Define to prevent recursive inclusion -------------------------------------*/
  31. #ifndef PY32F0XX_LL_FLASH_H
  32. #define PY32F0XX_LL_FLASH_H
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36. /* Includes ------------------------------------------------------------------*/
  37. #include "py32f0xx.h"
  38. /** @addtogroup PY32F0xx_LL_Driver
  39. * @{
  40. */
  41. #if defined (FLASH)
  42. /** @defgroup FLASH_LL FLASH
  43. * @{
  44. */
  45. /* Private types -------------------------------------------------------------*/
  46. /* Private variables ---------------------------------------------------------*/
  47. /* Private macros ------------------------------------------------------------*/
  48. /* Exported constants --------------------------------------------------------*/
  49. /** @defgroup FLASH_LL_Exported_Constants FLASH Exported Constants
  50. * @{
  51. */
  52. /** @defgroup FLASH_LL_EC_BOR_LEVEL BOR Level
  53. * @{
  54. */
  55. #define LL_FLASH_BOR_LEV0 (0x00000000) /*!< BOR Reset threshold levels for 1.7V - 1.8V VDD power supply */
  56. #define LL_FLASH_BOR_LEV1 ( FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 1.9V - 2.0V VDD power supply */
  57. #define LL_FLASH_BOR_LEV2 ( FLASH_OPTR_BOR_LEV_1 ) /*!< BOR Reset threshold levels for 2.1V - 2.2V VDD power supply */
  58. #define LL_FLASH_BOR_LEV3 ( FLASH_OPTR_BOR_LEV_1 | FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 2.3V - 2.4V VDD power supply */
  59. #define LL_FLASH_BOR_LEV4 (FLASH_OPTR_BOR_LEV_2 ) /*!< BOR Reset threshold levels for 2.5V - 2.6V VDD power supply */
  60. #define LL_FLASH_BOR_LEV5 (FLASH_OPTR_BOR_LEV_2 | FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 2.7V - 2.8V VDD power supply */
  61. #define LL_FLASH_BOR_LEV6 (FLASH_OPTR_BOR_LEV_2 | FLASH_OPTR_BOR_LEV_1 ) /*!< BOR Reset threshold levels for 2.9V - 3.0V VDD power supply */
  62. #define LL_FLASH_BOR_LEV7 (FLASH_OPTR_BOR_LEV_2 | FLASH_OPTR_BOR_LEV_1 | FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 3.1V - 3.2V VDD power supply */
  63. /**
  64. * @}
  65. */
  66. /** @defgroup FLASH_LL_EC_BOR_ENABLE BOR Enable
  67. * @{
  68. */
  69. #define LL_FLASH_BOR_DISABLE (0x00000000U) /*!< BOR Reset Disable */
  70. #define LL_FLASH_BOR_ENABLE (FLASH_OPTR_BOR_EN) /*!< BOR Reset Enable */
  71. /**
  72. * @}
  73. */
  74. /** @defgroup FLASH_LL_EC_nBOOT1 nBOOT1 Set
  75. * @{
  76. */
  77. #define LL_FLASH_NBOOT1_CLR (0x00000000U)
  78. #define LL_FLASH_NBOOT1_SET (FLASH_OPTR_nBOOT1)
  79. /**
  80. * @}
  81. */
  82. /** @defgroup FLASH_LL_EC_NRST Nrst Mode
  83. * @{
  84. */
  85. #define LL_FLASH_NRST_MODE_RESET (0x00000000U) /*!< PF2:NRST */
  86. #define LL_FLASH_NRST_MODE_GPIO (FLASH_OPTR_NRST_MODE) /*!< PF2:GPIO */
  87. /**
  88. * @}
  89. */
  90. #ifdef FLASH_OPTR_WWDG_SW
  91. /** @defgroup FLASH_LL_EC_WWDGMODE WWDG Mode
  92. * @{
  93. */
  94. #define LL_FLASH_WWDG_MODE_HW (0x00000000U) /*!< Hardware WWDG selected */
  95. #define LL_FLASH_WWDG_MODE_SW (FLASH_OPTR_WWDG_SW) /*!< Software WWDG selected */
  96. /**
  97. * @}
  98. */
  99. #endif
  100. /** @defgroup FLASH_LL_EC_IWDGMODE IWDG Mode
  101. * @{
  102. */
  103. #define LL_FLASH_IWDG_MODE_HW (0x00000000U) /*!< Hardware IWDG selected */
  104. #define LL_FLASH_IWDG_MODE_SW (FLASH_OPTR_IWDG_SW) /*!< Software IWDG selected */
  105. /**
  106. * @}
  107. */
  108. /** @defgroup FLASH_LL_EC_RDP RDP Mode
  109. * @{
  110. */
  111. #define LL_FLASH_RDP_LEVEL_0 ((uint8_t)0xAAU)
  112. #define LL_FLASH_RDP_LEVEL_1 ((uint8_t)0x55U)
  113. /**
  114. * @}
  115. */
  116. /** @defgroup FLASH_LL_EC_WRP Write Protection
  117. * @{
  118. */
  119. #define LL_FLASH_WRP_DISABLE ((uint32_t)0x00000000) /* Write protection disable */
  120. #define LL_FLASH_WRP_SECTOR_0 ((uint32_t)FLASH_WRPR_WRP_0) /* Write protection of Sector0 */
  121. #define LL_FLASH_WRP_SECTOR_1 ((uint32_t)FLASH_WRPR_WRP_1) /* Write protection of Sector1 */
  122. #define LL_FLASH_WRP_SECTOR_2 ((uint32_t)FLASH_WRPR_WRP_2) /* Write protection of Sector2 */
  123. #define LL_FLASH_WRP_SECTOR_3 ((uint32_t)FLASH_WRPR_WRP_3) /* Write protection of Sector3 */
  124. #define LL_FLASH_WRP_SECTOR_4 ((uint32_t)FLASH_WRPR_WRP_4) /* Write protection of Sector4 */
  125. #if !defined (PY32F002APRE)
  126. #define LL_FLASH_WRP_SECTOR_5 ((uint32_t)FLASH_WRPR_WRP_5) /* Write protection of Sector5 */
  127. #define LL_FLASH_WRP_SECTOR_6 ((uint32_t)FLASH_WRPR_WRP_6) /* Write protection of Sector6 */
  128. #define LL_FLASH_WRP_SECTOR_7 ((uint32_t)FLASH_WRPR_WRP_7) /* Write protection of Sector7 */
  129. #define LL_FLASH_WRP_SECTOR_8 ((uint32_t)FLASH_WRPR_WRP_8) /* Write protection of Sector8 */
  130. #define LL_FLASH_WRP_SECTOR_9 ((uint32_t)FLASH_WRPR_WRP_9) /* Write protection of Sector9 */
  131. #define LL_FLASH_WRP_SECTOR_10 ((uint32_t)FLASH_WRPR_WRP_10) /* Write protection of Sector10 */
  132. #define LL_FLASH_WRP_SECTOR_11 ((uint32_t)FLASH_WRPR_WRP_11) /* Write protection of Sector11 */
  133. #define LL_FLASH_WRP_SECTOR_12 ((uint32_t)FLASH_WRPR_WRP_12) /* Write protection of Sector12 */
  134. #define LL_FLASH_WRP_SECTOR_13 ((uint32_t)FLASH_WRPR_WRP_13) /* Write protection of Sector13 */
  135. #define LL_FLASH_WRP_SECTOR_14 ((uint32_t)FLASH_WRPR_WRP_14) /* Write protection of Sector14 */
  136. #define LL_FLASH_WRP_SECTOR_15 ((uint32_t)FLASH_WRPR_WRP_15) /* Write protection of Sector15 */
  137. #endif
  138. #define LL_FLASH_WRP_Pages0to31 ((uint32_t)FLASH_WRPR_WRP_0) /* Write protection from page0 to page31 */
  139. #define LL_FLASH_WRP_Pages32to63 ((uint32_t)FLASH_WRPR_WRP_1) /* Write protection from page32 to page63 */
  140. #define LL_FLASH_WRP_Pages64to95 ((uint32_t)FLASH_WRPR_WRP_2) /* Write protection from page64 to page95 */
  141. #define LL_FLASH_WRP_Pages96to127 ((uint32_t)FLASH_WRPR_WRP_3) /* Write protection from page96 to page127 */
  142. #define LL_FLASH_WRP_Pages128to159 ((uint32_t)FLASH_WRPR_WRP_4) /* Write protection from page128 to page159 */
  143. #if !defined (PY32F002APRE)
  144. #define LL_FLASH_WRP_Pages160to191 ((uint32_t)FLASH_WRPR_WRP_5) /* Write protection from page160 to page191 */
  145. #define LL_FLASH_WRP_Pages192to223 ((uint32_t)FLASH_WRPR_WRP_6) /* Write protection from page192 to page223 */
  146. #define LL_FLASH_WRP_Pages224to255 ((uint32_t)FLASH_WRPR_WRP_7) /* Write protection from page224 to page255 */
  147. #define LL_FLASH_WRP_Pages256to287 ((uint32_t)FLASH_WRPR_WRP_8) /* Write protection from page256 to page287 */
  148. #define LL_FLASH_WRP_Pages288to319 ((uint32_t)FLASH_WRPR_WRP_9) /* Write protection from page288 to page319 */
  149. #define LL_FLASH_WRP_Pages320to351 ((uint32_t)FLASH_WRPR_WRP_10) /* Write protection from page320 to page351 */
  150. #define LL_FLASH_WRP_Pages352to383 ((uint32_t)FLASH_WRPR_WRP_11) /* Write protection from page352 to page383 */
  151. #define LL_FLASH_WRP_Pages384to415 ((uint32_t)FLASH_WRPR_WRP_12) /* Write protection from page384 to page415 */
  152. #define LL_FLASH_WRP_Pages416to447 ((uint32_t)FLASH_WRPR_WRP_13) /* Write protection from page416 to page447 */
  153. #define LL_FLASH_WRP_Pages448to479 ((uint32_t)FLASH_WRPR_WRP_14) /* Write protection from page448 to page479 */
  154. #define LL_FLASH_WRP_Pages480to511 ((uint32_t)FLASH_WRPR_WRP_15) /* Write protection from page480 to page511 */
  155. #endif
  156. #if !defined (PY32F002APRE)
  157. #define LL_FLASH_WRP_AllPages ((uint32_t)0x000000FFU) /*!< Write protection of all Sectors */
  158. #else
  159. #define LL_FLASH_WRP_AllPages ((uint32_t)0x0000001FU) /*!< Write protection of all Sectors */
  160. #endif
  161. /**
  162. * @}
  163. */
  164. /** @defgroup FLASH_LL_EC_SDK SDK Address
  165. * @{
  166. */
  167. #define LL_FLASH_SDKSTARTADDRESS_0X08000000 (0x00000000)
  168. #define LL_FLASH_SDKSTARTADDRESS_0X08000800 ( FLASH_SDKR_SDK_STRT_0)
  169. #define LL_FLASH_SDKSTARTADDRESS_0X08001000 ( FLASH_SDKR_SDK_STRT_1 )
  170. #define LL_FLASH_SDKSTARTADDRESS_0X08001800 ( FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  171. #define LL_FLASH_SDKSTARTADDRESS_0X08002000 ( FLASH_SDKR_SDK_STRT_2 )
  172. #define LL_FLASH_SDKSTARTADDRESS_0X08002800 ( FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_0)
  173. #define LL_FLASH_SDKSTARTADDRESS_0X08003000 ( FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 )
  174. #define LL_FLASH_SDKSTARTADDRESS_0X08003800 ( FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  175. #define LL_FLASH_SDKSTARTADDRESS_0X08004000 ( FLASH_SDKR_SDK_STRT_3 )
  176. #define LL_FLASH_SDKSTARTADDRESS_0X08004800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_0)
  177. #define LL_FLASH_SDKSTARTADDRESS_0X08005000 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 )
  178. #define LL_FLASH_SDKSTARTADDRESS_0X08005800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  179. #define LL_FLASH_SDKSTARTADDRESS_0X08006000 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | )
  180. #define LL_FLASH_SDKSTARTADDRESS_0X08006800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | | FLASH_SDKR_SDK_STRT_0)
  181. #define LL_FLASH_SDKSTARTADDRESS_0X08007000 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 )
  182. #define LL_FLASH_SDKSTARTADDRESS_0X08007800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  183. #define LL_FLASH_SDKSTARTADDRESS_0X08008000 (FLASH_SDKR_SDK_STRT_4 )
  184. #define LL_FLASH_SDKSTARTADDRESS_0X08008800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_0)
  185. #define LL_FLASH_SDKSTARTADDRESS_0X08009000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_1 )
  186. #define LL_FLASH_SDKSTARTADDRESS_0X08009800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  187. #define LL_FLASH_SDKSTARTADDRESS_0X0800A000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 )
  188. #define LL_FLASH_SDKSTARTADDRESS_0X0800A800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_0)
  189. #define LL_FLASH_SDKSTARTADDRESS_0X0800B000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 )
  190. #define LL_FLASH_SDKSTARTADDRESS_0X0800B800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  191. #define LL_FLASH_SDKSTARTADDRESS_0X0800C000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 )
  192. #define LL_FLASH_SDKSTARTADDRESS_0X0800C800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 FLASH_SDKR_SDK_STRT_0)
  193. #define LL_FLASH_SDKSTARTADDRESS_0X0800D000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 )
  194. #define LL_FLASH_SDKSTARTADDRESS_0X0800D800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  195. #define LL_FLASH_SDKSTARTADDRESS_0X0800E000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 )
  196. #define LL_FLASH_SDKSTARTADDRESS_0X0800E800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_0)
  197. #define LL_FLASH_SDKSTARTADDRESS_0X0800F000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 )
  198. #define LL_FLASH_SDKSTARTADDRESS_0X0800F800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0)
  199. #define LL_FLASH_SDKENDADDRESS_0X080007FF (0x00000000)
  200. #define LL_FLASH_SDKENDADDRESS_0X08000FFF ( FLASH_SDKR_SDK_END_0)
  201. #define LL_FLASH_SDKENDADDRESS_0X080017FF ( FLASH_SDKR_SDK_END_1 )
  202. #define LL_FLASH_SDKENDADDRESS_0X08001FFF ( FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  203. #define LL_FLASH_SDKENDADDRESS_0X080027FF ( FLASH_SDKR_SDK_END_2 )
  204. #define LL_FLASH_SDKENDADDRESS_0X08002FFF ( FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_0)
  205. #define LL_FLASH_SDKENDADDRESS_0X080037FF ( FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 )
  206. #define LL_FLASH_SDKENDADDRESS_0X08003FFF ( FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  207. #define LL_FLASH_SDKENDADDRESS_0X080047FF ( FLASH_SDKR_SDK_END_3 )
  208. #define LL_FLASH_SDKENDADDRESS_0X08004FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_0)
  209. #define LL_FLASH_SDKENDADDRESS_0X080057FF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 )
  210. #define LL_FLASH_SDKENDADDRESS_0X08005FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  211. #define LL_FLASH_SDKENDADDRESS_0X080067FF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | )
  212. #define LL_FLASH_SDKENDADDRESS_0X08006FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | | FLASH_SDKR_SDK_END_0)
  213. #define LL_FLASH_SDKENDADDRESS_0X080077FF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 )
  214. #define LL_FLASH_SDKENDADDRESS_0X08007FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  215. #define LL_FLASH_SDKENDADDRESS_0X080087FF (FLASH_SDKR_SDK_END_4 )
  216. #define LL_FLASH_SDKENDADDRESS_0X08008FFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_0)
  217. #define LL_FLASH_SDKENDADDRESS_0X080097FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_1 )
  218. #define LL_FLASH_SDKENDADDRESS_0X08009FFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  219. #define LL_FLASH_SDKENDADDRESS_0X0800A7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 )
  220. #define LL_FLASH_SDKENDADDRESS_0X0800AFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_0)
  221. #define LL_FLASH_SDKENDADDRESS_0X0800B7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 )
  222. #define LL_FLASH_SDKENDADDRESS_0X0800BFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  223. #define LL_FLASH_SDKENDADDRESS_0X0800C7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 )
  224. #define LL_FLASH_SDKENDADDRESS_0X0800CFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 FLASH_SDKR_SDK_END_0)
  225. #define LL_FLASH_SDKENDADDRESS_0X0800D7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 )
  226. #define LL_FLASH_SDKENDADDRESS_0X0800DFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  227. #define LL_FLASH_SDKENDADDRESS_0X0800E7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 )
  228. #define LL_FLASH_SDKENDADDRESS_0X0800EFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_0)
  229. #define LL_FLASH_SDKENDADDRESS_0X0800F7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 )
  230. #define LL_FLASH_SDKENDADDRESS_0X0800FFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0)
  231. /**
  232. * @}
  233. */
  234. /** @defgroup FLASH_LL_EC_KEY Key Value
  235. * @{
  236. */
  237. #define LL_FLASH_KEY1 (FLASH_KEY1)
  238. #define LL_FLASH_KEY2 (FLASH_KEY2)
  239. /**
  240. * @}
  241. */
  242. /** @defgroup FLASH_LL_EC_OPTKEY Optkey Value
  243. * @{
  244. */
  245. #define LL_FLASH_OPTKEY1 (FLASH_OPTKEY1)
  246. #define LL_FLASH_OPTKEY2 (FLASH_OPTKEY2)
  247. /**
  248. * @}
  249. */
  250. /**
  251. * @}
  252. */
  253. #if !defined (PY32F002APRE)
  254. #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_4M() \
  255. do { \
  256. FLASH->TS0 = (*(uint32_t *)(0x1FFF0F1C))&0xFF; \
  257. FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F1C))>>16)&0x1FF; \
  258. FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F1C))>>8)&0xFF; \
  259. FLASH->TS2P = (*(uint32_t *)(0x1FFF0F20))&0xFF; \
  260. FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F20))>>16)&0x7FF; \
  261. FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F24))&0x1FFFF; \
  262. FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F28))&0x1FFFF; \
  263. FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F2C))&0xFFFF; \
  264. FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F2C))>>16)&0xFFF; \
  265. } while(0U)
  266. #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_16M() \
  267. do { \
  268. FLASH->TS0 = (*(uint32_t *)(0x1FFF0F44))&0xFF; \
  269. FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F44))>>16)&0x1FF; \
  270. FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F44))>>8)&0xFF; \
  271. FLASH->TS2P = (*(uint32_t *)(0x1FFF0F48))&0xFF; \
  272. FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F48))>>16)&0x7FF; \
  273. FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F4C))&0x1FFFF; \
  274. FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F50))&0x1FFFF; \
  275. FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F54))&0xFFFF; \
  276. FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F54))>>16)&0xFFF; \
  277. } while(0U)
  278. #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_22P12M() \
  279. do { \
  280. FLASH->TS0 = (*(uint32_t *)(0x1FFF0F58))&0xFF; \
  281. FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F58))>>16)&0x1FF; \
  282. FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F58))>>8)&0xFF; \
  283. FLASH->TS2P = (*(uint32_t *)(0x1FFF0F5C))&0xFF; \
  284. FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F5C))>>16)&0x7FF; \
  285. FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F60))&0x1FFFF; \
  286. FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F64))&0x1FFFF; \
  287. FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F68))&0xFFFF; \
  288. FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F68))>>16)&0xFFF; \
  289. } while(0U)
  290. #endif
  291. #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_8M() \
  292. do { \
  293. FLASH->TS0 = (*(uint32_t *)(0x1FFF0F30))&0xFF; \
  294. FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F30))>>16)&0x1FF; \
  295. FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F30))>>8)&0xFF; \
  296. FLASH->TS2P = (*(uint32_t *)(0x1FFF0F34))&0xFF; \
  297. FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F34))>>16)&0x7FF; \
  298. FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F38))&0x1FFFF; \
  299. FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F3C))&0x1FFFF; \
  300. FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F40))&0xFFFF; \
  301. FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F40))>>16)&0xFFF; \
  302. } while(0U)
  303. #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_24M() \
  304. do { \
  305. FLASH->TS0 = (*(uint32_t *)(0x1FFF0F6C))&0xFF; \
  306. FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F6C))>>16)&0x1FF; \
  307. FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F6C))>>8)&0xFF; \
  308. FLASH->TS2P = (*(uint32_t *)(0x1FFF0F70))&0xFF; \
  309. FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F70))>>16)&0x7FF; \
  310. FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F74))&0x1FFFF; \
  311. FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F78))&0x1FFFF; \
  312. FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F7C))&0xFFFF; \
  313. FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F7C))>>16)&0xFFF; \
  314. } while(0U)
  315. /* Exported macro ------------------------------------------------------------*/
  316. /** @defgroup FLASH_LL_Exported_Macros FLASH Exported Macros
  317. * @{
  318. */
  319. /** @defgroup FLASH_LL_EM_WRITE_READ Common Write and read registers Macros
  320. * @{
  321. */
  322. /**
  323. * @brief Write a value in FLASH register
  324. * @param __INSTANCE__ FLASH Instance
  325. * @param __REG__ Register to be written
  326. * @param __VALUE__ Value to be written in the register
  327. * @retval None
  328. */
  329. #define LL_FLASH_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
  330. /**
  331. * @brief Read a value in FLASH register
  332. * @param __INSTANCE__ FLASH Instance
  333. * @param __REG__ Register to be read
  334. * @retval Register value
  335. */
  336. #define LL_FLASH_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
  337. /**
  338. * @}
  339. */
  340. /**
  341. * @}
  342. */
  343. /* Exported functions --------------------------------------------------------*/
  344. /** @defgroup FLASH_LL_Exported_Functions FLASH Exported Functions
  345. * @{
  346. */
  347. /** @defgroup FLASH_LL_EF_FLAG_Management Flag Management
  348. * @{
  349. */
  350. /**
  351. * @brief Indicate the status of End of operation flag.
  352. * @rmtoll SR EOP LL_FLASH_IsActiveFlag_EOP
  353. * @param FLASHx FLASH Instance.
  354. * @retval State of bit (1 or 0).
  355. */
  356. __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_EOP(FLASH_TypeDef *FLASHx)
  357. {
  358. return (READ_BIT(FLASHx->SR, FLASH_SR_EOP) == (FLASH_SR_EOP));
  359. }
  360. /**
  361. * @brief Indicate the status of WRPERR flag.
  362. * @rmtoll SR WPRERR LL_FLASH_IsActiveFlag_WRPERR
  363. * @param FLASHx FLASH Instance.
  364. * @retval State of bit (1 or 0).
  365. */
  366. __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_WRPERR(FLASH_TypeDef *FLASHx)
  367. {
  368. return (READ_BIT(FLASHx->SR, FLASH_SR_WRPERR) == (FLASH_SR_WRPERR));
  369. }
  370. /**
  371. * @brief Indicate the status of OPTVERR flag.
  372. * @rmtoll SR OPTVERR LL_FLASH_IsActiveFlag_OPTVERR
  373. * @param FLASHx FLASH Instance.
  374. * @retval State of bit (1 or 0).
  375. */
  376. __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_OPTVERR(FLASH_TypeDef *FLASHx)
  377. {
  378. return (READ_BIT(FLASHx->SR, FLASH_SR_OPTVERR) == (FLASH_SR_OPTVERR));
  379. }
  380. /**
  381. * @brief Indicate the status of BUSY flag.
  382. * @rmtoll SR BSY LL_FLASH_IsActiveFlag_BUSY
  383. * @param FLASHx FLASH Instance.
  384. * @retval State of bit (1 or 0).
  385. */
  386. __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_BUSY(FLASH_TypeDef *FLASHx)
  387. {
  388. return (READ_BIT(FLASHx->SR, FLASH_SR_BSY) == (FLASH_SR_BSY));
  389. }
  390. /**
  391. * @brief Clear End of operation flag.
  392. * @rmtoll SR EOP LL_FLASH_ClearFlag_EOP
  393. * @param FLASHx FLASH Instance.
  394. * @retval None
  395. */
  396. __STATIC_INLINE void LL_FLASH_ClearFlag_EOP(FLASH_TypeDef *FLASHx)
  397. {
  398. WRITE_REG(FLASHx->SR, FLASH_SR_EOP);
  399. }
  400. /**
  401. * @brief Clear WRPERR flag.
  402. * @rmtoll SR WRPERR LL_FLASH_ClearFlag_WRPERR
  403. * @param FLASHx FLASH Instance.
  404. * @retval None
  405. */
  406. __STATIC_INLINE void LL_FLASH_ClearFlag_WRPERR(FLASH_TypeDef *FLASHx)
  407. {
  408. WRITE_REG(FLASHx->SR, FLASH_SR_WRPERR);
  409. }
  410. /**
  411. * @brief Clear OPTVERR flag.
  412. * @rmtoll SR OPTVERR LL_FLASH_ClearFlag_OPTVERR
  413. * @param FLASHx FLASH Instance.
  414. * @retval None
  415. */
  416. __STATIC_INLINE void LL_FLASH_ClearFlag_OPTVERR(FLASH_TypeDef *FLASHx)
  417. {
  418. WRITE_REG(FLASHx->SR, FLASH_SR_OPTVERR);
  419. }
  420. /**
  421. * @}
  422. */
  423. /** @defgroup FLASH_LL_EF_ERASE_Management Erase Management
  424. * @{
  425. */
  426. /**
  427. * @brief Enable Page Program
  428. * @rmtoll CR PG LL_FLASH_EnablePageProgram
  429. * @param FLASHx FLASH Instance
  430. * @retval None
  431. */
  432. __STATIC_INLINE void LL_FLASH_EnablePageProgram(FLASH_TypeDef *FLASHx)
  433. {
  434. SET_BIT(FLASHx->CR, FLASH_CR_PG);
  435. }
  436. /**
  437. * @brief Enable Mass Erase
  438. * @rmtoll CR MER LL_FLASH_EnableMassErase
  439. * @param FLASHx FLASH Instance
  440. * @retval None
  441. */
  442. __STATIC_INLINE void LL_FLASH_EnableMassErase(FLASH_TypeDef *FLASHx)
  443. {
  444. SET_BIT(FLASHx->CR, FLASH_CR_MER);
  445. }
  446. /**
  447. * @brief Enable Page Erase
  448. * @rmtoll CR PER LL_FLASH_EnablePageErase
  449. * @param FLASHx FLASH Instance
  450. * @retval None
  451. */
  452. __STATIC_INLINE void LL_FLASH_EnablePageErase(FLASH_TypeDef *FLASHx)
  453. {
  454. SET_BIT(FLASHx->CR, FLASH_CR_PER);
  455. }
  456. /**
  457. * @brief Enable Sector Erase
  458. * @rmtoll CR SER LL_FLASH_EnableSectorErase
  459. * @param FLASHx FLASH Instance
  460. * @retval None
  461. */
  462. __STATIC_INLINE void LL_FLASH_EnableSectorErase(FLASH_TypeDef *FLASHx)
  463. {
  464. SET_BIT(FLASHx->CR, FLASH_CR_SER);
  465. }
  466. /**
  467. * @brief Disable Page Program
  468. * @rmtoll CR PG LL_FLASH_DisablePageProgram
  469. * @param FLASHx FLASH Instance
  470. * @retval None
  471. */
  472. __STATIC_INLINE void LL_FLASH_DisablePageProgram(FLASH_TypeDef *FLASHx)
  473. {
  474. CLEAR_BIT(FLASHx->CR, FLASH_CR_PG);
  475. }
  476. /**
  477. * @brief Disable Mass Erase
  478. * @rmtoll CR MER LL_FLASH_DisableMassErase
  479. * @param FLASHx FLASH Instance
  480. * @retval None
  481. */
  482. __STATIC_INLINE void LL_FLASH_DisableMassErase(FLASH_TypeDef *FLASHx)
  483. {
  484. CLEAR_BIT(FLASHx->CR, FLASH_CR_MER);
  485. }
  486. /**
  487. * @brief Disable Page Erase
  488. * @rmtoll CR PER LL_FLASH_DisablePageErase
  489. * @param FLASHx FLASH Instance
  490. * @retval None
  491. */
  492. __STATIC_INLINE void LL_FLASH_DisablePageErase(FLASH_TypeDef *FLASHx)
  493. {
  494. CLEAR_BIT(FLASHx->CR, FLASH_CR_PER);
  495. }
  496. /**
  497. * @brief Disable Sector Erase
  498. * @rmtoll CR SER LL_FLASH_DisableSectorErase
  499. * @param FLASHx FLASH Instance
  500. * @retval None
  501. */
  502. __STATIC_INLINE void LL_FLASH_DisableSectorErase(FLASH_TypeDef *FLASHx)
  503. {
  504. CLEAR_BIT(FLASHx->CR, FLASH_CR_SER);
  505. }
  506. /**
  507. * @brief Check if Page Program is enabled
  508. * @rmtoll CR PG LL_FLASH_IsEnabledPageProgram
  509. * @param FLASHx FLASH Instance
  510. * @retval State of bit (1 or 0).
  511. */
  512. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledPageProgram(FLASH_TypeDef *FLASHx)
  513. {
  514. return ((READ_BIT(FLASHx->CR, FLASH_CR_PG) == (FLASH_CR_PG)) ? 1UL : 0UL);
  515. }
  516. /**
  517. * @brief Check if Mass erase is enabled
  518. * @rmtoll CR MER LL_FLASH_IsEnabledMassErase
  519. * @param FLASHx FLASH Instance
  520. * @retval State of bit (1 or 0).
  521. */
  522. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledMassErase(FLASH_TypeDef *FLASHx)
  523. {
  524. return ((READ_BIT(FLASHx->CR, FLASH_CR_MER) == (FLASH_CR_MER)) ? 1UL : 0UL);
  525. }
  526. /**
  527. * @brief Check if Page erase is enabled
  528. * @rmtoll CR PER LL_FLASH_IsEnabledPageErase
  529. * @param FLASHx FLASH Instance
  530. * @retval State of bit (1 or 0).
  531. */
  532. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledPageErase(FLASH_TypeDef *FLASHx)
  533. {
  534. return ((READ_BIT(FLASHx->CR, FLASH_CR_PER) == (FLASH_CR_PER)) ? 1UL : 0UL);
  535. }
  536. /**
  537. * @brief Check if Sector Erase is enabled
  538. * @rmtoll CR SER LL_FLASH_IsEnabledSectorErase
  539. * @param FLASHx FLASH Instance
  540. * @retval State of bit (1 or 0).
  541. */
  542. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledSectorErase(FLASH_TypeDef *FLASHx)
  543. {
  544. return ((READ_BIT(FLASHx->CR, FLASH_CR_SER) == (FLASH_CR_SER)) ? 1UL : 0UL);
  545. }
  546. /**
  547. * @brief Set the Erase Address
  548. * @rmtoll LL_FLASH_SetEraseAddress
  549. * @param FLASHx FLASH Instance
  550. * @retval None
  551. */
  552. __STATIC_INLINE void LL_FLASH_SetEraseAddress(FLASH_TypeDef *FLASHx,uint32_t address)
  553. {
  554. *(__IO uint32_t *)(address) = 0xFFFFFFFF;
  555. }
  556. /**
  557. * @}
  558. */
  559. /** @defgroup FLASH_LL_EF_Lock_Management Lock Management
  560. * @{
  561. */
  562. /**
  563. * @brief Unlock the Flash
  564. * @rmtoll KEYR KEYR LL_FLASH_Unlock
  565. * @param FLASHx FLASH Instance
  566. * @retval None
  567. */
  568. __STATIC_INLINE void LL_FLASH_Unlock(FLASH_TypeDef *FLASHx)
  569. {
  570. SET_BIT(FLASHx->KEYR, LL_FLASH_KEY1);
  571. SET_BIT(FLASHx->KEYR, LL_FLASH_KEY2);
  572. }
  573. /**
  574. * @brief Unlock the Option
  575. * @rmtoll OPTKEYR OPTKEYR LL_FLASH_OBUnlock
  576. * @param FLASHx FLASH Instance
  577. * @retval None
  578. */
  579. __STATIC_INLINE void LL_FLASH_OBUnlock(FLASH_TypeDef *FLASHx)
  580. {
  581. SET_BIT(FLASHx->OPTKEYR, LL_FLASH_OPTKEY1);
  582. SET_BIT(FLASHx->OPTKEYR, LL_FLASH_OPTKEY2);
  583. }
  584. /**
  585. * @brief Lock the Flash
  586. * @rmtoll CR LOCK LL_FLASH_Lock
  587. * @param FLASHx FLASH Instance
  588. * @retval None
  589. */
  590. __STATIC_INLINE void LL_FLASH_Lock(FLASH_TypeDef *FLASHx)
  591. {
  592. SET_BIT(FLASHx->CR, FLASH_CR_LOCK);
  593. }
  594. /**
  595. * @brief Lock the Option
  596. * @rmtoll CR OPTLOCK LL_FLASH_OBLock
  597. * @param FLASHx FLASH Instance
  598. * @retval None
  599. */
  600. __STATIC_INLINE void LL_FLASH_OBLock(FLASH_TypeDef *FLASHx)
  601. {
  602. SET_BIT(FLASHx->CR, FLASH_CR_OPTLOCK);
  603. }
  604. /**
  605. * @brief Check if Flash is locked
  606. * @rmtoll CR LOCK LL_FLASH_IsLocked
  607. * @param FLASHx FLASH Instance
  608. * @retval State of bit (1 or 0).
  609. */
  610. __STATIC_INLINE uint32_t LL_FLASH_IsLocked(FLASH_TypeDef *FLASHx)
  611. {
  612. return ((READ_BIT(FLASHx->CR, FLASH_CR_LOCK) == (FLASH_CR_LOCK)) ? 1UL : 0UL);
  613. }
  614. /**
  615. * @brief Check if Option is locked
  616. * @rmtoll CR OPTLOCK LL_FLASH_IsOBLocked
  617. * @param FLASHx FLASH Instance
  618. * @retval State of bit (1 or 0).
  619. */
  620. __STATIC_INLINE uint32_t LL_FLASH_IsOBLocked(FLASH_TypeDef *FLASHx)
  621. {
  622. return ((READ_BIT(FLASHx->CR, FLASH_CR_OPTLOCK) == (FLASH_CR_OPTLOCK)) ? 1UL : 0UL);
  623. }
  624. /**
  625. * @}
  626. */
  627. /** @defgroup FLASH_LL_EF_LAUNCH_Management Launch Management
  628. * @{
  629. */
  630. /**
  631. * @brief Force the Option byte loading
  632. * @rmtoll CR OBL_LAUNCH LL_FLASH_Launch
  633. * @param FLASHx FLASH Instance
  634. * @retval None
  635. */
  636. __STATIC_INLINE void LL_FLASH_Launch(FLASH_TypeDef *FLASHx)
  637. {
  638. SET_BIT(FLASHx->CR, FLASH_CR_OBL_LAUNCH);
  639. }
  640. /**
  641. * @}
  642. */
  643. /** @defgroup FLASH_LL_EF_IT_Management Interrupt Management
  644. * @{
  645. */
  646. /**
  647. * @brief Enable Error interrupts.
  648. * @rmtoll CR ERRIR LL_FLASH_EnableIT_ERR
  649. * @param FLASHx FLASH Instance.
  650. * @retval None
  651. */
  652. __STATIC_INLINE void LL_FLASH_EnableIT_ERR(FLASH_TypeDef *FLASHx)
  653. {
  654. SET_BIT(FLASHx->CR, FLASH_CR_ERRIE);
  655. }
  656. /**
  657. * @brief Enable End of operation interrupts.
  658. * @rmtoll CR EOPIE LL_FLASH_EnableIT_EOP
  659. * @param FLASHx FLASH Instance.
  660. * @retval None
  661. */
  662. __STATIC_INLINE void LL_FLASH_EnableIT_EOP(FLASH_TypeDef *FLASHx)
  663. {
  664. SET_BIT(FLASHx->CR, FLASH_CR_EOPIE);
  665. }
  666. /**
  667. * @brief Disable Error interrupts.
  668. * @rmtoll CR ERRIE LL_FLASH_DisableIT_ERR
  669. * @param FLASHx FLASH Instance.
  670. * @retval None
  671. */
  672. __STATIC_INLINE void LL_FLASH_DisableIT_ERR(FLASH_TypeDef *FLASHx)
  673. {
  674. CLEAR_BIT(FLASHx->CR, FLASH_CR_ERRIE);
  675. }
  676. /**
  677. * @brief Disable End of operation interrupts.
  678. * @rmtoll CR EOPIE LL_FLASH_DisableIT_EOP
  679. * @param FLASHx FLASH Instance.
  680. * @retval None
  681. */
  682. __STATIC_INLINE void LL_FLASH_DisableIT_EOP(FLASH_TypeDef *FLASHx)
  683. {
  684. CLEAR_BIT(FLASHx->CR, FLASH_CR_EOPIE);
  685. }
  686. /**
  687. * @brief Check if Error interrupts are enabled or disabled.
  688. * @rmtoll CR ERRIE LL_FLASH_IsEnabledIT_ERR
  689. * @param FLASHx FLASH Instance.
  690. * @retval State of bit (1 or 0).
  691. */
  692. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledIT_ERR(FLASH_TypeDef *FLASHx)
  693. {
  694. return (READ_BIT(FLASH->CR, FLASH_CR_ERRIE) == (FLASH_CR_ERRIE));
  695. }
  696. /**
  697. * @brief Check if End of operation interrupts are enabled or disabled.
  698. * @rmtoll CR EOPIE LL_FLASH_IsEnabledIT_EOP
  699. * @param FLASHx FLASH Instance.
  700. * @retval State of bit (1 or 0).
  701. */
  702. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledIT_EOP(FLASH_TypeDef *FLASHx)
  703. {
  704. return (READ_BIT(FLASH->CR, FLASH_CR_EOPIE) == (FLASH_CR_EOPIE));
  705. }
  706. /**
  707. * @}
  708. */
  709. /** @defgroup FLASH_LL_EF_PROGRAM_Management Program Management
  710. * @{
  711. */
  712. /**
  713. * @brief Enable Page Program Start
  714. * @rmtoll CR PGSTRT LL_FLASH_EnablePageProgramStart
  715. * @param FLASHx FLASH Instance
  716. * @retval None.
  717. */
  718. __STATIC_INLINE void LL_FLASH_EnablePageProgramStart(FLASH_TypeDef *FLASHx)
  719. {
  720. SET_BIT(FLASHx->CR, FLASH_CR_PGSTRT);
  721. }
  722. /**
  723. * @brief Enable Option Program Start
  724. * @rmtoll CR OPTSTRT LL_FLASH_EnableOptionProgramStart
  725. * @param FLASHx FLASH Instance
  726. * @retval None.
  727. */
  728. __STATIC_INLINE void LL_FLASH_EnableOptionProgramStart(FLASH_TypeDef *FLASHx)
  729. {
  730. SET_BIT(FLASHx->CR, FLASH_CR_OPTSTRT);
  731. }
  732. /**
  733. * @brief Disable Page Program start
  734. * @rmtoll CR PGSTRT LL_FLASH_DisablePageProgramStart
  735. * @param FLASHx FLASH Instance
  736. * @retval None.
  737. */
  738. __STATIC_INLINE void LL_FLASH_DisablePageProgramStart(FLASH_TypeDef *FLASHx)
  739. {
  740. CLEAR_BIT(FLASHx->CR, FLASH_CR_PGSTRT);
  741. }
  742. /**
  743. * @brief Disable Option Program start
  744. * @rmtoll CR OPTSTRT LL_FLASH_DisableOptionProgramStart
  745. * @param FLASHx FLASH Instance
  746. * @retval None.
  747. */
  748. __STATIC_INLINE void LL_FLASH_DisableOptionProgramStart(FLASH_TypeDef *FLASHx)
  749. {
  750. CLEAR_BIT(FLASHx->CR, FLASH_CR_OPTSTRT);
  751. }
  752. /**
  753. * @brief Check if Page Program Start is enabled
  754. * @rmtoll CR PGSTRT LL_FLASH_IsEnabledPageProgramStart
  755. * @param FLASHx FLASH Instance
  756. * @retval State of bit (1 or 0).
  757. */
  758. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledPageProgramStart(FLASH_TypeDef *FLASHx)
  759. {
  760. return (READ_BIT(FLASHx->CR, FLASH_CR_PGSTRT) == (FLASH_CR_PGSTRT));
  761. }
  762. /**
  763. * @brief Check if Option program Start is enabled
  764. * @rmtoll CR OPTSTRT LL_FLASH_IsEnabledOptionProgramStart
  765. * @param FLASHx FLASH Instance
  766. * @retval State of bit (1 or 0).
  767. */
  768. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledOptionProgramStart(FLASH_TypeDef *FLASHx)
  769. {
  770. return (READ_BIT(FLASHx->CR, FLASH_CR_OPTSTRT) == (FLASH_CR_OPTSTRT));
  771. }
  772. /**
  773. * @brief Trigger the Option Program
  774. * @param FLASHx FLASH Instance
  775. * @retval None.
  776. */
  777. __STATIC_INLINE void LL_FLASH_TriggerOptionProgramStart(FLASH_TypeDef *FLASHx)
  778. {
  779. *((__IO uint32_t *)(0x40022080))=0xff;
  780. }
  781. /**
  782. * @brief Program the page
  783. * @rmtoll CR PGSTRT LL_FLASH_PageProgram
  784. * @param FLASHx FLASH Instance
  785. * @param Address Program Address
  786. * @param DataAddress Data Address
  787. * @retval None
  788. */
  789. __STATIC_INLINE void LL_FLASH_PageProgram(FLASH_TypeDef *FLASHx,uint32_t Address, uint32_t * DataAddress)
  790. {
  791. uint8_t index=0;
  792. uint32_t dest = Address;
  793. uint32_t * src = DataAddress;
  794. uint32_t primask_bit;
  795. /* Enter critical section */
  796. primask_bit = __get_PRIMASK();
  797. __disable_irq();
  798. /* 32 words*/
  799. while(index<32U)
  800. {
  801. *(uint32_t *)dest = *src;
  802. src += 1U;
  803. dest += 4U;
  804. index++;
  805. if(index==31)
  806. {
  807. LL_FLASH_EnablePageProgramStart(FLASHx);
  808. }
  809. }
  810. /* Exit critical section: restore previous priority mask */
  811. __set_PRIMASK(primask_bit);
  812. }
  813. /**
  814. * @}
  815. */
  816. /** @defgroup FLASH_LL_EF_BOR_Management Bor Management
  817. * @{
  818. */
  819. /**
  820. * @brief Check if BOR is enabled
  821. * @rmtoll OPTR BOR_EN LL_FLASH_IsEnabledBOR
  822. * @param FLASHx FLASH Instance
  823. * @retval State of bit (1 or 0).
  824. */
  825. __STATIC_INLINE uint32_t LL_FLASH_IsEnabledBOR(FLASH_TypeDef *FLASHx)
  826. {
  827. return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_BOR_EN) == (FLASH_OPTR_BOR_EN));
  828. }
  829. /**
  830. * @brief Get the BOR Level
  831. * @rmtoll OPTR BOR_LEV LL_FLASH_GetBORLevel
  832. * @param FLASHx FLASH Instance
  833. * @retval Returned value can be one of the following values:
  834. * @arg @ref LL_FLASH_BOR_LEV0
  835. * @arg @ref LL_FLASH_BOR_LEV1
  836. * @arg @ref LL_FLASH_BOR_LEV2
  837. * @arg @ref LL_FLASH_BOR_LEV3
  838. * @arg @ref LL_FLASH_BOR_LEV4
  839. * @arg @ref LL_FLASH_BOR_LEV5
  840. * @arg @ref LL_FLASH_BOR_LEV6
  841. * @arg @ref LL_FLASH_BOR_LEV7
  842. */
  843. __STATIC_INLINE uint32_t LL_FLASH_GetBORLevel(FLASH_TypeDef *FLASHx)
  844. {
  845. return READ_BIT(FLASHx->OPTR, FLASH_OPTR_BOR_LEV);
  846. }
  847. /**
  848. * @brief Get nBOOT1 Mode
  849. * @rmtoll OPTR nBOOT1 LL_FLASH_GetnBOOT1Mode
  850. * @param FLASHx FLASH Instance
  851. * @retval Returned value can be one of the following values:
  852. * @arg @ref LL_FLASH_NBOOT1_CLR
  853. * @arg @ref LL_FLASH_NBOOT1_SET
  854. */
  855. __STATIC_INLINE uint32_t LL_FLASH_GetnBOOT1Mode(FLASH_TypeDef *FLASHx)
  856. {
  857. return READ_BIT(FLASHx->OPTR, FLASH_OPTR_nBOOT1);
  858. }
  859. /**
  860. * @brief Get NRST Mode
  861. * @rmtoll OPTR NRST_MODE LL_FLASH_GetNrstMode
  862. * @param FLASHx FLASH Instance
  863. * @retval Returned value can be one of the following values:
  864. * @arg @ref LL_FLASH_NRST_MODE_RESET
  865. * @arg @ref LL_FLASH_NRST_MODE_GPIO
  866. */
  867. __STATIC_INLINE uint32_t LL_FLASH_GetNrstMode(FLASH_TypeDef *FLASHx)
  868. {
  869. return READ_BIT(FLASHx->OPTR, FLASH_OPTR_NRST_MODE);
  870. }
  871. #ifdef FLASH_OPTR_WWDG_SW
  872. /**
  873. * @brief Get WWDG SW Mode
  874. * @rmtoll OPTR WWDG_SW LL_FLASH_GetWWDGSWMode
  875. * @param FLASHx FLASH Instance
  876. * @retval State of bit (1 or 0).
  877. */
  878. __STATIC_INLINE uint32_t LL_FLASH_GetWWDGSWMode(FLASH_TypeDef *FLASHx)
  879. {
  880. return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_WWDG_SW) == (FLASH_OPTR_WWDG_SW));
  881. }
  882. #endif
  883. /**
  884. * @brief Get IWDG SW Mode
  885. * @rmtoll OPTR IWDG_SW LL_FLASH_GetIWDGSWMode
  886. * @param FLASHx FLASH Instance
  887. * @retval State of bit (1 or 0).
  888. */
  889. __STATIC_INLINE uint32_t LL_FLASH_GetIWDGSWMode(FLASH_TypeDef *FLASHx)
  890. {
  891. return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_IWDG_SW) == (FLASH_OPTR_IWDG_SW));
  892. }
  893. /**
  894. * @}
  895. */
  896. /** @defgroup FLASH_LL_EF_SDK_Management SDK Management
  897. * @{
  898. */
  899. /**
  900. * @brief Set SDK Address
  901. * @rmtoll SDKR SDK_STRT LL_FLASH_SetSDKAddress
  902. * @rmtoll SDKR SDK_END LL_FLASH_SetSDKAddress
  903. * @param FLASHx FLASH Instance
  904. * @param SDKStartAddress This parameter can be one of the following values:
  905. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000000
  906. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000800
  907. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001000
  908. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001800
  909. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002000
  910. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002800
  911. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003000
  912. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003800
  913. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004000
  914. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004800
  915. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005000
  916. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005800
  917. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006000
  918. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006800
  919. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007000
  920. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007800
  921. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008000
  922. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008800
  923. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009000
  924. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009800
  925. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A000
  926. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A800
  927. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B000
  928. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B800
  929. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C000
  930. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C800
  931. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D000
  932. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D800
  933. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E000
  934. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E800
  935. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F000
  936. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F800
  937. * @param SDKEndAddress This parameter can be one of the following values:
  938. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080007FF
  939. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08000FFF
  940. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080017FF
  941. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08001FFF
  942. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080027FF
  943. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08002FFF
  944. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080037FF
  945. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08003FFF
  946. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080047FF
  947. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08004FFF
  948. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080057FF
  949. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08005FFF
  950. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080067FF
  951. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08006FFF
  952. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080077FF
  953. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08007FFF
  954. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080087FF
  955. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08008FFF
  956. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080097FF
  957. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08009FFF
  958. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800A7FF
  959. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800AFFF
  960. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800B7FF
  961. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800BFFF
  962. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800C7FF
  963. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800CFFF
  964. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800D7FF
  965. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800DFFF
  966. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800E7FF
  967. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800EFFF
  968. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800F7FF
  969. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800FFFF
  970. * @retval None.
  971. */
  972. __STATIC_INLINE void LL_FLASH_SetSDKAddress(FLASH_TypeDef *FLASHx,uint32_t SDKStartAddress,uint32_t SDKEndAddress)
  973. {
  974. MODIFY_REG(FLASHx->SDKR, FLASH_SDKR_SDK_STRT | FLASH_SDKR_SDK_END , SDKStartAddress | SDKEndAddress);
  975. }
  976. /**
  977. * @brief Get SDK Start Address
  978. * @rmtoll SDKR SDK_STRT LL_FLASH_GetSDKStartAddress
  979. * @param FLASHx FLASH Instance
  980. * @retval Returned value can be a one of the following values:
  981. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000000
  982. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000800
  983. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001000
  984. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001800
  985. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002000
  986. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002800
  987. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003000
  988. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003800
  989. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004000
  990. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004800
  991. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005000
  992. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005800
  993. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006000
  994. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006800
  995. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007000
  996. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007800
  997. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008000
  998. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008800
  999. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009000
  1000. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009800
  1001. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A000
  1002. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A800
  1003. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B000
  1004. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B800
  1005. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C000
  1006. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C800
  1007. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D000
  1008. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D800
  1009. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E000
  1010. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E800
  1011. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F000
  1012. * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F800
  1013. * @retval None
  1014. */
  1015. __STATIC_INLINE uint32_t LL_FLASH_GetSDKStartAddress(FLASH_TypeDef *FLASHx)
  1016. {
  1017. return READ_BIT(FLASHx->SDKR, FLASH_SDKR_SDK_STRT);
  1018. }
  1019. /**
  1020. * @brief Get SDK End Address
  1021. * @rmtoll SDKR SDK_END LL_FLASH_GetSDKEndAddress
  1022. * @param FLASHx FLASH Instance
  1023. * @retval Returned value can be a one of the following values:
  1024. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080007FF
  1025. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08000FFF
  1026. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080017FF
  1027. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08001FFF
  1028. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080027FF
  1029. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08002FFF
  1030. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080037FF
  1031. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08003FFF
  1032. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080047FF
  1033. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08004FFF
  1034. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080057FF
  1035. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08005FFF
  1036. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080067FF
  1037. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08006FFF
  1038. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080077FF
  1039. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08007FFF
  1040. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080087FF
  1041. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08008FFF
  1042. * @arg @ref LL_FLASH_SDKENDADDRESS_0X080097FF
  1043. * @arg @ref LL_FLASH_SDKENDADDRESS_0X08009FFF
  1044. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800A7FF
  1045. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800AFFF
  1046. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800B7FF
  1047. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800BFFF
  1048. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800C7FF
  1049. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800CFFF
  1050. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800D7FF
  1051. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800DFFF
  1052. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800E7FF
  1053. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800EFFF
  1054. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800F7FF
  1055. * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800FFFF
  1056. * @retval None
  1057. */
  1058. __STATIC_INLINE uint32_t LL_FLASH_GetSDKEndAddress(FLASH_TypeDef *FLASHx)
  1059. {
  1060. return (READ_BIT(FLASHx->SDKR, FLASH_SDKR_SDK_END));
  1061. }
  1062. /**
  1063. * @}
  1064. */
  1065. /** @defgroup FLASH_LL_EF_WRP_Management WRP Management
  1066. * @{
  1067. */
  1068. /**
  1069. * @brief Set WRP Address
  1070. * @note Depending on devices and packages, some Sectors may not be available.
  1071. * Refer to device datasheet for Sectors availability.
  1072. * @rmtoll WRPR WRP LL_FLASH_SetWRPRAddress
  1073. * @param FLASHx FLASH Instance
  1074. * @param Address This parameter can be a combination of the following values:
  1075. * @arg @ref LL_FLASH_WRP_DISABLE
  1076. * @arg @ref LL_FLASH_WRP_SECTOR_0
  1077. * @arg @ref LL_FLASH_WRP_SECTOR_1
  1078. * @arg @ref LL_FLASH_WRP_SECTOR_2
  1079. * @arg @ref LL_FLASH_WRP_SECTOR_3
  1080. * @arg @ref LL_FLASH_WRP_SECTOR_4
  1081. * @arg @ref LL_FLASH_WRP_SECTOR_5
  1082. * @arg @ref LL_FLASH_WRP_SECTOR_6
  1083. * @arg @ref LL_FLASH_WRP_SECTOR_7
  1084. * @arg @ref LL_FLASH_WRP_SECTOR_8
  1085. * @arg @ref LL_FLASH_WRP_SECTOR_9
  1086. * @arg @ref LL_FLASH_WRP_SECTOR_10
  1087. * @arg @ref LL_FLASH_WRP_SECTOR_11
  1088. * @arg @ref LL_FLASH_WRP_SECTOR_12
  1089. * @arg @ref LL_FLASH_WRP_SECTOR_13
  1090. * @arg @ref LL_FLASH_WRP_SECTOR_14
  1091. * @arg @ref LL_FLASH_WRP_SECTOR_15
  1092. * @arg @ref LL_FLASH_WRP_Pages0to31
  1093. * @arg @ref LL_FLASH_WRP_Pages32to63
  1094. * @arg @ref LL_FLASH_WRP_Pages64to95
  1095. * @arg @ref LL_FLASH_WRP_Pages96to127
  1096. * @arg @ref LL_FLASH_WRP_Pages128to159
  1097. * @arg @ref LL_FLASH_WRP_Pages160to191
  1098. * @arg @ref LL_FLASH_WRP_Pages192to223
  1099. * @arg @ref LL_FLASH_WRP_Pages224to255
  1100. * @arg @ref LL_FLASH_WRP_Pages256to287
  1101. * @arg @ref LL_FLASH_WRP_Pages288to319
  1102. * @arg @ref LL_FLASH_WRP_Pages320to351
  1103. * @arg @ref LL_FLASH_WRP_Pages352to383
  1104. * @arg @ref LL_FLASH_WRP_Pages384to415
  1105. * @arg @ref LL_FLASH_WRP_Pages416to447
  1106. * @arg @ref LL_FLASH_WRP_Pages448to479
  1107. * @arg @ref LL_FLASH_WRP_Pages480to511
  1108. * @arg @ref LL_FLASH_WRP_AllPages
  1109. * @retval None
  1110. */
  1111. __STATIC_INLINE void LL_FLASH_SetWRPAddress(FLASH_TypeDef *FLASHx,uint32_t Address)
  1112. {
  1113. MODIFY_REG(FLASHx->WRPR, FLASH_WRPR_WRP , ((~(Address)) & FLASH_WRPR_WRP));
  1114. }
  1115. /**
  1116. * @brief Get WRP Address
  1117. * @note Depending on devices and packages, some Sectors may not be available.
  1118. * Refer to device datasheet for Sectors availability.
  1119. * @rmtoll WRPR WRP LL_FLASH_GetWRPAddress
  1120. * @param FLASHx FLASH Instance
  1121. * @retval Returned value can be a combination of the following values:
  1122. * @arg @ref LL_FLASH_WRP_DISABLE
  1123. * @arg @ref LL_FLASH_WRP_SECTOR_0
  1124. * @arg @ref LL_FLASH_WRP_SECTOR_1
  1125. * @arg @ref LL_FLASH_WRP_SECTOR_2
  1126. * @arg @ref LL_FLASH_WRP_SECTOR_3
  1127. * @arg @ref LL_FLASH_WRP_SECTOR_4
  1128. * @arg @ref LL_FLASH_WRP_SECTOR_5
  1129. * @arg @ref LL_FLASH_WRP_SECTOR_6
  1130. * @arg @ref LL_FLASH_WRP_SECTOR_7
  1131. * @arg @ref LL_FLASH_WRP_SECTOR_8
  1132. * @arg @ref LL_FLASH_WRP_SECTOR_9
  1133. * @arg @ref LL_FLASH_WRP_SECTOR_10
  1134. * @arg @ref LL_FLASH_WRP_SECTOR_11
  1135. * @arg @ref LL_FLASH_WRP_SECTOR_12
  1136. * @arg @ref LL_FLASH_WRP_SECTOR_13
  1137. * @arg @ref LL_FLASH_WRP_SECTOR_14
  1138. * @arg @ref LL_FLASH_WRP_SECTOR_15
  1139. * @arg @ref LL_FLASH_WRP_Pages0to31
  1140. * @arg @ref LL_FLASH_WRP_Pages32to63
  1141. * @arg @ref LL_FLASH_WRP_Pages64to95
  1142. * @arg @ref LL_FLASH_WRP_Pages96to127
  1143. * @arg @ref LL_FLASH_WRP_Pages128to159
  1144. * @arg @ref LL_FLASH_WRP_Pages160to191
  1145. * @arg @ref LL_FLASH_WRP_Pages192to223
  1146. * @arg @ref LL_FLASH_WRP_Pages224to255
  1147. * @arg @ref LL_FLASH_WRP_Pages256to287
  1148. * @arg @ref LL_FLASH_WRP_Pages288to319
  1149. * @arg @ref LL_FLASH_WRP_Pages320to351
  1150. * @arg @ref LL_FLASH_WRP_Pages352to383
  1151. * @arg @ref LL_FLASH_WRP_Pages384to415
  1152. * @arg @ref LL_FLASH_WRP_Pages416to447
  1153. * @arg @ref LL_FLASH_WRP_Pages448to479
  1154. * @arg @ref LL_FLASH_WRP_Pages480to511
  1155. * @arg @ref LL_FLASH_WRP_AllPages
  1156. */
  1157. __STATIC_INLINE uint32_t LL_FLASH_GetWRPAddress(FLASH_TypeDef *FLASHx)
  1158. {
  1159. return ((~(READ_BIT(FLASHx->WRPR, FLASH_WRPR_WRP))) & FLASH_WRPR_WRP);
  1160. }
  1161. /**
  1162. * @}
  1163. */
  1164. /** @defgroup FLASH_LL_EF_OPTR_Management OPTR Management
  1165. * @{
  1166. */
  1167. #ifdef FLASH_OPTR_WWDG_SW
  1168. /**
  1169. * @brief Set Optr
  1170. * @rmtoll OPTR BOR_EN LL_FLASH_SetOPTR
  1171. * @rmtoll OPTR BOR_LEV LL_FLASH_SetOPTR
  1172. * @rmtoll OPTR nBOOT1 LL_FLASH_SetOPTR
  1173. * @rmtoll OPTR IWDG_SW LL_FLASH_SetOPTR
  1174. * @rmtoll OPTR WWDG_SW LL_FLASH_SetOPTR
  1175. * @rmtoll OPTR NRST_MODE LL_FLASH_SetOPTR
  1176. * @rmtoll OPTR RDP LL_FLASH_SetOPTR
  1177. * @param FLASHx FLASH Instance
  1178. * @param BOREnable This parameter can be one of the following values:
  1179. * @arg @ref LL_FLASH_BOR_ENABLE
  1180. * @arg @ref LL_FLASH_BOR_DISABLE
  1181. * @param BORLevel This parameter can be one of the following values:
  1182. * @arg @ref LL_FLASH_BOR_LEV0
  1183. * @arg @ref LL_FLASH_BOR_LEV1
  1184. * @arg @ref LL_FLASH_BOR_LEV2
  1185. * @arg @ref LL_FLASH_BOR_LEV3
  1186. * @arg @ref LL_FLASH_BOR_LEV4
  1187. * @arg @ref LL_FLASH_BOR_LEV5
  1188. * @arg @ref LL_FLASH_BOR_LEV6
  1189. * @arg @ref LL_FLASH_BOR_LEV7
  1190. * @param nBOOT1Mode This parameter can be one of the following values:LL_FLASH_NBOOT1_RST
  1191. * @arg @ref LL_FLASH_NBOOT1_CLR
  1192. * @arg @ref LL_FLASH_NBOOT1_SET
  1193. * @param IWDGMode This parameter can be one of the following values:
  1194. * @arg @ref LL_FLASH_IWDG_MODE_HW
  1195. * @arg @ref LL_FLASH_IWDG_MODE_SW
  1196. * @param WWDGMode This parameter can be one of the following values:
  1197. * @arg @ref LL_FLASH_WWDG_MODE_HW
  1198. * @arg @ref LL_FLASH_WWDG_MODE_SW
  1199. * @param NrstMode This parameter can be one of the following values:
  1200. * @arg @ref LL_FLASH_NRST_MODE_RESET
  1201. * @arg @ref LL_FLASH_NRST_MODE_GPIO
  1202. * @param RDPLevel This parameter can be one of the following values:
  1203. * @arg @ref LL_FLASH_RDP_LEVEL_0
  1204. * @arg @ref LL_FLASH_RDP_LEVEL_1
  1205. * @retval None
  1206. */
  1207. __STATIC_INLINE void LL_FLASH_SetOPTR(FLASH_TypeDef *FLASHx, \
  1208. uint32_t BOREnable, uint32_t BORLevel, uint32_t nBOOT1Mode, \
  1209. uint32_t IWDGMode, uint32_t WWDGMode, uint32_t NrstMode, \
  1210. uint32_t RDPLevel)
  1211. {
  1212. MODIFY_REG(FLASHx->OPTR, (FLASH_OPTR_BOR_EN | FLASH_OPTR_BOR_LEV | FLASH_OPTR_nBOOT1 | FLASH_OPTR_IWDG_SW | \
  1213. FLASH_OPTR_WWDG_SW | FLASH_OPTR_NRST_MODE | FLASH_OPTR_RDP), \
  1214. (BOREnable | BORLevel | nBOOT1Mode | WWDGMode | IWDGMode | NrstMode | RDPLevel));
  1215. }
  1216. #else
  1217. /**
  1218. * @brief Set Optr
  1219. * @rmtoll OPTR BOR_EN LL_FLASH_SetOPTR
  1220. * @rmtoll OPTR BOR_LEV LL_FLASH_SetOPTR
  1221. * @rmtoll OPTR nBOOT1 LL_FLASH_SetOPTR
  1222. * @rmtoll OPTR IWDG_SW LL_FLASH_SetOPTR
  1223. * @rmtoll OPTR NRST_MODE LL_FLASH_SetOPTR
  1224. * @rmtoll OPTR RDP LL_FLASH_SetOPTR
  1225. * @param FLASHx FLASH Instance
  1226. * @param BOREnable This parameter can be one of the following values:
  1227. * @arg @ref LL_FLASH_BOR_ENABLE
  1228. * @arg @ref LL_FLASH_BOR_DISABLE
  1229. * @param BORLevel This parameter can be one of the following values:
  1230. * @arg @ref LL_FLASH_BOR_LEV0
  1231. * @arg @ref LL_FLASH_BOR_LEV1
  1232. * @arg @ref LL_FLASH_BOR_LEV2
  1233. * @arg @ref LL_FLASH_BOR_LEV3
  1234. * @arg @ref LL_FLASH_BOR_LEV4
  1235. * @arg @ref LL_FLASH_BOR_LEV5
  1236. * @arg @ref LL_FLASH_BOR_LEV6
  1237. * @arg @ref LL_FLASH_BOR_LEV7
  1238. * @param nBOOT1Mode This parameter can be one of the following values:LL_FLASH_NBOOT1_RST
  1239. * @arg @ref LL_FLASH_NBOOT1_CLR
  1240. * @arg @ref LL_FLASH_NBOOT1_SET
  1241. * @param IWDGMode This parameter can be one of the following values:
  1242. * @arg @ref LL_FLASH_IWDG_MODE_HW
  1243. * @arg @ref LL_FLASH_IWDG_MODE_SW
  1244. * @param NrstMode This parameter can be one of the following values:
  1245. * @arg @ref LL_FLASH_NRST_MODE_RESET
  1246. * @arg @ref LL_FLASH_NRST_MODE_GPIO
  1247. * @param RDPLevel This parameter can be one of the following values:
  1248. * @arg @ref LL_FLASH_RDP_LEVEL_0
  1249. * @arg @ref LL_FLASH_RDP_LEVEL_1
  1250. * @retval None
  1251. */
  1252. __STATIC_INLINE void LL_FLASH_SetOPTR(FLASH_TypeDef *FLASHx, \
  1253. uint32_t BOREnable, uint32_t BORLevel, uint32_t nBOOT1Mode, \
  1254. uint32_t IWDGMode, uint32_t NrstMode, uint32_t RDPLevel)
  1255. {
  1256. MODIFY_REG(FLASHx->OPTR, (FLASH_OPTR_BOR_EN | FLASH_OPTR_BOR_LEV | FLASH_OPTR_nBOOT1 | \
  1257. FLASH_OPTR_IWDG_SW | FLASH_OPTR_NRST_MODE | FLASH_OPTR_RDP), \
  1258. (BOREnable | BORLevel | nBOOT1Mode | IWDGMode | NrstMode | RDPLevel));
  1259. }
  1260. #endif
  1261. /**
  1262. * @brief Get RDP Level
  1263. * @rmtoll OPTR RDP LL_FLASH_GetRDP
  1264. * @param FLASHx FLASH Instance
  1265. * @retval Returned value can be a combination of the following values:
  1266. * @arg @ref LL_FLASH_RDP_LEVEL_0
  1267. * @arg @ref LL_FLASH_RDP_LEVEL_1
  1268. */
  1269. __STATIC_INLINE uint32_t LL_FLASH_GetRDP(FLASH_TypeDef *FLASHx)
  1270. {
  1271. return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_RDP));
  1272. }
  1273. /**
  1274. * @}
  1275. */
  1276. /**
  1277. * @}
  1278. */
  1279. /**
  1280. * @}
  1281. */
  1282. #endif /* defined (FLASH) */
  1283. /**
  1284. * @}
  1285. */
  1286. #ifdef __cplusplus
  1287. }
  1288. #endif
  1289. #endif /* PY32F0xx_LL_FLASH_H */
  1290. /************************ (C) COPYRIGHT Puya *****END OF FILE****/