#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <stdint.h>
#pragma pack (1)
struct Testing_Equipment
{
uint8_t IDString[4];
uint8_t LED_Stauts;
uint8_t Channel;
uint8_t Test;
uint8_t Remote;
uint8_t Output_Mode;
uint8_t Output_Enable;
uint8_t INT_EXT_Mode;
uint8_t Save;
uint8_t Reset;
uint16_t Delay;
uint16_t Modulation_Freq;
uint16_t Base_Freq;
uint16_t Input_Signal;
float Voltage_Increment;
float Current_Channel_Voltage;
float Current_last_offset;
float MAX_Voltage;
float MIN_Voltage;
float High_Voltage_A;
float High_Voltage_B;
float Low_Voltage_A;
float Low_Voltage_B;
float temperature;
};
#pragma pack ()
struct Testing_Equipment t1;
const uint32_t dataflashbase = 0x0001F000;
uint8_t length = 0;
uint8_t byte[4] = {0};
void Init_Equipment(struct Testing_Equipment *t)
{
memcpy(&t->IDString[0], "LCC1", 4);
t->LED_Stauts = 0;
t->Channel = 1;
t->Test = 0;
t->Remote = 0;
t->Output_Enable = 0;
t->Output_Mode = 0;
t->INT_EXT_Mode = 0;
t->Save = 0;
t->Reset = 0;
t->Delay = 0;
t->Modulation_Freq = 200;
t->Base_Freq = 2000;
t->Input_Signal = 0;
t->Voltage_Increment = 0.0;
t->Current_Channel_Voltage = 0.0;
t->Current_last_offset = 0.0;
t->MAX_Voltage = 0.0;
t->MIN_Voltage = 0.0;
t->High_Voltage_A = 9.0;
t->High_Voltage_B = -9.0;
t->Low_Voltage_A = 5.0;
t->Low_Voltage_B = -5.0;
}
void flash_erase_size(uint32_t addr, uint32_t size)
{
SYS_UnlockReg();
FMC_ENABLE_AP_UPDATE();
for (size_t i = 0; i < size; i += 4)
{
FMC_Erase(addr + i);
}
FMC_DISABLE_AP_UPDATE();
SYS_LockReg();
}
void flash_write_buff(uint32_t addr, uint8_t *buff, uint8_t len)
{
SYS_UnlockReg();
FMC_ENABLE_AP_UPDATE();
size_t j = 0;
for (size_t i = 0; i < len * 4; i += 4)
{
if(j < len)
{
FMC_Write(addr + i, buff[j]);
j += 1;
}
}
FMC_DISABLE_AP_UPDATE();
SYS_LockReg();
}
void flash_read_tobuff(uint32_t addr, uint8_t *buff, uint8_t len)
{
SYS_UnlockReg();
FMC_ENABLE_AP_UPDATE();
size_t j = 0;
for (size_t i = 0; i < len * 4; i += 4)
{
buff[j] = FMC_Read(addr + i);
j++;
}
FMC_DISABLE_AP_UPDATE();
SYS_LockReg();
}
uint8_t *float_to_byte(float f, uint8_t *byte, uint8_t len)
{
uint8_t *ptr = (uint8_t*)&f;
for (size_t i = 0; i < len; i++)
{
byte[i] = *ptr++;
}
return byte;
}
float byte_to_float(uint8_t *byte, uint8_t len)
{
float temp;
uint8_t *ptr = (uint8_t*)&temp;
for (size_t i = 0; i < len; i++)
{
ptr[i] = byte[i];
}
return temp;
}
uint8_t flash_save_buff[1024] = {0};
int main(int argc, char *argv[])
{
length = sizeof(t1);
uint8_t *ptr = (uint8_t*)&t1;
memcpy(&flash_save_buff[0], ptr, sizeof (t1));
flash_write_buff(dataflashbase, flash_save_buff, length);
for (int i = 0; i < 4; i++) {
printf("%c", buff[i]);
}
printf("\n");
for (int i = 4; i < 19; i++) {
printf("%d ", buff[i]);
}
printf("\n");
for (int i = 20; i < 56; i++) {
printf("%#x ", buff[i]);
}
return 0;
}