菜鸟的第一步 发表于 2022-2-28 12:10

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);
      }
}

菜鸟的第一步 发表于 2022-2-28 12:11

写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;
}

菜鸟的第一步 发表于 2022-2-28 12:14

读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");
}

lu0754 发表于 2022-3-3 15:32

程序文件直接发上来更好

carpsnow 发表于 2022-3-3 16:43

不全吧,应该

tpgf 发表于 2022-3-7 20:39

看来时序都是差不多的

zljiu 发表于 2022-3-7 20:45

楼主的这个代码格式是怎么发出来的呢

tfqi 发表于 2022-3-7 20:57

有没有读的代码啊

nawu 发表于 2022-3-7 21:06

每次需要多久的延时呢

drer 发表于 2022-3-7 21:27

一般电压不能低于多少啊

qcliu 发表于 2022-3-7 21:45

一次可以写入多少数据啊
页: [1]
查看完整版本: MM32写FLASH操作