stm32程序怎么设置apb2总线时钟_STM32f103ZET6 学习资料 (连载3 存储器和总线构架 )...

在小容量、中容量和 大容量产品中,主系统由以下部分构成:

● 四个驱动单元:

Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)

─ 通用DMA1和通用DMA2

● 四个被动单元

─ 内部SRAM

─ 内部闪存存储器

─ FSMC

─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备

这些都是通过一个多级的AHB总线构架相互连接的。

STM32单片机系统架构

Icode总线: 总线连接内核与flash,因为单片机的程序指令都存储在flash里面,程序在运行的时候需要在flash芯片里面读取指令,所以Icode总线也成为指令总线,用来读取运行的指令。

Dcode总线:dcode总线也就是数据总线与闪存存储器的数据接口相连接常量加载与调试仿真。此处常量的是指定义的全局变量。程序在运行期间一直存活的变量。

系统总线 :此总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间 的访问。

DMA总线: 此总线将DMA的AHB主控接口与总线矩阵相联,总线矩阵协调着CPU的DCodeDMASRAM闪存外设的访问。

总线矩阵 :总线矩阵协调内核系统总线DMA主控总线之间的访问仲裁

仲裁利用轮换算法。(轮换在cpu里面有着至关重要的用途,轮换使内核资源合理的分配,才会使ICODE,DCODE,DMA,进行不阻塞通讯,还是很牛逼的)

在互联型产 品中,总线矩阵包含5个驱动部件(CPU的DCode、系统总线、以太网DMA、DMA1总线和 DMA2总线)和3个从部件(闪存存储器接口(FLITF)、SRAM和AHB2APB桥)。在其它产品中总线 矩阵包含4个驱动部件(CPU的DCode、系统总线、DMA1总线和DMA2总线)和4个被动部件(闪存 存储器接口(FLITF)、SRAM、FSMC和AHB2APB桥)。 AHB外设通过总线矩阵与系统总线相连,允许DMA访问。

AHB/APB桥(APB) 两个AHB/APB桥在AHB和2个APB总线间提供同步连接。

APB1操作速度限于36MHz。(APB1总线的最高速度位APB2总线速度的一半)例如挂在APB1上的

APB2操 作于全速(高72MHz)。 表1有关连接到每个桥的不同外设的地址映射请参考 。在每一次复位以后,所有除SRAM和 FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外 设的时钟。

注意:

当对 APB 寄存器进行 8 位或者 16 位访问时,该访问会被自动转换成 32 位的访问:桥会自动将 8 位 或者 32 位的数据扩展以配合 32 位的向量。为啥呢?因为stm32使32位单片机。

程序存储器数据存储器寄存器输入输出端口被组织在同一个4GB(2的32次方)的线性地址空间内。 数据字节以小端格式(小端格式:低字节在低地址,高字节在高地址,大端模式:高字节在低地址,低字节在高地址)存放在存储器中。一个字里的低地址字节被认为是该字的低有效字 节,而高地址字节是高有效字节。

可访问的存储器空间被分成8个主要块,每个块为512MB (8*512M=4G),所以把整个存储器4G空间平均分了8份。一些没有被外设等设备使用的空间,暂时把他作为默认,预留。

部分外设寄存器的地址

如图所示:ADC3的起始地址位 从 0x40013C00 到 0x40013FFF 则ADC3外设使用掉了0x40013FFF - 0x40013C00 = 0x3ff 个字节地址 那一个寄存器占用32位 也就是 4个字节。目前ADC3寄存器的位置用到了偏移基地址最大 0x4C 。此时基地址位0x40013C00,则对应adc3的第一个寄存器的位置偏移为0,第二个寄存器偏移就是0x04.........直到最大位0x4c.

其余的都为预留。

参考文档中的举例

STM32F10xxx内置64K字节的静态SRAM。它可以以字节、半字(16位)或全字(32位)访问。 SRAM的起始地址是0x2000 0000 (我认为此处的静态SRAM,用来存储程序中的静态变量。欢迎讨论)

闪存读取 闪存的指令和数据访问是通过AHB总线完成的。预取模块是用于通过ICode总线读取指令的。仲 裁是作用在闪存接口,并且DCode总线上的数据访问优先。 读访问可以有以下配置选项:

● 等待时间:可以随时更改的用于读取操作的等待状态的数量。

● 预取缓冲区(2个64位):在每一次复位以后被自动打开,由于每个缓冲区的大小(64位)与闪 存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。由于预取缓 冲区的存在,CPU可以工作在更高的主频。CPU每次取指多为32位的字,取一条指令 时,下一条指令已经在缓冲区中等待。

● 半周期:用于功耗优化

启动配置

启动配置

了解过DSP,FPGA的朋友们应该最熟悉这个启动配置了。

在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1 和BOOT0引脚的状态,来选择在复位后的启动模式。 在从待机模式退出时,BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持 为需要的启动配置。在启动延迟之后,CPU从地址0x0000 0000获取堆栈顶的地址,并从启动 存储器的0x0000 0004指示的地址开始执行代码。 因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问), 而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。Cortex-M3的CPU始终从 ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。STM32F10xxx 微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从 内置SRAM启动。 根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:

● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原 有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000 0000或0x0800 0000。

● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的 地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。

● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM

注 意 : 当 从 内 置 SRAM 启动,在应用程序的初始化代码中,必须使用 NVIC 的异常表和偏移寄存器,从 新映射向量表之 SRAM 中。

内嵌的自举程序 内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存 储器进行重新编程:

● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。进一步的 细节请查询AN2606。

● 对于互联型产品而言,可以通过以下某个接口启用自举程序:USART1、USART2(重映像 的)、CAN2(重映像的)或USB OTG全速接口的设备模式(通过设备固件更新DFU协议)。 USART接口依靠内部8MHz振荡器(HSI)运行。CAN和USB OTG接口只能当外部有一个 8MHz、14.7456MHz或25MHz时钟(HSE)时运行

你可能感兴趣的:(stm32程序怎么设置apb2总线时钟_STM32f103ZET6 学习资料 (连载3 存储器和总线构架 )...)