stm32使用内部flash替代eepramIC解密
IC解密//===============FLASHD.H=========================
#ifndef __FLASHD_H
#define __FLASHD_H
#include <stdbool.h>
#include "stm32f10x.h" // 替换为您的设备头文件
extern uint32_t RMnum ; //保存读写次数 索引
uint32_t MyFLASH_ReadWord(uint32_t Address);
uint16_t MyFLASH_ReadHalfWord(uint32_t Address);
uint8_t MyFLASH_ReadByte(uint32_t Address);
void MyFLASH_EraseAllPages(void);
void MyFLASH_ErasePage(uint32_t PageAddress);
void MyFLASH_ProgramWord(uint32_t Address, uint32_t Data);
void MyFLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
// 读取区块
void ReadBlock(uint16_t block_index, uint16_t *block);
// 写入区块
void WriteBlock(uint16_t block_index, uint16_t *block);
// 查找具有最大RMnum的区块
uint16_t FindMaxRMnumBlock(void);
// 初始化函数
extern void FlashInit(unsigned short *Dat_16);
// 读取存档
extern bool FlashInit_Dat(unsigned short *Dat_16);
// 保存数据函数
extern void SaveData(unsigned short *Dat_16);
// 擦除存储区所有页
extern void Store_Clear(void);
#endif
#include "stm32f10x.h" // 设备头文件
#include "FLASHD.h" //
//适用与STM32F103RCT6
#define FLASH_BASE_ADDRESS 0x08030000 // Flash存储器的基地址32F103RCT6(192K地址)剩余64K
#define FLASH_PAGE_SIZE 2048 // 每页的大小(字节)
#define FLASH_BLOCK_SIZE 256 // 每个区块的大小(字节)每个页存8个区
#define FLASH_BLOCK_COUNT 200 // 区块数量必须小于剩余块数,要求1页块数的倍数 当前剩余最多512
#define DATA_COUNT 80 // 定义Dat16内保存参数的数量必须<=(FLASH_BLOCK_SIZE-4)/2 当前最大126
/* 适用与STM32F103C8T6
#define FLASH_BASE_ADDRESS 0x0800D000 // Flash存储器的基地址(52K地址)剩余12K
#define FLASH_PAGE_SIZE 1024 // 每页的大小(字节)
#define FLASH_BLOCK_SIZE 128 // 每个区块的大小(字节)每个页存8个区
#define FLASH_BLOCK_COUNT 96 // 区块数量必须小于剩余块数,最好8的倍数最大96
#define DATA_COUNT 50 // 定义Dat16内保存参数的数量必须<=(FLASH_BLOCK_SIZE-4)/2 根据区块最大60
*/
uint16_t max_index=0; //操作区块序号
uint16_t next_index=0;
uint32_t RMnum =0; //保存读写次数 索引

芯片解密