[MM32软件] MM32写FLASH操作

[复制链接]
1451|10
 楼主| 菜鸟的第一步 发表于 2022-2-28 12:10 | 显示全部楼层 |阅读模式
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "led.h"
  4. #include "uart.h"
  5. #include "flash.h"

  6. void flashwrite(char* data);
  7. void flashread();
  8. /********************************************************************************************************
  9. **函数信息 :main(void)                     
  10. **功能描述 :
  11. **输入参数 :无
  12. **输出参数 :无
  13. ********************************************************************************************************/
  14. int main(void)   
  15. {
  16.     u8 t = 0;
  17.     char data[] = {"Hello,world."};  //将要写入的数据
  18.    
  19.     delay_init();
  20.     LED_Init();
  21.     uart_initwBaudRate(9600);
  22.         
  23.     flashwrite(data);
  24.     flashread();

  25.    
  26.     while(1)              //LED,无限循环
  27.         {
  28.             printf("program ok\r\n");
  29.             flashread();             //从flash读写入的数据
  30.             LED1_TOGGLE();
  31.             LED2_TOGGLE();
  32.             LED3_TOGGLE();
  33.             LED4_TOGGLE();
  34.             delay_ms(1000);
  35.         }
  36. }


 楼主| 菜鸟的第一步 发表于 2022-2-28 12:11 | 显示全部楼层
写FLASH
  1. #include "flash.h"
  2. #include "uart.h"
  3. #include "flash.h"

  4. void flashwrite(char* data)
  5. {
  6.     u32 baseaddr = 0x08002ffc;  //查看Flash地址,定义将要写入的起始地址
  7.     int i = 0;
  8.     /* Porgram FLASH Bank1 ********************************************************/      
  9.     /* Unlock the Flash Bank1 Program Erase controller */
  10.     FLASH->KEYR = 0x45670123;  //解锁
  11.     FLASH->KEYR = 0xCDEF89AB;
  12.    
  13.     /* Clear All pending flags */
  14.     FLASH->SR = 0x00000001|0x00000004|0x00000010;
  15.    
  16.     //PG(Programming) = 1,选择编程操作
  17.     FLASH->CR |= 0x1;
  18.    
  19.     while(i < 12)       //循环写入数据
  20.     {
  21.         *(__IO uint16_t*)baseaddr = *data | *(data + 1)<<8;
  22.         baseaddr = baseaddr + 2;
  23.         data += 2;
  24.         i++;        
  25.     }      
  26.         
  27.     //Lock flash
  28.     FLASH->CR |= 0x00000080;
  29. }


 楼主| 菜鸟的第一步 发表于 2022-2-28 12:14 | 显示全部楼层
读FLASH
  1. #include "flash.h"
  2. #include "uart.h"
  3. #include "flash.h"

  4. void flashread()
  5. {
  6.     /* Porgram FLASH Bank1 ********************************************************/      

  7.     u32 baseaddr = 0x08002ffc;  //查看Flash地址,定义将要读取的起始地址
  8.     char out[15];
  9.     int i = 0;
  10.    
  11.     while(i < 15)              //循环读取数据
  12.     {
  13.         out[i] = *(__IO uint8_t*)baseaddr;
  14.         baseaddr = baseaddr + 1;
  15.         printf("%c",out[i]);  //通过uart打印输出到串口助手窗口
  16.         i++;
  17.          
  18.     }
  19.     printf("\r\n");
  20. }


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 | 显示全部楼层
一次可以写入多少数据啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

459

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部