HC32L196内部flash读写函数
时间: 2023-08-29 07:13:16 浏览: 76
HC32L196是汉微科技推出的一款高性能32位微控制器,其内部Flash读写函数如下:
1. 写函数:
```c
en_result_t Flash_WriteData(uint32_t u32Addr, const uint8_t au8Data[], uint32_t u32Size)
{
en_result_t enRet = Ok;
if (NULL == au8Data)
{
enRet = ErrorInvalidParameter;
}
else
{
uint32_t u32DataIdx = 0U;
uint32_t u32EndAddr = u32Addr + u32Size;
/* Unlock the flash. */
Flash_Unlock();
/* Write data to flash. */
while ((u32Addr < u32EndAddr) && (Ok == enRet))
{
/* Write data to flash. */
enRet = Flash_WriteWord(u32Addr, *((uint32_t *)&au8Data[u32DataIdx]));
/* Update variables for next iteration. */
u32Addr += 4U;
u32DataIdx += 4U;
}
/* Lock the flash. */
Flash_Lock();
}
return enRet;
}
```
2. 读函数:
```c
en_result_t Flash_ReadData(uint32_t u32Addr, uint8_t au8Data[], uint32_t u32Size)
{
en_result_t enRet = Ok;
if (NULL == au8Data)
{
enRet = ErrorInvalidParameter;
}
else
{
uint32_t u32DataIdx = 0U;
uint32_t u32EndAddr = u32Addr + u32Size;
/* Read data from flash. */
while ((u32Addr < u32EndAddr) && (Ok == enRet))
{
/* Read data from flash. */
*((uint32_t *)&au8Data[u32DataIdx]) = Flash_ReadWord(u32Addr);
/* Update variables for next iteration. */
u32Addr += 4U;
u32DataIdx += 4U;
}
}
return enRet;
}
```
需要注意的是,Flash读写函数需要先调用Flash_Unlock()函数解锁Flash,操作完成后再调用Flash_Lock()函数锁定Flash。此外,Flash写入操作必须按照4字节对齐,即写入数据长度必须是4的倍数。