注释与语言的极大更新

使用了Doxygen注释风格,
使用了C++混合编程
This commit is contained in:
XerolySkinner
2022-11-08 01:47:39 +08:00
parent c2b2b3723a
commit 376a9edc0f
1704 changed files with 112524 additions and 867 deletions

View File

@@ -1,72 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_AT24C00
时间:20220802-2220
程序员:梁源康
说明:
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 头文件
#include "vartable.h"
#define IIC_ADDR_24C02 0x50
#define AT_PAGE 8
#define AT_IIC_COM bspIIC0
struct struct_AT_Dat AT_Dat={0,0,0};
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 程序
//
void AT_Delay(void){
HAL_Delay(5);}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// 基础实现
void AT_WriteOneByte(char ID,char addr,char dat){
IIC_WriteOneByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr,dat);
AT_Delay();}
char AT_ReadOneByte(char ID,char addr,char dat){
return IIC_ReadOneByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr);}
//----------------------------------------------------------------------------------------------------
void AT_WriteByte(char ID,char addr,char *dat,char len){
unsigned int member=0;
IIC_Start(AT_IIC_COM);
IIC_SendByte(AT_IIC_COM,(IIC_ADDR_24C02+ID)<<1);
IIC_WaitAck(AT_IIC_COM);
IIC_SendByte(AT_IIC_COM,addr);
IIC_WaitAck(AT_IIC_COM);
do{
IIC_SendByte(AT_IIC_COM,dat[member]);
IIC_WaitAck(AT_IIC_COM);
member++;
if(((member+addr)%AT_PAGE)==0){
IIC_Stop(AT_IIC_COM);
AT_Delay();
IIC_Start(AT_IIC_COM);
IIC_SendByte(AT_IIC_COM,(IIC_ADDR_24C02+ID)<<1);
IIC_WaitAck(AT_IIC_COM);
IIC_SendByte(AT_IIC_COM,addr+member);
IIC_WaitAck(AT_IIC_COM);}
}while(member!=len);
IIC_Stop(AT_IIC_COM);
AT_Delay();}
void AT_ReadByte(char ID,char addr,char *dat,char len){
IIC_ReadByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr,dat,len);}
//----------------------------------------------------------------------------------------------------
void AT_Write_Pack(char ID,struct struct_AT_Dat *AT_Dat){
AT_WriteByte(ID,0,(char*)AT_Dat,sizeof(struct struct_AT_Dat));}
void AT_Read_Pack(char ID,struct struct_AT_Dat *AT_Dat){
AT_ReadByte(ID,0,(char*)AT_Dat,sizeof(struct struct_AT_Dat));}
//////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,44 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_AT24C00
时间:20220802-2220
程序员:梁源康
说明:
*/
#ifndef _XEROLYSKINNER_AT24C00_H
#define _XEROLYSKINNER_AT24C00_H
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 写入数据
//
#pragma pack(1)
struct struct_AT_Dat{
char Var0;
short Var1;
int Var2;
};
#pragma pack()
extern struct struct_AT_Dat AT_Dat;
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 程序
//
void AT_WriteOneByte(char ID,char addr,char dat);
char AT_ReadOneByte(char ID,char addr,char dat);
void AT_WriteByte(char ID,char addr,char *dat,char len);
void AT_ReadByte(char ID,char addr,char *dat,char len);
void AT_Write_Pack(char ID,struct struct_AT_Dat *AT_Dat);
void AT_Read_Pack(char ID,struct struct_AT_Dat *AT_Dat);
//////////////////////////////////////////////////////////////////////////////////////////////////////
#endif

View File

@@ -1,74 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_Console
时间:20220805-0424
程序员:梁源康
说明:搭建上位机处理
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 头文件
#include "vartable.h"
#include "string.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 变量和定义
//
#define console_num(num) (*((num*)(console_buff+1)))
#define CONSOLE_BUFF_LEN 32
uint8_t console_buff[CONSOLE_BUFF_LEN]={0};
struct console_pack consolePack={0,0,0};
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 程序
//
void bsp_ConsoleInit(UART_HandleTypeDef *huart){
// 开启空闲中断
__HAL_UART_ENABLE_IT(huart,UART_IT_IDLE);
// 接收相关内容
HAL_UART_Receive_DMA(huart,console_buff,CONSOLE_BUFF_LEN);}
//----------------------------------------------------------------------------------------------------
void bsp_ConsoleJump(UART_HandleTypeDef *huart){
// 空闲中断跳转
if(__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE)!=RESET){
__HAL_UART_CLEAR_IDLEFLAG(huart);
HAL_UART_IdleCpltCallback(huart);}}
//----------------------------------------------------------------------------------------------------
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart){
HAL_UART_DMAStop(huart);
if(huart==&huart1){
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 按钮识别区
if(console_buff[0]==0){
switch(console_buff[1]){
case 0:
printf("按钮0");break;
case 1:
printf("按钮1");break;
default:
printf("按钮未知\r\n");break;}}
//----------------------------------------------------------------------------------------------------
// 包识别区-默认小端接收方式
if(console_buff[0]==1){
memcpy(&consolePack,console_buff+1,sizeof(struct console_pack));}
//----------------------------------------------------------------------------------------------------
// 数值识别区
if(console_buff[0]==2)printf("2号:%d\r\n",console_num(int));
//----------------------------------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////////////////////
}
HAL_UART_Receive_DMA(huart,console_buff,CONSOLE_BUFF_LEN);}
//////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,41 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_Console
时间:20220805-0424
程序员:梁源康
说明:搭建上位机处理
*/
#ifndef _XEROLYSKINNER_BSP_CONSOLE_H
#define _XEROLYSKINNER_BSP_CONSOLE_H
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 全包接收
//
#pragma pack(1)
struct console_pack{
uint8_t var0;
uint16_t var1;
uint32_t var2;
};
#pragma pack()
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 程序
//
void bsp_ConsoleInit(UART_HandleTypeDef *huart);
void bsp_ConsoleJump(UART_HandleTypeDef *huart);
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart);
//////////////////////////////////////////////////////////////////////////////////////////////////////
#endif

View File

@@ -1,152 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_IIC
时间:20220729-2031
程序员:梁源康
说明:IIC驱动
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 头文件
#include "vartable.h"
#include "bsp_IIC.h"
char (*bspIIC1[2])(char)={IIC1_SCK,IIC1_SDA};
#define bspIIC_SCK(IIC_VAR) bspIIC[0](IIC_VAR)
#define bspIIC_SDA(IIC_VAR) bspIIC[1](IIC_VAR)
enum{
IIC_RESET,
IIC_SET,
IIC_READ};
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 适配程序
//
// 延时函数
void IIC_Delay(void){
unsigned char i=0;
while(++i);}
// IIC1SCK函数
char IIC1_SCK(char var){
if(var==IIC_RESET){
HAL_GPIO_WritePin(IIC_SCK_GPIO_Port,IIC_SCK_Pin,GPIO_PIN_RESET);
return 2;}
else if(var==IIC_SET){
HAL_GPIO_WritePin(IIC_SCK_GPIO_Port,IIC_SCK_Pin,GPIO_PIN_SET);
return 2;}
else{
return HAL_GPIO_ReadPin(IIC_SCK_GPIO_Port,IIC_SCK_Pin);}
}
// IIC1SDA函数
char IIC1_SDA(char var){
if(var==IIC_RESET){
HAL_GPIO_WritePin(IIC_SDA_GPIO_Port,IIC_SDA_Pin,GPIO_PIN_RESET);
return 2;}
else if(var==IIC_SET){
HAL_GPIO_WritePin(IIC_SDA_GPIO_Port,IIC_SDA_Pin,GPIO_PIN_SET);
return 2;}
else{
return HAL_GPIO_ReadPin(IIC_SDA_GPIO_Port,IIC_SDA_Pin);}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 程序
//
//I2C总线启动信号
void IIC_Start(char (*bspIIC[])(char)){
bspIIC_SDA(SET);
bspIIC_SDA(IIC_SET);
bspIIC_SCK(IIC_SET);
IIC_Delay();
bspIIC_SDA(IIC_RESET);
IIC_Delay();
bspIIC_SCK(IIC_RESET);}
//I2C总线停止信号
void IIC_Stop(char (*bspIIC[])(char)){
bspIIC_SDA(IIC_RESET);
bspIIC_SCK(IIC_SET);
IIC_Delay();
bspIIC_SDA(IIC_SET);
IIC_Delay();}
//发送应答或非应答信号
void IIC_SendAck(char (*bspIIC[])(char),char ackbit){
bspIIC_SCK(IIC_RESET);
bspIIC_SDA(ackbit);
IIC_Delay();
bspIIC_SCK(IIC_SET);
IIC_Delay();
bspIIC_SCK(IIC_RESET);
bspIIC_SDA(IIC_SET);
IIC_Delay();}
//等待应答
char IIC_WaitAck(char (*bspIIC[])(char)){
char ackbit;
bspIIC_SCK(IIC_SET);
IIC_Delay();
ackbit = bspIIC_SDA(IIC_READ);
bspIIC_SCK(IIC_RESET);
IIC_Delay();
return ackbit;}
//I2C总线发送一个字节数据
void IIC_SendByte(char (*bspIIC[])(char),unsigned char byt){
unsigned char i;
for(i=0; i<8; i++){
bspIIC_SCK(IIC_RESET);
IIC_Delay();
bspIIC_SDA((byt & 0x80)!=0);
IIC_Delay();
bspIIC_SCK(IIC_SET);
byt <<= 1;
IIC_Delay();}
bspIIC_SCK(IIC_RESET);}
//I2C总线接收一个字节数据
unsigned char IIC_RecByte(char (*bspIIC[])(char)){
unsigned char i, da;
for(i=0;i<8;i++){
bspIIC_SCK(IIC_SET);
IIC_Delay();
da <<= 1;
if(bspIIC_SDA(IIC_READ))da |= 1;
bspIIC_SCK(IIC_RESET);
IIC_Delay();}
return da;}
//----------------------------------------------------------------------------------------------------
void IIC_WriteOneByte(char (*bspIIC[])(char),char id,char addr,char dat){
IIC_Start(bspIIC);
IIC_SendByte(bspIIC,id<<1);
IIC_WaitAck(bspIIC);
IIC_SendByte(bspIIC,addr);
IIC_WaitAck(bspIIC);
IIC_SendByte(bspIIC,dat);
IIC_WaitAck(bspIIC);
IIC_Stop(bspIIC);}
char IIC_ReadOneByte(char (*bspIIC[])(char),char id,char addr){
char temp=0;
IIC_Start(bspIIC);
IIC_SendByte(bspIIC,id<<1);
IIC_WaitAck(bspIIC);
IIC_SendByte(bspIIC,addr);
IIC_SendAck(bspIIC,0);
IIC_Start(bspIIC);
IIC_SendByte(bspIIC,(id<<1)|0x01);
IIC_SendAck(bspIIC,0);
temp=IIC_RecByte(bspIIC);
IIC_SendAck(bspIIC,1);
IIC_Stop(bspIIC);
return temp;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,46 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_IIC
时间:20220729-2031
程序员:梁源康
说明:IIC驱动
*/
#ifndef _XEROLYSKINNER_BSP_IIC_H
#define _XEROLYSKINNER_BSP_IIC_H
#define IIC_ADDR_24C02 0x50
extern char (*bspIIC1[2])(char);
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 前置程序
//
void IIC_Delay(void);
// 适配单元
char IIC1_SDA(char var);
char IIC1_SCK(char var);
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 前置程序
//
void IIC_Start(char (*bspIIC[])(char));
void IIC_Stop(char (*bspIIC[])(char));
void IIC_SendAck(char (*bspIIC[])(char),char ackbit);
char IIC_WaitAck(char (*bspIIC[])(char));
void IIC_SendByte(char (*bspIIC[])(char),unsigned char byt);
unsigned char IIC_RecByte(char (*bspIIC[])(char));
void IIC_WriteOneByte(char (*bspIIC[])(char),char id,char addr,char dat);
char IIC_ReadOneByte(char (*bspIIC[])(char),char id,char addr);
//////////////////////////////////////////////////////////////////////////////////////////////////////
#endif

View File

@@ -1,93 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_Queue
时间:20220806-0226
程序员:梁源康
说明:队列与FIFO函数
*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
// 声明
struct _Queue {
struct _Queue* front;
void* member;
struct _Queue* rear;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
// 主程序
struct _Queue* bsp_QueueInit(void) {
struct _Queue* list = malloc(sizeof(struct _Queue));
if (list == NULL)return NULL;
list->front = NULL;
list->rear = NULL;
list->member = NULL;
return list;}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 队列空检测
char bsp_QueueEmpty(struct _Queue *list) {
return (list->front == NULL && list->rear == NULL);}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 队列尾巴处压入成员
char bsp_QueuePush(struct _Queue *list,void* member) {
struct _Queue* listAdd = malloc(sizeof(struct _Queue));
struct _Queue* listFront = list->front;
struct _Queue* listRear = list->rear;
if (list == NULL)return 1; //防止爆炸
if (listAdd == NULL)return 1; //防止爆炸
listAdd->member = member; //加入聪明仔
// 空单位初始化
if (bsp_QueueEmpty(list)) {
list->front = list->rear = listAdd;
listAdd->front = listAdd->rear = listAdd;}
// 常单位续编
else {
listAdd->front = listRear; //新节点连接尾巴
listRear->rear = listAdd; //尾巴交接新节点
listAdd->rear = listAdd; //尾巴自交
list->rear = listAdd; //新尾巴
}
return 0;}
//--------------------------------------------------------------------------------------------------
char bsp_QueuePushCharPtr(struct _Queue* list, char* member, unsigned int len) {
char* enter = malloc(len+1);
if (enter == NULL)return 1;
enter[len] = '\0';
strcpy_s(enter,len+1, member);
bsp_QueuePush(list,enter);}
void bsp_QueuePushCharPtrFree(char* member) {
free(member);}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 队列头部弹出成员
void* bsp_QueuePop(struct _Queue* list) {
struct _Queue* listFront = list->front;
struct _Queue* listRear = list->rear;
void* result=NULL;
if (list == NULL)return NULL; //防止爆炸
if (bsp_QueueEmpty(list))return NULL; //寡妇函数
// 寡妇节点
if (listFront== listRear) {
list->front = list->rear = NULL;
result= listFront->member;}
else {
list->front = listFront->rear;
result= listFront->member;}
free(listFront); //抹脖子
return result;}
////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,43 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS A PART OF XerolySkinner's PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:bsp_Queue
时间:20220806-0226
程序员:梁源康
说明:队列与FIFO函数
*/
#ifndef _BSP_QUEUE
#define _BSP_QUEUE
////////////////////////////////////////////////////////////////////////////////////////////////////
// 函数声明
// 循环直到执行完全函数
#define bsp_QueuePopRunLoopVoid(Queue) \
do{ \
while(!bsp_QueueEmpty(Queue)) \
((void (*)(void))bsp_QueuePop(Queue))(); \
}while(0)
// 弹出并执行单个函数
#define bsp_QueuePopRunIfVoid(Queue) \
do{ \
if(!bsp_QueueEmpty(Queue)) \
((void (*)(void))bsp_QueuePop(Queue))(); \
}while(0)
// 常用队列处理函数
struct _Queue* bsp_QueueInit(void);
char bsp_QueueEmpty(struct _Queue* list);
char bsp_QueuePush(struct _Queue* list, void* member);
void* bsp_QueuePop(struct _Queue* list);
void bsp_QueuePushCharPtrFree(char* member);
char bsp_QueuePushCharPtr(struct _Queue* list, char* member, unsigned int len);
////////////////////////////////////////////////////////////////////////////////////////////////////
#endif

View File

@@ -1,55 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS PART OF XEROLYSKINNER'S PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:MainSystem
时间:20220713-2238
程序员:梁源康
说明:主程序
*/
#include "main.h"
uint32_t FlashAddr = 0x08010000; //起始地址
//----------------------------------------------------------------------------------------------------
#pragma pack(4)
struct struct_bsp_Flash_Pack{
char Var0;
short Var1;
int Var2;
}bsp_Flash_Pack={0,0,0};
#pragma pack()
//----------------------------------------------------------------------------------------------------
uint32_t bsp_WriteFlashOnePage(uint32_t *dat,uint32_t num){
FLASH_EraseInitTypeDef f;
uint32_t PageError = 0; //错误号7
HAL_FLASH_Unlock(); //解锁FLASH
f.TypeErase = FLASH_TYPEERASE_PAGES; //Flash擦除
f.PageAddress = FlashAddr; //擦除地址(起始页)
f.NbPages = 1; //擦除1页
HAL_FLASHEx_Erase(&f,&PageError); //调用擦除函数
for(int i=0;i<num;i++)
HAL_FLASH_Program(TYPEPROGRAM_WORD,FlashAddr+i*4,dat[i]); //对FLASH烧写
HAL_FLASH_Lock(); //锁住FLASH
return PageError;}
//----------------------------------------------------------------------------------------------------
void bsp_ReadFlash(uint32_t *dat,uint32_t num){ //读入一串数据
for(int i=0;i<num;i++)
dat[i]=*(__IO uint32_t*)(FlashAddr+i*4);}
//----------------------------------------------------------------------------------------------------
void bsp_WriteFlash_Pack(void){
bsp_WriteFlashOnePage((uint32_t*)(&bsp_Flash_Pack),sizeof(struct struct_bsp_Flash_Pack));
return;}
//----------------------------------------------------------------------------------------------------
void bsp_ReadFlash_Pack(void){
bsp_ReadFlash((uint32_t*)(&bsp_Flash_Pack),sizeof(struct struct_bsp_Flash_Pack));
return;}
//////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,31 +0,0 @@
/*----------------------------------------------------------------------------------------------------
# THIS FILE IS PART OF XEROLYSKINNER'S PROJECT
#
# THIS PROGRAM IS FREE SOFTWARE
#
# E-mail:ZABBCCCBBAZ@163.com
# QQ:2715099320
#
# Copyright (c) 2022 XerolySkinner
# All rights reserved.
*/
/*----------------------------------------------------------------------------------------------------
名字:MainSystem
时间:20220713-2238
程序员:梁源康
说明:主程序
*/
#ifndef _XEROLYSKINNER_BSP_FLASH_H
#define _XEROLYSKINNER_BSP_FLASH_H
#include "main.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// 程序
//
uint32_t bsp_WriteFlashOnePage(uint32_t *dat,uint32_t num);
void bsp_ReadFlash(uint32_t *dat,uint32_t num);
void bsp_WriteFlash_Pack(void);
void bsp_ReadFlash_Pack(void);
//////////////////////////////////////////////////////////////////////////////////////////////////////
#endif