stm32L011寄存器操作flash
来源:互联网 发布:网络实用技术基础作业2 编辑:程序博客网 时间:2024/05/24 07:11
只有写一个地址功能,有其他需求的需要自己完善#ifndef __STM32FLASH_H#define __STM32FLASH_H#include "main.h"#define FLASH_USER_START_ADDR (FLASH_BASE + FLASH_PAGE_SIZE * 96) /* Start @ of user Flash area */#define FLASH_USER_END_ADDR FLASH_USER_START_ADDR + FLASH_PAGE_SIZE * 32 /* End @ of user Flash area */#define FLASH_PEKEY1 ((uint32_t)0x89ABCDEFU)#define FLASH_PEKEY2 ((uint32_t)0x02030405U)void STMFLASH_Unlock(void);void STMFLASH_Write(uint32_t WriteAddr,uint32_t Data);uint32_t STMFLASH_Read(uint32_t ReadAddr);#endif
#include "main.h"//解锁STM32的FLASHvoid STMFLASH_Unlock(void){ if(FLASH->PECR&FLASH_PECR_PRGLOCK) { if(FLASH->PECR&FLASH_PECR_PELOCK) { FLASH->PEKEYR=FLASH_PEKEY1;//写入解锁序列. FLASH->PEKEYR=FLASH_PEKEY2; } FLASH->PRGKEYR=FLASH_PRGKEY1;//写入解锁序列. FLASH->PRGKEYR=FLASH_PRGKEY2; }}void STMFLASH_lock(void){ FLASH->PECR|=FLASH_PECR_PRGLOCK;}//FLASH->SR & FLASH_FLAG_BSYunsigned char STMFLASH_Status(void){ unsigned char res = 0; if((FLASH->SR & FLASH_FLAG_BSY)==FLASH_FLAG_BSY ) { res = 1; } if( ((FLASH->SR&FLASH_FLAG_WRPERR) ==FLASH_FLAG_WRPERR) || ((FLASH->SR&FLASH_FLAG_PGAERR) ==FLASH_FLAG_PGAERR) || ((FLASH->SR&FLASH_FLAG_SIZERR) ==FLASH_FLAG_SIZERR) || ((FLASH->SR&FLASH_FLAG_OPTVERR) ==FLASH_FLAG_OPTVERR)|| ((FLASH->SR&FLASH_FLAG_RDERR) ==FLASH_FLAG_RDERR) || ((FLASH->SR&FLASH_FLAG_FWWERR) ==FLASH_FLAG_FWWERR) || ((FLASH->SR&FLASH_FLAG_NOTZEROERR) ==FLASH_FLAG_NOTZEROERR) ) { res = 2; } return res;}unsigned char STMFlash_WaitDone(unsigned short time){ unsigned char res; do { res = STMFLASH_Status(); if(res != 1) break; time--; }while(time); if(0 == time) res = 0xff; return res;}unsigned char STMFlash_ErasePage(uint32_t padd){ unsigned char res = 0; FLASH->PECR |= FLASH_PECR_ERASE; FLASH->PECR |= FLASH_PECR_PROG; *(__IO uint32_t *)(uint32_t)(FLASH_USER_START_ADDR & ~(FLASH_PAGE_SIZE - 1)) = 0x00000000; STMFlash_WaitDone(0x3fff); FLASH->PECR&=~FLASH_PECR_PROG; FLASH->PECR&=~FLASH_PECR_ERASE; return res;}void STMFLASH_Write(uint32_t WriteAddr,uint32_t Data) { //(FLASH->ACR)&=~FLASH_ACR_DISAB_BUF; STMFLASH_Unlock(); STMFlash_ErasePage(0); STMFlash_WaitDone(0x3fff); *(__IO uint32_t *)WriteAddr = Data; STMFlash_WaitDone(0x3fff); STMFLASH_lock();}uint32_t STMFLASH_Read(uint32_t ReadAddr){ uint32_t data32; data32 = *(__IO uint32_t *)ReadAddr; return data32;}
阅读全文
0 0
- stm32L011寄存器操作flash
- 寄存器操作
- 寄存器操作
- 寄存器操作
- stm32 BKP寄存器操作[操作寄存器+库函数]
- stm32 BKP寄存器操作[操作寄存器+库函数]
- stm32 BKP寄存器操作[操作寄存器+库函数]
- 寄存器操作的方法
- Modbus协议寄存器操作
- STM32串口寄存器操作
- STM32 CRC寄存器操作
- ads1115寄存器操作
- mmap操作arm寄存器
- STM32串口寄存器操作
- 寄存器绝对地址操作
- 裸机寄存器操作
- CPU寄存器操作方式
- STM8 寄存器操作GPIO
- leetcode 14 Longest Common Prefix
- Qt之QSS(样式表语法)【转】
- Linux ftp 命令
- alpha版、beta版、rc版的意思
- bzoj2049 洞穴勘探【LCT模板】
- stm32L011寄存器操作flash
- ES笔记
- MapReduce(Shuffer原理)
- 正则表达式贪婪与非贪婪模式
- SparkStreaming
- Java8新特性(内置的核心函数式接口)
- java多线程打印出“A12B34C56D78E910...”的简单理解
- 推荐一个下载中国城市统计年鉴的地址
- ABI vs API