CW32F030FLASH读写代码
时间: 2023-07-02 10:12:29 浏览: 76
以下是基于C语言的CW32F030FLASH读写代码示例:
```c
#include "CW32F030.h"
#define FLASH_KEY1 0x45670123
#define FLASH_KEY2 0xCDEF89AB
void FLASH_Unlock(void)
{
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
}
void FLASH_Lock(void)
{
FLASH->CR |= FLASH_CR_LOCK;
}
int FLASH_ErasePage(uint32_t page_addr)
{
FLASH_Unlock();
FLASH->CR |= FLASH_CR_PER;
FLASH->AR = page_addr;
FLASH->CR |= FLASH_CR_STRT;
while ((FLASH->SR & FLASH_SR_BSY) != 0);
FLASH->CR &= ~FLASH_CR_PER;
FLASH_Lock();
return 0;
}
int FLASH_Write(uint32_t addr, uint32_t data)
{
FLASH_Unlock();
FLASH->CR |= FLASH_CR_PG;
*(volatile uint32_t*)addr = data;
while ((FLASH->SR & FLASH_SR_BSY) != 0);
FLASH->CR &= ~FLASH_CR_PG;
FLASH_Lock();
return 0;
}
uint32_t FLASH_Read(uint32_t addr)
{
return *(volatile uint32_t*)addr;
}
```
其中,FLASH_Unlock()函数用于解锁Flash,FLASH_Lock()函数用于锁定Flash。FLASH_ErasePage()函数用于擦除指定页的Flash,FLASH_Write()函数用于向指定地址写入数据,FLASH_Read()函数用于从指定地址读取数据。
注意:在操作Flash之前,需要先开启Flash时钟。另外,CW32F030的Flash按照256字节的一页进行划分,每页的地址需要对256取整。