stm32f103c8t6--LL库学习--FLASH读写

程序下载链接:点击这里
不过最好自己敲一遍,印象深刻一点。

一、使用stm32cudeMX创建工程

1、配置烧录方式

在这里插入图片描述

2、配置时钟源

在这里插入图片描述

3、配置时钟树

在这里插入图片描述

4、项目生成参数配置

在这里插入图片描述
在这里插入图片描述

5、最后生成一个这种工程文件夹

在这里插入图片描述
总的来说,用stm32cudeMX生成工程还满方便的。LL库和标准库风格差不多,偏底层一点,正好好好复习一波基本功。下面的flash读写操作,是根据hal库还有正点原子的程序魔改的。干了这么多年嵌入式,回头一看,基础是那么的不堪啊。。。。。。

二、代码部分

1、FLASH页擦除操作

思路大概如下:
在这里插入图片描述
代码部分:
在这里插入图片描述

2、FLASH读操作

FLASH的读操作非常的直接,直接通过地址读取对应的数据。
在这里插入图片描述

3、FLASH写操作

写操作大概的步骤是解锁->备份->修改备份->页擦除->写入->上锁
为什么要先擦除呢,我查了一下,原因是单片机flash是一种掉电不丢失的存储介质,他的存储单元是由浮动栅极晶体管构成。当电子被注入浮动栅极后,栅极的电荷就固定了,无法再次吸收电子。所以要执行擦除操作,把这个片区复原一下,再写入。

半字写入:
在这里插入图片描述
魔改hal的写入接口:
可以半字,一个字,还有两个写入。
在这里插入图片描述
已经进行过擦除操作,可以直接用这个函数:在这里插入图片描述
如果不知道之前擦没擦除过,可以用这个函数:

uint16_t g_flashbuf[2048/2];
FLASH_ERROR_CODE_E flash_write(uint32_t waddr, uint16_t *pbuf, uint16_t length)
{
   
	uint32_t secpos;	   //扇区页地址
	uint16_t secoff;	   //扇区内偏移地址(16位字计算)
	uint16_t secremain;    //扇区内剩余地址(16位字计算)	   
 	uint16_t i;    
	uint32_t offaddr;      //去掉0X08000000后的地址

	if((!pbuf) || (length < 1))      //判断参数合法性
    {
   
        return FLASH_PARAM_ERROR;
    }
	
	if(!IS_FLASH_ADDRESS(waddr))
    {
   
        return FLASH_ADDR_ERROR;     /* 非法地址 */
    }
   
    offaddr = waddr - STM32_FLASH_BASE;             /* 实际偏移地址. */
    secpos = offaddr 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值