MM32Flash读写操作(兼容STM32)

MM32Flash读写操作(兼容STM32)

Flash基础描述

思维导图

847278-20161204135936724-610108041.png

编程实现读写操作

主函数结构

847278-20161204135849146-1709151976.jpg

#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写操作

847278-20161204135723787-383075226.jpg

#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[15];
    int i = 0;
    
    while(i < 15)              //循环读取数据
    {
        out[i] = *(__IO uint8_t*)baseaddr;
        baseaddr = baseaddr + 1;
        printf("%c",out[i]);  //通过uart打印输出到串口助手窗口
        i++;
         
    }
    printf("\r\n");
}

实现结果

847278-20161204135742459-1688070672.png
847278-20161204135751693-361645626.jpg

参考资料

[1]. MM32 miniboard资料

转载于:https://www.cnblogs.com/OneFri/p/6130712.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值