123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- /************************************************************************************************/
- /**
- * @file ciu32f003_std_flash.h
- * @author MCU Ecosystem Development Team
- * @brief FLASH STD库驱动头文件。
- * 提供FLASH相关的STD库操作函数声明、数据类型以及常量的定义。
- *
- *
- **************************************************************************************************
- * @attention
- * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
- *
- **************************************************************************************************
- */
- /*避免头文件重复引用*/
- #ifndef CIU32F003_STD_FLASH_H
- #define CIU32F003_STD_FLASH_H
- /************************************************************************************************/
- /**
- * @addtogroup CIU32F003_STD_Driver
- * @{
- */
- /**
- * @defgroup FLASH FLASH
- * @brief FLASH存储器的STD库驱动
- * @{
- */
- /************************************************************************************************/
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*------------------------------------------includes--------------------------------------------*/
- #include "ciu32f003_std_common.h"
- /*-------------------------------------------define---------------------------------------------*/
- /************************************************************************************************/
- /**
- * @defgroup FLASH_Constants FLASH Constants
- * @brief FLASH常量定义及宏定义
- * @{
- *
- */
- /************************************************************************************************/
- /* Flash读取访问等待周期 */
- #define FLASH_LATENCY_0CLK FLASH_ACR_LATENCY_0CLK /**< 等待周期:0 HCLK */
- #define FLASH_LATENCY_1CLK FLASH_ACR_LATENCY_1CLK /**< 等待周期:1 HCLK */
- /* Flash控制寄存器解锁密钥 */
- #define FLASH_CR_KEY1 (0xE57A1A85U) /**< Flash控制寄存器解锁密钥1 */
- #define FLASH_CR_KEY2 (0x7C6E8391U) /**< Flash控制寄存器解锁密钥2 */
- /* Flash选项字节解锁密钥 */
- #define FLASH_OPT_KEY1 (0x6A894D7BU) /**< Flash选项字节解锁密钥1 */
- #define FLASH_OPT_KEY2 (0x7C311F5AU) /**< Flash选项字节解锁密钥2 */
- /* Flash操作状态 */
- #define FLASH_FLAG_EOP FLASH_SR_EOP /**< Flash操作完成标志 */
- #define FLASH_FLAG_BSY FLASH_SR_BSY /**< Flash操作状态标志 */
- #define FLASH_FLAG_OPTVERR FLASH_SR_OPTVERR /**< Flash option bytes校验错误标志 */
- #define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /**< Flash写保护错误标志 */
- /* Flash中断源 */
- #define FLASH_INTERRUPT_OPERR FLASH_CR_OPERRIE /**< Flash操作异常中断 */
- #define FLASH_INTERRUPT_EOP FLASH_CR_EOPIE /**< Flash操作完成中断 */
- /* Flash操作模式 */
- #define FLASH_MODE_IDLE FLASH_CR_OP_MODE_IDLE /**< Flash退出擦除编程模式 */
- #define FLASH_MODE_PAGE_ERASE FLASH_CR_OP_MODE_PAGE_ERASE /**< Flash页擦除模式 */
- #define FLASH_MODE_MASS_ERASE FLASH_CR_OP_MODE_MASS_ERASE /**< Flash批量擦除模式 */
- #define FLASH_MODE_PROGRAM FLASH_CR_OP_MODE_PROGRAM /**< Flash编程模式 */
- /* 选项字节1 位域使能 */
- #define FLASH_PIN_MODE_MASK FLASH_OPTR1_NRST_SWD_MODE_MASK /**< NRST SWD引脚功能选择 */
- #define FLASH_PIN_MODE_NRST_SWD FLASH_OPTR1_NRST_SWD_MODE_0 /**< PC0: NRST PB6: SWDIO */
- #define FLASH_PIN_MODE_GPIO_SWD FLASH_OPTR1_NRST_SWD_MODE_2 /**< PC0: GPIO PB6: SWDIO */
- #define FLASH_PIN_MODE_SWD_GPIO FLASH_OPTR1_NRST_SWD_MODE_3 /**< PC0: SWDIO PB6: GPIO */
- #define FLASH_BOR_DISABLE (0x00000000U) /**< BOR禁止 */
- #define FLASH_BOR_ENABLE FLASH_OPTR1_BOR_EN /**< BOR使能 */
- #define FLASH_BOR_LEVEL_0 FLASH_OPTR1_BOR_LEVEL_0 /**< BOR检测电压上升/下降阈值:2.0/1.9V */
- #define FLASH_BOR_LEVEL_1 FLASH_OPTR1_BOR_LEVEL_1 /**< BOR检测电压上升/下降阈值:2.4/2.3V */
- #define FLASH_BOR_LEVEL_2 FLASH_OPTR1_BOR_LEVEL_2 /**< BOR检测电压上升/下降阈值:2.8/2.7V */
- #define FLASH_BOR_LEVEL_3 FLASH_OPTR1_BOR_LEVEL_3 /**< BOR检测电压上升/下降阈值:3.2/3.1V */
- #define FLASH_RDP_LEVEL_MASK FLASH_OPTR1_RDPRP_MASK /**< RDP配置域 */
- #define FLASH_RDP_LEVEL_0 (0x00000000U) /**< RDP保护等级0 */
- #define FLASH_RDP_LEVEL_1 (0x00000001U) /**< RDP保护等级1 */
- /* 选项字节2 位域使能 */
- #define FLASH_IWDG_STOP_MODE_STOP (0x00000000U) /**< IWDG在Stop模式下停止计数 */
- #define FLASH_IWDG_STOP_MODE_NORMAL FLASH_OPTR2_IWDG_STOP /**< IWDG在Stop模式下正常计数 */
- #define FLASH_STOP_RESET_ENABLE (0x00000000U) /**< 执行进入Stop模式操作,不进入Stop,产生复位 */
- #define FLASH_STOP_RESET_DISABLE FLASH_OPTR2_RST_STOP /**< 执行进入Stop模式操作,正常进入Stop,不产生复位 */
- /* 写保护区域配置 */
- #define FLASH_WRP_AREA_0 (0x0000003EU) /**< 写保护区域:0x00000000U ~ 0x00000FFF */
- #define FLASH_WRP_AREA_1 (0x0000003DU) /**< 写保护区域:0x00001000U ~ 0x00001FFF */
- #define FLASH_WRP_AREA_2 (0x0000003BU) /**< 写保护区域:0x00002000U ~ 0x00002FFF */
- #define FLASH_WRP_AREA_3 (0x00000037U) /**< 写保护区域:0x00003000U ~ 0x00003FFF */
- #define FLASH_WRP_AREA_4 (0x0000002FU) /**< 写保护区域:0x00004000U ~ 0x00004FFF */
- #define FLASH_WRP_AREA_5 (0x0000001FU) /**< 写保护区域:0x00005000U ~ 0x00005FFF */
- #define FLASH_WRP_AREA_ALL (0x00000000U) /**< User flash区域全部写保护 */
- #define FLASH_WRP_AREA_NONE (0x0000003FU) /**< User flash区域写保护关闭 */
- /**
- * @brief 计算Option Bytes区编程值
- * @param VAL OB区低16位预期编程值
- * @retval OB高16位取反后与低16位相加的值
- */
- #define FLASH_OB_DATA_CALCULATE(VAL) ((uint32_t)(((VAL) & 0xFFFF) | ((~(VAL & 0xFFFF)) << 16)))
- /**
- * @}
- */
- /*-------------------------------------------functions------------------------------------------*/
- /************************************************************************************************/
- /**
- * @defgroup FLASH_External_Functions FLASH External Functions
- * @brief FLASH对外函数
- * @{
- *
- */
- /************************************************************************************************/
- /**
- * @brief Flash控制寄存器解锁
- * @note FLASH控制器解锁后操作CRKEY寄存器会产生总线错误并锁定写保护,直至下次复位
- * @retval 无
- */
- __STATIC_INLINE void std_flash_unlock(void)
- {
- if ((FLASH->CR & FLASH_CR_LOCK) == FLASH_CR_LOCK)
- {
- FLASH->CRKEY = FLASH_CR_KEY1;
- FLASH->CRKEY = FLASH_CR_KEY2;
- }
- }
- /**
- * @brief Flash控制寄存器锁定
- * @retval 无
- */
- __STATIC_INLINE void std_flash_lock(void)
- {
- FLASH->CR |= FLASH_CR_LOCK;
- }
- /**
- * @brief 读取Flash锁定状态
- * @retval uint32_t Flash锁定状态
- * @arg 非0: 锁定
- * @arg 0: 未锁定
- */
- __STATIC_INLINE uint32_t std_flash_get_lock_status(void)
- {
- return (FLASH->CR & FLASH_CR_LOCK);
- }
- /**
- * @brief Flash选项字节解锁
- * @note FLASH 选项字节解锁后操作OPTKEY寄存器会产生总线错误并锁定写保护,直至下次复位
- * @retval 无
- */
- __STATIC_INLINE void std_flash_opt_unlock(void)
- {
- if ((FLASH->CR & FLASH_CR_OPTLOCK) == FLASH_CR_OPTLOCK)
- {
- FLASH->OPTKEY = FLASH_OPT_KEY1;
- FLASH->OPTKEY = FLASH_OPT_KEY2;
- }
- }
- /**
- * @brief Flash选项字节锁定
- * @retval 无
- */
- __STATIC_INLINE void std_flash_opt_lock(void)
- {
- FLASH->CR |= FLASH_CR_OPTLOCK;
- }
- /**
- * @brief 读取Flash选项字节锁定状态
- * @retval uint32_t Flash选项字节锁定状态
- * @arg 非0: 锁定
- * @arg 0: 未锁定
- */
- __STATIC_INLINE uint32_t std_flash_get_opt_lock_status(void)
- {
- return (FLASH->CR & FLASH_CR_OPTLOCK);
- }
- /**
- * @brief 设置FLASH读取访问等待周期
- * @param latency 读取访问等待周期
- * @arg FLASH_LATENCY_0CLK
- * @arg FLASH_LATENCY_1CLK
- * @retval 无
- */
- __STATIC_INLINE void std_flash_set_latency(uint32_t latency)
- {
- MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, latency);
- }
- /**
- * @brief 读取FLASH读取访问等待周期
- * @retval uint32_t 读取访问等待周期
- * @arg FLASH_LATENCY_0CLK
- * @arg FLASH_LATENCY_1CLK
- */
- __STATIC_INLINE uint32_t std_flash_get_latency(void)
- {
- return (FLASH->ACR & FLASH_ACR_LATENCY);
- }
- /**
- * @brief 使能FLASH中断
- * @param interrupts 中断源
- * @arg FLASH_INTERRUPT_OPERR
- * @arg FLASH_INTERRUPT_EOP
- * @retval 无
- */
- __STATIC_INLINE void std_flash_interrupt_enable(uint32_t interrupts)
- {
- FLASH->CR |= interrupts;
- }
- /**
- * @brief 禁止FLASH中断
- * @param interrupts 中断源
- * @arg FLASH_INTERRUPT_OPERR
- * @arg FLASH_INTERRUPT_EOP
- * @retval 无
- */
- __STATIC_INLINE void std_flash_interrupt_disable(uint32_t interrupts)
- {
- FLASH->CR &= (~interrupts);
- }
- /**
- * @brief 读取FLASH中断使能状态
- * @param interrupt 中断源
- * @arg FLASH_INTERRUPT_OPERR
- * @arg FLASH_INTERRUPT_EOP
- * @retval uint32_t FLASH中断使能状态
- * @arg 非0: 使能
- * @arg 0: 禁止
- */
- __STATIC_INLINE uint32_t std_flash_get_interrupt_enable(uint32_t interrupt)
- {
- return (FLASH->CR & interrupt);
- }
- /**
- * @brief 读取FLASH状态标志
- * @param flag 状态标志
- * @arg FLASH_FLAG_EOP
- * @arg FLASH_FLAG_BSY
- * @arg FLASH_FLAG_OPTVERR
- * @arg FLASH_FLAG_WRPERR
- * @retval uint32_t FLASH状态标志
- * @arg 非0: 标志位置位
- * @arg 0: 标志位清除
- */
- __STATIC_INLINE uint32_t std_flash_get_flag(uint32_t flag)
- {
- return (FLASH->SR & flag);
- }
- /**
- * @brief 清除FLASH状态标志
- * @param flags 状态标志组合
- * @arg FLASH_FLAG_EOP
- * @arg FLASH_FLAG_WRPERR
- * @retval 无
- */
- __STATIC_INLINE void std_flash_clear_flag(uint32_t flags)
- {
- FLASH->SR = flags;
- }
- /**
- * @brief 设置Flash操作模式
- * @param mode 擦除模式
- * @arg FLASH_MODE_IDLE
- * @arg FLASH_MODE_PAGE_ERASE
- * @arg FLASH_MODE_MASS_ERASE
- * @arg FLASH_MODE_PROGRAM
- * @retval 无
- */
- __STATIC_INLINE void std_flash_set_operate_mode(uint32_t mode)
- {
- MODIFY_REG(FLASH->CR, FLASH_CR_OP_MODE, mode);
- }
- /**
- * @brief 读取选项字节寄存器1
- * @retval uint32_t 选项字节1加载值
- */
- __STATIC_INLINE uint32_t std_flash_get_opt1(void)
- {
- return (FLASH->OPTR1);
- }
- /**
- * @brief 读取FLASH读保护等级
- * @retval uint32_t FLASH读保护等级
- * @arg FLASH_RDP_LEVEL_0
- * @arg FLASH_RDP_LEVEL_1
- */
- __STATIC_INLINE uint32_t std_flash_get_rdp_level(void)
- {
- return (FLASH->OPTR1 & FLASH_OPTR1_RDPRP);
- }
- /**
- * @brief 读取BOR阈值等级
- * @retval uint32_t FLASH读保护等级
- * @arg FLASH_BOR_LEVEL_0
- * @arg ...
- * @arg FLASH_BOR_LEVEL_3
- */
- __STATIC_INLINE uint32_t std_flash_get_bor_level(void)
- {
- return (FLASH->OPTR1 & FLASH_OPTR1_BOR_LEVEL);
- }
- /**
- * @brief 读取BOR使能控制
- * @retval uint32_t BOR使能控制
- * @arg FLASH_BOR_DISABLE
- * @arg FLASH_BOR_ENABLE
- */
- __STATIC_INLINE uint32_t std_flash_get_bor_en(void)
- {
- return (FLASH->OPTR1 & FLASH_OPTR1_BOR_EN);
- }
- /**
- * @brief 读取NRST SWD引脚功能控制
- * @retval uint32_t NRST SWD引脚功能选择
- * @arg FLASH_PIN_MODE_NRST_SWD
- * @arg FLASH_PIN_MODE_GPIO_SWD
- * @arg FLASH_PIN_MODE_SWD_GPIO
- */
- __STATIC_INLINE uint32_t std_flash_get_nrst_swd_mode(void)
- {
- return (FLASH->OPTR1 & FLASH_PIN_MODE_MASK);
- }
- /**
- * @brief 读取选项字节寄存器2
- * @retval uint32_t 选项字节2加载值
- */
- __STATIC_INLINE uint32_t std_flash_get_opt2(void)
- {
- return (FLASH->OPTR2);
- }
- /**
- * @brief 读取IWDG在STOP模式下计数器停止控制
- * @retval uint32_t IWDG_STOP设置
- * @arg FLASH_IWDG_STOP_MODE_STOP
- * @arg FLASH_IWDG_STOP_MODE_NORMAL
- */
- __STATIC_INLINE uint32_t std_flash_get_iwdg_stop(void)
- {
- return (FLASH->OPTR2 & FLASH_OPTR2_IWDG_STOP);
- }
- /**
- * @brief 读取进入STOP模式是否复位的配置
- * @retval uint32_t RST_STOP设置
- * @arg FLASH_STOP_RESET_ENABLE
- * @arg FLASH_STOP_RESET_DISABLE
- */
- __STATIC_INLINE uint32_t std_flash_get_rst_stop(void)
- {
- return (FLASH->OPTR2 & FLASH_OPTR2_RST_STOP);
- }
- /**
- * @brief 读取写保护区配置值
- * @retval uint32_t 写保护区配置值
- */
- __STATIC_INLINE uint32_t std_flash_get_wrp(void)
- {
- return (FLASH->WRP & FLASH_WRP_WRP);
- }
- /**
- * @brief 读取芯片型号
- * @retval uint32_t 芯片型号
- */
- __STATIC_INLINE uint32_t std_flash_get_device_type(void)
- {
- return (*(uint32_t *)DEVICE_TYPE);
- }
- /**
- * @brief 读取Flash空间大小
- * @retval uint32_t Flash空间大小
- */
- __STATIC_INLINE uint32_t std_flash_get_flash_size(void)
- {
- return (*(uint32_t *)USERFLASH_SIZE);
- }
- /**
- * @brief 读取SRAM空间大小
- * @retval uint32_t SRAM空间大小
- */
- __STATIC_INLINE uint32_t std_flash_get_sram_size(void)
- {
- return (*(uint32_t *)SRAM_SIZE);
- }
- std_status_t std_flash_erase(uint32_t mode, uint32_t address);
- std_status_t std_flash_word_program(uint32_t address, uint32_t prog_data);
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- /**
- * @}
- */
- /**
- * @}
- */
- #endif /* CIU32F003_STD_FLASH_H */
|