| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /*--------------------------------------------------------------------------------------
- * @file FlashSetup.c
- * @author ZhangJing
- * @version base on stm32f0x
- * @date 2015.09.11
- * @brief 芯片内部flash驱动
- ---------------------------------------------------------------------------------------*/
- #include "stm32f10x_flash.h"
- #include "FlashSetup.h"
- /*********************************************************************************
- * Function: FlashWriteOperate
- * Object: flash写操作
- * 输入: uint8_t *writeDataBuf,uint16_t writeLen,uint32_t writeAddress
- * 输出: 无
- * 备注: 内部flash一次写两个字节,先根据相应地址进行擦除,再写入
- **********************************************************************************/
- void FlashWriteOperate( uint8_t *writeDataBuf,uint16_t writeLen,uint32_t writeAddress )
- {
- uint16_t i;
- uint16_t tempWriteData;
- FLASH_Unlock();
- FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR );
- //if(( writeAddress == HISTORY_RECORDQTY_ADDR) || (writeAddress == PARAMSET_DATA_START_ADDR ) || (writeAddress == HISTORY_DATA_START_ADDR ))
- {
- FLASH_ErasePage(writeAddress);
- }
- for( i = 0;i < writeLen / 2;i++ )
- {
- tempWriteData = writeDataBuf[i*2];
- tempWriteData <<= 8;
- tempWriteData += writeDataBuf[i*2+1];
- FLASH_ProgramHalfWord((writeAddress + i*2),tempWriteData);
- }
- FLASH_Lock();
- }
- /*********************************************************************************
- * Function: FlashReadOperate
- * Object: flash读操作
- * 输入: uint8_t *readDataBuf,uint16_t readLen,uint32_t readAddress
- * 输出: 无
- * 备注: 内部flash可以按单个字节读取
- **********************************************************************************/
- void FlashReadOperate( uint8_t *readDataBuf,uint16_t readLen,uint32_t readAddress)
- {
- uint16_t i;
- uint16_t tempData = 0;//临时变量
- for( i = 0;i < readLen / 2;i++ )
- {
- tempData = *(uint16_t *)( readAddress + i * 2 );
- readDataBuf[i * 2] = tempData / 256;
- readDataBuf[i * 2 + 1] = tempData % 256;
- }
- }
|