FlashSetup.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*--------------------------------------------------------------------------------------
  2. * @file FlashSetup.c
  3. * @author ZhangJing
  4. * @version base on stm32f0x
  5. * @date 2015.09.11
  6. * @brief 芯片内部flash驱动
  7. ---------------------------------------------------------------------------------------*/
  8. #include "stm32f10x_flash.h"
  9. #include "FlashSetup.h"
  10. /*********************************************************************************
  11. * Function: FlashWriteOperate
  12. * Object: flash写操作
  13. * 输入: uint8_t *writeDataBuf,uint16_t writeLen,uint32_t writeAddress
  14. * 输出: 无
  15. * 备注: 内部flash一次写两个字节,先根据相应地址进行擦除,再写入
  16. **********************************************************************************/
  17. void FlashWriteOperate( uint8_t *writeDataBuf,uint16_t writeLen,uint32_t writeAddress )
  18. {
  19. uint16_t i;
  20. uint16_t tempWriteData;
  21. FLASH_Unlock();
  22. FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR );
  23. //if(( writeAddress == HISTORY_RECORDQTY_ADDR) || (writeAddress == PARAMSET_DATA_START_ADDR ) || (writeAddress == HISTORY_DATA_START_ADDR ))
  24. {
  25. FLASH_ErasePage(writeAddress);
  26. }
  27. for( i = 0;i < writeLen / 2;i++ )
  28. {
  29. tempWriteData = writeDataBuf[i*2];
  30. tempWriteData <<= 8;
  31. tempWriteData += writeDataBuf[i*2+1];
  32. FLASH_ProgramHalfWord((writeAddress + i*2),tempWriteData);
  33. }
  34. FLASH_Lock();
  35. }
  36. /*********************************************************************************
  37. * Function: FlashReadOperate
  38. * Object: flash读操作
  39. * 输入: uint8_t *readDataBuf,uint16_t readLen,uint32_t readAddress
  40. * 输出: 无
  41. * 备注: 内部flash可以按单个字节读取
  42. **********************************************************************************/
  43. void FlashReadOperate( uint8_t *readDataBuf,uint16_t readLen,uint32_t readAddress)
  44. {
  45. uint16_t i;
  46. uint16_t tempData = 0;//临时变量
  47. for( i = 0;i < readLen / 2;i++ )
  48. {
  49. tempData = *(uint16_t *)( readAddress + i * 2 );
  50. readDataBuf[i * 2] = tempData / 256;
  51. readDataBuf[i * 2 + 1] = tempData % 256;
  52. }
  53. }