图1
图1是一个STM32F407的开发板,这个板子的制造分为三个层次,第一个层次是有ARM公司设计的,ARM公司的业务是设计Cortex-Mx内核和调试系统,负责第一个层次的只有ARM公司一家。ARM公司将设计的内核和调试系统的技术授权给芯片公司,芯片公司在内核的基础上设计内部总线、芯片内部的外设、存储器、时钟和复位以及IO口,芯片制作公司将这些模块集成在一个芯片内,这个芯片是第二个层次,图1正中央的芯片就是属于第二个层次,这是由ST公司设计的F4系列的芯片,称为STM32F407。第三个层次则是由开发板制造公司完成的,他们直接购买第二个层次的芯片,在芯片的基础上将芯片的IO口焊接上各种各样的片外的外设,这些外设是供初学者学习用的,在实际的工业生产之中,某一个具体工业产品的设计应该从第二个层次出发,来设计符合自己工业生产用的专用的单片机,只需开发产品需要的片外外设即可。这就是单片机开发板的三个层次。
下面介绍STM32F407芯片的内部架构。F4芯片内有8个主控总线和7个被控总线。主控模块通过总控总线到被控总线之间的连接来控制被控模块。主控模块能控制被控模块,而被控模块无法通过总线来控制主控模块的工作。
图2
主控总线与被控总线之间通过总线矩阵连接,如图2所示,矩阵中有点的表示这里可以讲主控与被控总线接通,没有点则表示不能接通。第一个要注意的是左上角的CCM RAM这个不经过总线矩阵直接与D总线相连而不和I总线相连所以只能存储数据,不能存储代码,由于不和DMA相连,所以DMA不能从CCM中读取数据。优点是访问速度快。第二个要注意的是右下角AHB1与APB1、APB2桥接,在STM32F407中,AHB1/2的的时钟频率是168MHz,APB1的时钟频率是42MHz,APB2的时钟频率是84MHz,当然这是指最高时钟频率。这一部分是与外设向连接的部分,之所以要设置不同的最高时钟频率,也是由于外设对于时钟频率的需求不同,为了节省时钟资源降低能耗,才有了这几个不同的时钟频率的模块。
图3
图3中左上角用红框框起来的就是主控模块,主控模块右侧用浅蓝色框框起来的就是被控模块,下方用绿色框框起来的就是各种芯片内部外设和IO引脚,他们连接在AHB1、APB1\2上通过图3可以看到各个外设接在那个模块,进而得到他们的时钟频率。右上方用黑框框起来的是芯片的五个时钟源包括两个外部时钟源和三个内部时钟源。