基于STM32F103芯片的音频数据的Flash读取与DAC播放

该博客详细介绍了如何在STM32F103芯片上从Flash读取音频数据并利用DAC进行播放。内容包括Flash的内存映射、构成和写入流程,通过STM32CubeMX和keil进行配置,以及硬件和软件调试步骤。此外,还涉及DAC的基本概念和STM32中DAC模块的特点,以及数字音频的还原播放实例。
摘要由CSDN通过智能技术生成

基于STM32F103芯片的音频数据的Flash读取与DAC播放

1 Flash 概述

1.1 单片机内存映射

在这里插入图片描述

  1. STM32的flash地址起始于0x0800 0000结束地址是0x0800
    0000加上芯片实际的Flash大小,不同的芯片Flash大小不同。
    Flash中的内容一般用来存储代码和一些定义为 const 的数据,断电不丢失。 STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。
  2. stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。
  3. 一般情况下,程序文件是从 0x0800 0000 地址写入,这个是STM32开始执行的地方,0x0800 0004是STM32的中断向量表的起始地址。

1.2 Flash 构成

STM32F103的中容量内部 FLASH 包含主存储器系统存储器OTP 区域以及选项字节区域。他们的作用如下:

  • 主存储器:一般我们说 STM32 内部 FLASH 的时候,都是指这个主存储器区域它是存储用户应用程序的空间,芯片型号说明中的 1M
    FLASH、 2M FLASH 都是指这个区域的大小。与其它 FLASH 一样,在写入数据前,要先按扇区擦除,
  • 系统存储区:系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动代码,它负责实现串口、 USB 以及 CAN 等 ISP
    烧录功能。
  • OTP 区域:OTP(One Time Program),指的是只能写入一次的存储区域,容量为 512 字节,写入后数据就无法再更改,
    OTP 常用于存储应用程序的加密密钥。
  • 选项字节:选项字节用于配置 FLASH 的读写保护、电源管理中的 BOR 级别、软件/硬件看门狗等功能,这部分共 32 字节。可以通过子修改FLASH 的选项控制寄存器修改。

stm32根据FLASH主存储块容量、页面的不同,系统存储器的不同,分为小容量、中容量、大容量、互联型,共四类产品。

小容量产品:主存储块1-32KB, 每页1KB。系统存储器2KB
中容量产品:主存储块64-128KB, 每页1KB。系统存储器2KB
大容量产品:主存储块256KB以上, 每页2KB。系统存储器2KB
互联型产品:主存储块256KB以上, 每页2KB。系统存储器18KB

Flash 各部分的地址分布及大小如下(例如中容量产品):
在这里插入图片描述

1.3 Flash 写入流程

解锁——页擦除——写入数据

  1. 解锁
    往 FPEC 键寄存器 FLASH_KEYR 中写入 KEY1 = 0x45670123;
    再往 FPEC 键寄存器 FLASH_KEYR 中写入 KEY2 = 0xCDEF89AB
  2. 页擦除
    检查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以确认当前未执行任何 Flash 操作;
    在 FLASH_CR寄存器中,将“激活页擦除寄存器位 PER ”置 1;
    用 FLASH_AR 寄存器选择要擦除的页;
    将 FLASH_CR寄存器中的“开始擦除寄存器位 STRT ”置 1,开始擦除;
    等待 BSY 位被清零时,表示擦除完成。
  3. 写入数据
    检查 FLASH_SR 中的 BSY 位,以确认当前未执行任何其它的内部 Flash 操作;
    将 FLASH_CR寄存器中的 “激活编程寄存器位 PG” 置 1;
    向指定的 FLASH 存储器地址执行数据写入操作,每次只能以 16 位的方式写入;
    等待 BSY 位被清零时,表示写入完成。

2 读取Flash内存的实例

要求:
1)在SD卡创建一个test-speed.txt文件,循环(不加延时)分批一次写入256字节,累计写入不少于64KB字节;然后读取此文件数据,通过串口显示出来。分析写入和读取的速率。
2)Flash地址空间的数据读取。stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值