stm32f1xx EEPROM emulation (#3914)

* * Add stm32f1xx EEPROM emulation
* Fix eeprom update compare bug

Squashed commit of the following:

commit b8f248ae08cec0cd81ecbb8854d9b39221d4d573
Author: hsgw <urkwtky@gmail.com>
Date:   Sat Sep 15 19:13:48 2018 +0900

    fix EEPROM_update wrong compare

commit d4ed4e6ea864e967a3e17f7edee4b0c3b4a25541
Author: hsgw <urkwtky@gmail.com>
Date:   Sat Sep 15 17:43:47 2018 +0900

    eeprom fix initialization define

commit b61aa7c04d70c64df3416d63e5da08b73b6053af
Author: hsgw <urkwtky@gmail.com>
Date:   Sat Sep 15 16:33:40 2018 +0900

    maybe working

* Fix FLASH_KEY defines
This commit is contained in:
Takuya Urakawa
2018-10-19 13:33:23 +09:00
committed by Jack Humbert
parent 8efe8b498d
commit f4094930a3
7 changed files with 42 additions and 21 deletions

View File

@ -10,19 +10,27 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
* This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
* https://github.com/leaflabs/libmaple
*
* Modifications for QMK and STM32F303 by Yiancar
*/
#define STM32F303xC
#if defined(EEPROM_EMU_STM32F303xC)
#define STM32F303xC
#include "stm32f3xx.h"
#elif defined(EEPROM_EMU_STM32F103xB)
#define STM32F103xB
#include "stm32f1xx.h"
#else
#error "not implemented."
#endif
#include "stm32f3xx.h"
#include "flash_stm32.h"
#define FLASH_KEY1 ((uint32_t)0x45670123)
#define FLASH_KEY2 ((uint32_t)0xCDEF89AB)
#if defined(EEPROM_EMU_STM32F103xB)
#define FLASH_SR_WRPERR FLASH_SR_WRPRTERR
#endif
/* Delay definition */
#define EraseTimeout ((uint32_t)0x00000FFF)
@ -71,7 +79,7 @@ FLASH_Status FLASH_GetStatus(void)
* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
*/
FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)
{
{
FLASH_Status status;
/* Check for the Flash Status */
@ -102,7 +110,7 @@ FLASH_Status FLASH_ErasePage(uint32_t Page_Address)
ASSERT(IS_FLASH_ADDRESS(Page_Address));
/* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation(EraseTimeout);
if(status == FLASH_COMPLETE)
{
/* if the previous operation is completed, proceed to erase the page */
@ -128,7 +136,7 @@ FLASH_Status FLASH_ErasePage(uint32_t Page_Address)
* @param Address: specifies the address to be programmed.
* @param Data: specifies the data to be programmed.
* @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
*/
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)
{