FlashSetup.c 2.3 KB

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