/** * @file eeprom.c * @author xxx * @date 2023-11-16 10:28:47 * @brief STM32L072xx EEPROM 驱动 * @copyright Copyright (c) 2023 by xxx, All Rights Reserved. */ #include "eeprom.h" #include "main.h" #ifdef STM32L072xx #define PEKEY1 0x89ABCDEF // FLASH_PEKEYR #define PEKEY2 0x02030405 // FLASH_PEKEYR #define LOCK __enable_irq(); // 系统开全局中断 #define UNLOCK __disable_irq(); // 系统关全局中断 /** * @brief 用于配置读取和写入EEPROM的函数 * @param {uint32_t} read_addr - 读取地址 * @param {uint8_t} *data - 存储数据的指针 * @param {uint16_t} length - 读取或写入的数据长度 * @return {*} * @note: 这些函数用于在特定的地址读取或写入数据到EEPROM中。地址和数据以字节为单位,长度以字节为单位。 */ void chip_eeprom_config_read(uint32_t read_addr, uint8_t *data, uint16_t length) { uint8_t *wAddr; wAddr = (uint8_t *)(read_addr); while (length--) { *data++ = *wAddr++; } } /** * @brief 用于配置写入EEPROM的函数 * @param {uint32_t} write_addr - 写入地址 * @param {uint8_t} *data - 存储数据的指针 * @param {uint16_t} length - 写入的数据长度 * @return {*} * @note: 这些函数用于在特定的地址写入数据到EEPROM中。地址和数据以字节为单位,长度以字节为单位。在写入数据之前,需要先解锁EEPROM,写入数据,然后锁定EEPROM。 */ void chip_eeprom_config_write(uint32_t write_addr, uint8_t *data, uint16_t length) { uint8_t *addr; addr = (uint8_t *)(write_addr); UNLOCK FLASH->PDKEYR = PEKEY1; FLASH->PDKEYR = PEKEY2; while (FLASH->PECR & FLASH_PECR_PELOCK) ; while (length--) { *addr++ = *data++; while (FLASH->SR & FLASH_SR_BSY) ; } FLASH->PECR |= FLASH_PECR_PELOCK; LOCK } #endif // STM32L072xx #ifdef STM32L476xx /** * @brief 用于配置读取和写入SRAM2的函数 * @param {uint32_t} read_addr - 读取地址 * @param {uint8_t} *data - 存储数据的指针 * @param {uint16_t} length - 读取或写入的数据长度 * @return {*} * @note: 这些函数用于在特定的地址读取或写入数据到SRAM2中。地址和数据以字节为单位,长度以字节为单位。 */ void chip_eeprom_config_read(uint32_t read_addr, uint8_t *data, uint16_t length) { } /** * @brief 用于配置写入SRAM2的函数 * @param {uint32_t} write_addr - 写入地址 从0开始 * @param {uint8_t} *data - 存储数据的指针 * @param {uint16_t} length - 写入的数据长度 * @return {*} * @note: 这些函数用于在特定的地址写入数据到SRAM2中。地址和数据以字节为单位,长度以字节为单位。 */ void chip_eeprom_config_write(uint32_t write_addr, uint8_t *data, uint16_t length) { } #endif // STM32L476xx