河北水利局项目

This commit is contained in:
2025-12-15 16:07:49 +08:00
commit f11a7c2b95
1146 changed files with 452892 additions and 0 deletions

166
APP/Flash.c Normal file
View File

@@ -0,0 +1,166 @@
/*——————————————————————————
* 文 件 名Flash.c
* 作 者:于涛
* 日 期2014-01-15
* 文件说明内部FLASH源文件
*——————————————————————————*/
#include "Flash.h"
#include "General.h"
#include "Mem.h"
/*——————————————————————————
* 函 数 名STM32_FlashPageErase
* 输入参数pageAddr 页地址
* 输出参数None
* 返 回 值0 成功
1 失败
* 功能说明内部FLASH页擦除
*——————————————————————————*/
u8 STM32_FlashPageErase(u32 pageAddr)
{
FLASH_Status status = FLASH_COMPLETE;
FEED_WDG;
FLASH_Unlock();
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
//FLHDBG(printf("STM32_FlashPageErase pageAddr = %08x\r\n",pageAddr););
status = FLASH_ErasePage(pageAddr);
if(status != FLASH_COMPLETE)
{
printf("STM32_FlashPageErase Err pageAddr = %08x status = %d\r\n",pageAddr,status);
return FLH_ERASE_ERR;
}
FLASH_Lock();
return FLH_SUCCESS;
}
/*——————————————————————————
* 函 数 名STM32_FlashWrite
* 输入参数programAddr 写地址
pBuffer 写缓冲区
size 写缓冲区大小
* 输出参数None
* 返 回 值0 成功
>0 失败
* 功能说明内部FLASH写操作
*——————————————————————————*/
u8 STM32_FlashWrite(u32 programAddr, u8* pBuffer, u16 size)
{
u8 sflag;
u16 offset = 0,len = size;
FLASH_Status status = FLASH_COMPLETE;
FLASH_Unlock();
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
sflag = len%2;
if(sflag)
{
len --;
}
for(offset = 0; offset < len; offset += 2)
{
status = FLASH_ProgramHalfWord(programAddr + offset, ((u16)(pBuffer[offset + 1]) << 8) | (pBuffer[offset]));
if(status != FLASH_COMPLETE)
{
printf("STM32_FlashWrite Err programAddr = %08x size = %d offset = %d status = %d\r\n",programAddr,size,offset,status);
return FLH_WRITE_ERR;
}
}
if(sflag && size>=1)
{
u16 val;
val = pBuffer[size - 1]|0xFF00;
status = FLASH_ProgramHalfWord(programAddr + offset, val);
if(status != FLASH_COMPLETE)
{
printf("STM32_FlashWrite Err programAddr = %08x size = %d offset = %d status = %d\r\n",programAddr,size,offset,status);
return FLH_WRITE_ERR;
}
}
FLASH_Lock();
return FLH_SUCCESS;
}
/*——————————————————————————
* 函 数 名STM32_FlashWriteZero
* 输入参数None
* 输出参数None
* 返 回 值:见错误代码表
* 功能说明:对某一地址写0
*——————————————————————————*/
u8 STM32_FlashWriteZero(u32 programAddr, u16 size)
{
u16 offset = 0;
FLASH_Status status = FLASH_COMPLETE;
FLASH_Unlock();
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
if (size%2==1)
{
size +=1;
}
for(offset = 0; offset < size; offset += 2)
{
status = FLASH_ProgramHalfWord(programAddr + offset, 0);
if(status != FLASH_COMPLETE)
{
//FLHDBG(printf("STM32FLASH: Write zero error."););
return FLH_WRITE_ERR;
}
}
FLASH_Lock();
return FLH_SUCCESS;
}
/*****************************************************************************
* Function : read_unique_id
* Description : none
* Input : u8 * id
* Output : None
* Return :
* Others :
* Record
* 1.Date : 20170314
* Author : barry
* Modification: Created function
*****************************************************************************/
bool read_unique_id(u8 * id)
{
for (u8 i = 0; i < 12; i++)
{
id[i] = *((u8*)(FLASH_ID_IDDR + i));
}
for (u8 i = 0; i < 12; i++)
{
if (id[i] != 0xFF)
{
return TRUE;
}
}
return FALSE;
}