【合泰杯】HT32F52352的Flash使用(HT32F52367通用)

因为需要掉电存储的数据很少,所以采用HT32F52352内部Flash进行掉电存储。使用到的是ht32f5xxxxflash.c和ht32f5xxxx_flash.h这两个库函数内容,以下示范的是简单的删除页、写入和读取数据。

主要使用的是以下两个接口

/*********************************************************************************************************//**
 * @brief Erase a specific FLASH page.
 * @param PageAddress: Address of the erased page.
 * @retval FLASH_State
 *   - \ref FLASH_COMPLETE
 *   - \ref FLASH_TIME_OUT
 *   - \ref FLASH_ERR_WRITE_PROTECTED
 *   - \ref FLASH_ERR_ADDR_OUT_OF_RANGE
 * @note  HSI must keep turn on when doing the Flash operation (Erase/Program).
 ************************************************************************************************************/
FLASH_State FLASH_ErasePage(u32 PageAddress)
{
  /* Check the parameters                                                                                   */
  Assert_Param(IS_FLASH_ADDRESS(PageAddress));

  HT_FLASH->TADR = PageAddress;
  HT_FLASH->OCMR = FLASH_CMD_PAGEERASE;

  return FLASH_WaitForOperationEnd();
}
/*********************************************************************************************************//**
 * @brief Program one word data.
 * @param Address: The specific FLASH address to be programmed.
 * @param Data: The specific FLASH data to be programmed.
 * @retval FLASH_State
 *   - \ref FLASH_COMPLETE
 *   - \ref FLASH_TIME_OUT
 *   - \ref FLASH_ERR_WRITE_PROTECTED
 *   - \ref FLASH_ERR_ADDR_OUT_OF_RANGE
 * @note  HSI must keep turn on when doing the Flash operation (Erase/Program).
 ************************************************************************************************************/
FLASH_State FLASH_ProgramWordData(u32 Address, u32 Data)
{
  /* Check the parameters                                                                                   */
  Assert_Param(IS_FLASH_ADDRESS(Address));

  HT_FLASH->TADR = Address;
  HT_FLASH->WRDR = Data;
  HT_FLASH->OCMR = FLASH_CMD_PROGRAM;

  return FLASH_WaitForOperationEnd();
}

然后将以下代码复制到主函数,修改成自己的串口打印就可以运行测试

#define  FLASH_ReadWordData(addr)   (*((u32 volatile *) (addr)))    //读取数据的宏定义

#define StartAddress    (1024 * 100)//起始地址必须是1024的倍数   最大1024*128


int main()
{	
    u32 readdata1;
    u32 readdata2;
	
    char rdata[40];

    Bsp_Debug_Config();

    FLASH_ErasePage(StartAddress);//擦除page,需先擦除再写入
    FLASH_ProgramWordData(StartAddress,12345);//在StartAddress写入12345
    FLASH_ProgramWordData(StartAddress+4,67890);//在StartAddress偏移四个4字节写入67890

    readdata1=FLASH_ReadWordData(StartAddress);//在StartAddress读取数据
    readdata2=FLASH_ReadWordData(StartAddress+4);//在StartAddress偏移四个4字节读取数据
    sprintf(rdata,"num1:%d,num2:%d",readdata1,readdata2);//将读取的数据合并
    Bsp_Debug_Printf("%s",rdata);//串口打印

    while(1)
    {
    }
}

后续移植了easy flash可前往下一篇文章查看【合泰杯】HT32F52352的Flash移植easyflash(HT32F52367通用)-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值