未完待续!!!
STM32 主系统主要由四个驱动单元和四个被动单元构成。
四个驱动单元是:
内核 DCode 总线;
系统总线;
通用 DMA1;
通用 DMA2;
四被动单元是:
AHB 到 APB 的桥:连接所有的 APB 设备;
内部 FlASH 闪存;
内部 SRAM;
FSMC;
下面我们具体讲解一下图中几个总线的知识:
① ICode 总线:该总线将 M3 内核指令总线和闪存指令接口相连,指令的预取在该总线上
面完成。
② DCode 总线:该总线将 M3 内核的 DCode 总线与闪存存储器的数据接口相连接,常量
加载和调试访问在该总线上面完成。
③ 系统总线:该总线连接 M3 内核的系统总线到总线矩阵,总线矩阵协调内核和 DMA 间
访问。
④ DMA 总线:该总线将 DMA 的 AHB 主控接口与总线矩阵相连,总线矩阵协调 CPU 的
DCode 和 DMA 到 SRAM,闪存和外设的访问。
⑤ 总线矩阵:总线矩阵协调内核系统总线和 DMA 主控总线之间的访问仲裁,仲裁利用
轮换算法。
⑥ AHB/APB 桥:这两个桥在 AHB 和 2 个 APB 总线间提供同步连接, APB1 操作速度限于
36MHz,APB2 操作速度全速。
关键字:STM32 系统架构 操作速度
引用地址:
STM32开发 -- 系统架构
推荐阅读最新更新时间:2024-11-19 16:34
stm32 usb hid 移植时出现的问题及解决办法
由于项目需要,使用了stm32f107的芯片,移植了STM32_USB-Host-Device_Lib_V2.2.0 官方usb固件库,在UCOSII上运行,刚开始使用的是STM32_USB-FS-Device_Lib_V2.3.0的库,这个库网上资源较多,但是在使用的时候发现这个库和UCOSII的延时函数有冲突,导致ucos操作系统不能正常运行,经过调试没有发现原因,调试期间在st官网找到了最新的固件库STM32_USB-Host-Device_Lib_V2.2.0,于是移植过来使用,发现UCOS操作系统正常运行,官方提供的例程使用了端点1作为数据输入输出,我想改成端点1输入,端点2输出,通过查看 官网的库用户文档CD00289
[单片机]
STM32滴答时钟源的问题
#if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)24000000U) /*! Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ HSE_VALUE 值的大小决定了,时钟滴答的周期。 这个值的设置不会影响主频的时钟周期以及相关timer的变化。 __weak uint32_t HAL_RCC_GetSysClockFreq(void) { uint32_t pllm = 0U, pllvco = 0U, pllp = 0U; uint32_t sysclockfreq = 0U
[单片机]
实现STM32 Flash的读写
写flash FLASH_UnlockBank1(); FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); FLASHStatus = FLASH_ErasePage(BANK1_WRITE_START_ADDR);//BANK1_WRITE_START_ADDR 要擦除的页起始地址 Address = BANK1_WRITE_START_ADDR; FLASHStatus = FLASH_ProgramWord(Address, data);//Adress 需要写入的地址,data,写入的数据 FLASH_LockBank
[单片机]
STM32 TImer几种模式
输入捕获模式 库函数例程位置: STM32F10x_StdPeriph_Lib_V3.3.0ProjectSTM32F10x_StdPeriph_ExamplesTIMInputCapture 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。 在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。 PWM输入模式 库函数例程位置 :STM32F10x_StdPeriph_Lib_V3.3.0ProjectSTM32
[单片机]
STM32单片机的重映射与地址映射的使用方法及步骤
重映射 STM32中对于一些端口的外设已经被其他引脚所使用,这是就需要用端口重映射来解决了,很方便。 以USART1为例 重映射的步骤为: 打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); I/O口重映射开启。 GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); 配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置。 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitS
[单片机]
STM32外设驱动篇——AT24C02(I2C接口)
SOC:STM32F103RCT6 软件平台:STM官方库V3.5.0 开发工具:Keil 1. 摘要 本文章将给出STM32F103RCT6控制AT24C02的代码。如有疑问和错误,欢迎留言告之。 2.硬件连接 AT24C02使用I2C进行数据访问,板子上使用STM32的I2C控制器2和AT24C02进行连接。 具体来说,PB10作为SCL和AT24C02相连,PB11作为SDL和AT24C02相连。 这里就不给出硬件连接图了,比较简单。 3. AT24C022C访问代码(轮询) I2C这里使用轮询方法,不是中断,请留意。 首先,给出I2C控制器的初始化代码,和读写代码,一共三个函数,对应三个功能。 注
[单片机]
使用STM32调试FMSDR模块及解调FM电台(4)
5. 更换频点使用MSI001解调电台 更换MSI001频点为已知电台的频点 本实验是在配置MSI001的频点为101.7Mhz已知交通广播电台,观察喇叭是否能听到交通广播声音,再调整MSI001的输出幅度。 添加101.7M频点程序 在前面经过FIR滤波后的程序基础上,修改msi001.c文件,增加一个Msi001_FM101_7M_Init函数,初始化msi001的寄存器为接收101.7MHz: 在main.c文件的while循环前,初始化频点到101.7M频点。添加代码如下: 收听广播声音 将编译好的程序下载到开发板,连接喇叭,能听到交通广播声音。 用示波器测量开发板PA5管脚波形, 1ms档位波形 200
[单片机]
STM32电源管理与低功耗模式
7.1 电源管理概述 处理器广泛地利用门时钟来禁能那些未用的功能和未用功能块的输入,因此只有正在有 效使用中的逻辑才会消耗动态功率。 ARMv7-M 架构支持为减少功耗而让Cortex-M3 和系统时钟停止运行的系统睡眠模式。 详细情况在“系统电源管理”一节中作介绍。 7.2 系统电源管理 对系统控制寄存器进行写操作(见“系统控制寄存器” CM3技术参考手册之嵌套向量中断控制器P85 )可以控制Cortex-M3 系统功耗的状态,表7-1 列出了支持的睡眠模式。 a. 即使没有异常被激活也可以执行WFI 指令。不要使用WFI 指令来探测异常是否发生。WFI 通常使用 在线程模式下的空闲循环中。要了解更多有关WFI、WFE、BA
[单片机]