打印
[MM32软件]

MM32写FLASH操作

[复制链接]
1223|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#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[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");
}


使用特权

评论回复
地板
lu0754| | 2022-3-3 15:32 | 只看该作者
程序文件直接发上来更好

使用特权

评论回复
5
carpsnow| | 2022-3-3 16:43 | 只看该作者
不全吧,应该

使用特权

评论回复
6
tpgf| | 2022-3-7 20:39 | 只看该作者
看来时序都是差不多的

使用特权

评论回复
7
zljiu| | 2022-3-7 20:45 | 只看该作者
楼主的这个代码格式是怎么发出来的呢

使用特权

评论回复
8
tfqi| | 2022-3-7 20:57 | 只看该作者
有没有读的代码啊

使用特权

评论回复
9
nawu| | 2022-3-7 21:06 | 只看该作者
每次需要多久的延时呢

使用特权

评论回复
10
drer| | 2022-3-7 21:27 | 只看该作者
一般电压不能低于多少啊

使用特权

评论回复
11
qcliu| | 2022-3-7 21:45 | 只看该作者
一次可以写入多少数据啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

449

帖子

1

粉丝