MM32写FLASH操作
#include "delay.h"#include "sys.h"
#include "led.h"
#include "uart.h"
#include "flash.h"
void flashwrite(char* data);
void flashread();
/********************************************************************************************************
**函数信息 :main(void)
**功能描述 :
**输入参数 :无
**输出参数 :无
********************************************************************************************************/
int main(void)
{
u8 t = 0;
char data[] = {"Hello,world."};//将要写入的数据
delay_init();
LED_Init();
uart_initwBaudRate(9600);
flashwrite(data);
flashread();
while(1) //LED,无限循环
{
printf("program ok\r\n");
flashread(); //从flash读写入的数据
LED1_TOGGLE();
LED2_TOGGLE();
LED3_TOGGLE();
LED4_TOGGLE();
delay_ms(1000);
}
}
写FLASH
#include "flash.h"
#include "uart.h"
#include "flash.h"
void flashwrite(char* data)
{
u32 baseaddr = 0x08002ffc;//查看Flash地址,定义将要写入的起始地址
int i = 0;
/* Porgram FLASH Bank1 ********************************************************/
/* Unlock the Flash Bank1 Program Erase controller */
FLASH->KEYR = 0x45670123;//解锁
FLASH->KEYR = 0xCDEF89AB;
/* Clear All pending flags */
FLASH->SR = 0x00000001|0x00000004|0x00000010;
//PG(Programming) = 1,选择编程操作
FLASH->CR |= 0x1;
while(i < 12) //循环写入数据
{
*(__IO uint16_t*)baseaddr = *data | *(data + 1)<<8;
baseaddr = baseaddr + 2;
data += 2;
i++;
}
//Lock flash
FLASH->CR |= 0x00000080;
}
读FLASH
#include "flash.h"
#include "uart.h"
#include "flash.h"
void flashread()
{
/* Porgram FLASH Bank1 ********************************************************/
u32 baseaddr = 0x08002ffc;//查看Flash地址,定义将要读取的起始地址
char out;
int i = 0;
while(i < 15) //循环读取数据
{
out = *(__IO uint8_t*)baseaddr;
baseaddr = baseaddr + 1;
printf("%c",out);//通过uart打印输出到串口助手窗口
i++;
}
printf("\r\n");
}
程序文件直接发上来更好 不全吧,应该 看来时序都是差不多的 楼主的这个代码格式是怎么发出来的呢
有没有读的代码啊
每次需要多久的延时呢
一般电压不能低于多少啊
一次可以写入多少数据啊
页:
[1]