ch32v203 內(nèi)部Flash那塊可以用戶用

image.png?用你家開發(fā)的一款產(chǎn)品 現(xiàn)在要配置掉電不丟失 這個(gè)內(nèi)部flash那塊是可以我自己用的 然后又讀寫的例程參考嗎??

ch32v203F6B6


0x0800000開始的CODE FALSH掉電不丟失,把數(shù)據(jù)放在程序后面就行,我們的EVT例程有操作FLASH的image.png


void Flash_Test(void) {

? ? printf("FLASH Test\n");

? ? /*When the main frequency exceeds 100MHz, attention should be paid when

? ? ?*operating FLASH: dividing HCLK by two will result in the related peripheral

? ? ?*clock of HCLK being divided by two. Attention should be paid when using.

? ? ?*/

? ? RCC->CFGR0 |= (uint32_t) RCC_HPRE_DIV2; //將系統(tǒng)時(shí)鐘的主頻分頻為2

? ? __disable_irq();

? ? USART_Printf_Init(115200);


? ? FLASH_Unlock();


? ? NbrOfPage = (PAGE_WRITE_END_ADDR - PAGE_WRITE_START_ADDR) / FLASH_PAGE_SIZE;


? ? FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_WRPRTERR); //用于清除閃存操作標(biāo)志位


? ? for (EraseCounter = 0;

? ? ? ? ? ? (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE);

? ? ? ? ? ? EraseCounter++) {

? ? ? ? FLASHStatus = FLASH_ErasePage(

? ? ? ? ? ? ? ? PAGE_WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter)); //Erase 4KB


? ? ? ? if (FLASHStatus != FLASH_COMPLETE) {

? ? ? ? ? ? printf("FLASH Erase Fail\r\n");

? ? ? ? }

? ? ? ? printf("FLASH Erase Suc\r\n");

? ? }


? ? Address = PAGE_WRITE_START_ADDR;

? ? printf("Programing...\r\n");

? ? while((Address < PAGE_WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE))

? ? {

? ? ? ? FLASHStatus = FLASH_ProgramOptionByteData(Address, Data);

? ? ? ? Address = Address + 1;

? ? ? ? printf("Programing...\r\n");

? ? }


? ? Address = PAGE_WRITE_START_ADDR;


? ? printf("Program Cheking...\r\n");

? ? while((Address < PAGE_WRITE_END_ADDR) && (MemoryProgramStatus != FAILED))

? ? {

? ? ? ? if((*(__IO uint8_t*) Address) != Data)

? ? ? ? {

? ? ? ? ? ? MemoryProgramStatus = FAILED;

? ? ? ? }

? ? ? ? Address += 2;

? ? }


? ? if (MemoryProgramStatus == FAILED) {

? ? ? ? printf("Memory Program FAIL!\r\n");

? ? } else {

? ? ? ? printf("Memory Program PASS!\r\n");

? ? }


? ? FLASH_Lock();


? ? RCC->CFGR0 &= ~(uint32_t) RCC_HPRE_DIV2;

? ? __enable_irq();

? ? USART_Printf_Init(115200);

? ? printf("%08x \r\n", *(u32*) (FAST_FLASH_PROGRAM_START_ADDR));

}

例程是半字的寫 我改成一字節(jié)寫入 修改了寫的數(shù)據(jù)類型為uint8? 寫入函數(shù)? ?還要改別的嗎這是修改完的 但是提示寫入失敗? 幫忙看一下謝謝啦


FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);你那個(gè)是編程用戶字的函數(shù),地址是固定的,請(qǐng)?zhí)鎿Q這個(gè)函數(shù)試一下


不能存uint8的數(shù)據(jù)嗎


不支持單個(gè)字節(jié)編程,但是可以把數(shù)據(jù)強(qiáng)制轉(zhuǎn)換再寫進(jìn)去,要是數(shù)組的話,把數(shù)組類型強(qiáng)制轉(zhuǎn)換一下就行。根據(jù)使用半字或者字編程轉(zhuǎn)換


明白謝謝


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频