Bladeren bron

FLASH读写功能编写

main
the_deepest 6 dagen geleden
bovenliggende
commit
3b89fa7f43
2 gewijzigde bestanden met toevoegingen van 93 en 0 verwijderingen
  1. +75
    -0
      modbus/modbus_flash.c
  2. +18
    -0
      modbus/modbus_flash.h

+ 75
- 0
modbus/modbus_flash.c Bestand weergeven

@@ -0,0 +1,75 @@
#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);
}


+ 18
- 0
modbus/modbus_flash.h Bestand weergeven

@@ -0,0 +1,18 @@
#ifndef __MODBUS_FLASH_H
#define __MODBUS_FLASH_H

/*写入FLASH中的Sector 11*/
/*FLASH地址每+1,代表1字节*/

/*Sector 11起始地址*/
#define MODBUS_FLASH_BASE 0x080E0000UL
/*Sector 11编号*/
#define MODBUS_FLASH_SECTOR FLASH_Sector_11
/*线圈数据起始地址*/
#define MODBUS_FLASH_COIL_ADDR MODBUS_FLASH_BASE
/*寄存器数据起始地址*/
#define MODBUS_FLASH_REG_ADDR (MODBUS_FLASH_BASE + 0x4E2UL) /*0x4E2 = K1250*/



#endif

Laden…
Annuleren
Opslaan