历史上的今天
今天是:2025年03月12日(星期三)
2019年03月12日 | STM32之AHB与APB总线
2019-03-12 来源:eefocus
AHB是高速总线,是一种系统总线,它主要负责连接处理器、DMA等一些内部接口。AHB 系统由主模块、从模块和基础结构3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。
APB是低速总线,它主要负责连接外围设备,它又分为APB1和APB2,它的总线架构不像 AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。APB桥就是连接AHB和APB中间的玩意。
APB1最大时钟频率为36MHz
APB2最大时钟频率为72MHz
看下图
在STM32F1中,不同的外设接在不同的APB总线上,以下是详细的分布:
#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001)
#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002)
#define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004)
#define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008)
#define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010)
#define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020)
#define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040)
#define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080)
#define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100)
#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800)
#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000)
#define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000)
#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000)
#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000)
#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000)
#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000)
#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000)
#define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000)
#define RCC_APB1Periph_USB ((uint32_t)0x00800000)
#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000)
#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000)
#define RCC_APB1Periph_BKP ((uint32_t)0x08000000)
#define RCC_APB1Periph_PWR ((uint32_t)0x10000000)
#define RCC_APB1Periph_DAC ((uint32_t)0x20000000)
#define RCC_APB1Periph_CEC ((uint32_t)0x40000000)
#define RCC_APB2Periph_AFIO ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8 ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1 ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3 ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15 ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9 ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10 ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11 ((uint32_t)0x00200000)
当我们用到哪一个外设的时候,我们在这找到它对应的总线,然后使能时钟
上一篇:STM32中的看门狗
下一篇:STM32之点亮LED
史海拾趣
|
希望直接通过以太网发送自定义的帧 现在用muxSend函数的时候碰到一些问题 一是cookie只需要调用muxBind然后得到返回值就可以了? 二是对M_BLK结构不是很清楚, 是不是在调用这个函数的时候还涉及到netpool初始化操作呢? 在网上找了些例子,在 ...… 查看全部问答> |
|
在程序中如果我不断的new一个内存空间然后再delete,连续的N次后会不会造成内存泄漏,我看过了每次新的一个NEW产生的地址都是在增加的那如果N次后不是超出总的地址长度了?不是很理解CE的这个现象? … 查看全部问答> |
|
想设计一个类似于串口调试助手的软件,就是通过指令控制计算机的硬件例如串口,不知需要什么?听说需要API,不知哪位朋友能举个例子!QQ:530883031 谢谢!… 查看全部问答> |
|
职位要求: 1、电子信息相关专业,本科2年以上或硕士1年以上的工作经验; 2、具备扎实的计算机软件或通信基础知识,有着相关的软件项目开发或测试经验,或者自动化测试经验; 3、具备一定的软件工程知识,掌握基本软件开发、质量保证流程及相关 ...… 查看全部问答> |
|
如果12864用并行驱动的话,很多I/O口都被占用,采用串行驱动的话就可节省好多I/O 口。请问哪位写过12864的串行驱动程序啊,能否上传一下?谢谢!… 查看全部问答> |
|
我想用通用定时器延时微秒级别,但是我配置的寄存器始终有问题, 这是定时器初始化: RCC->APB1ENR|=1<<1;//TIM3时钟使能   ...… 查看全部问答> |




