|
- #include "stm32f4xx_flash.h"
- #include "stm32f4xx.h"
- #include "modbus.h"
- #include "modbus_flash.h"
- #include "string.h"
-
- extern uint8_t ModbusCoil[1250];
- extern uint16_t ModbusReg[10000];
-
-
- uint8_t ModbusCoilWriteFlash(void)
- {
- uint32_t addres = MODBUS_FLASH_COIL_ADDR;
- uint16_t halfWord;
- FLASH_Status status;
-
- FLASH_Unlock();
- /*扇区擦除,写入之前必须先擦除*/
- status = FLASH_EraseSector(MODBUS_FLASH_SECTOR, VoltageRange_3);
-
- for(uint16_t i = 0; i < 1250; i += 2)
- {
- /*前面的放在低字节,后面的放在高字节*/
- halfWord = ((uint16_t)ModbusCoil[i + 1] << 8) | ((uint16_t)ModbusCoil[i]);
-
- status = FLASH_ProgramHalfWord(addres, ModbusCoil[i]);
-
- /*写入失败,停止写入*/
- if(status != FLASH_COMPLETE)
- {
- break;
- }
-
- addres += 2;
- }
- FLASH_Lock();
- }
-
-
- uint8_t ModbusRegWriteFlash(void)
- {
- uint32_t addres = MODBUS_FLASH_REG_ADDR;
- FLASH_Status status;
-
- FLASH_Unlock();
- /*扇区擦除,写入之前必须先擦除*/
- status = FLASH_EraseSector(MODBUS_FLASH_SECTOR, VoltageRange_3);
-
- for(uint16_t i = 0; i < 10000; i++)
- {
- status = FLASH_ProgramHalfWord(addres, ModbusReg[i]);
-
- /*写入失败,停止写入*/
- if(status != FLASH_COMPLETE)
- {
- break;
- }
-
- addres += 2;
- }
-
- FLASH_Lock();
- }
-
-
- uint8_t ModbusRegReadFlash(void)
- {
- memcpy(ModbusCoil, (const void *)MODBUS_FLASH_COIL_ADDR, 1250);
- }
-
- uint8_t ModbusCoilReadFlash(void)
- {
- memcpy(ModbusReg, (const void *)MODBUS_FLASH_REG_ADDR, 10000);
- }
|