总线:
I总线是指令总线 S总线是系统总线 D总线是数据总线
地址:
地址空间:2的32次方(寻址4GB空间),分成8个Block(0-7),每个512MB
存储器:
Block0 SRAM(Flash) STM32429IGT6 flash可用1MB 0x0000 0000-0x1FFF FFFF(512MB) Block1 SRAM 存储数据,变量(256KB)(分成三部分)SRAM1 (112KB)、 SRAM2(16KB)、SRAM3(64KB) Block2 片上外设 GPIO、USART(串口)、I2C、SPI .......(512M)(AHB1(高速)、AHB2、 APB1(低速)、APB2) Block3 FMC的bank1-bank2(512MB) 一个占128MB Block4 FMC的bank3-bank4(512MB) 一个占128MB Block5 FMC 没用到 Block6 FMC 没用到 Block7 Cortex-M4内部外设(如:SCB、NVIC) (ARM公司设计)(512MB)
寄存器:
F429有GPIOxy(x:A-I)9个端口,每个端口有16个引脚(y:0-15) (unsigned int*) 将变量强转成地址指针 *(unsigned int*) 将变量强转成地址指针,并进行指针操作 #define 别名 *(unsigned int*)寄存器地址
总线基地址:
APB1 0x4000 0000 0x0 APB2 0x4001 0000 0x0001 0000 AHB1 0x4002 0000 0x0002 0000 AHB2 0x5000 0000 0x1000 0000 AHB3 0x6000 0000 不在片上外设范围内
GPIO基地址:(每一节偏移0x0000 0400)
GPIOA 0x4002 0000 0x0 (AHB1基地址) GPIOB 0x4002 0400 0x0000 0400 GPIOC 0x4002 0800 0x0000 0800 GPIOD 0x4002 0C00 0x0000 0C00 GPIOE 0x4002 1000 0x0000 1000 GPIOF 0x4002 1400 0x0000 1400 GPIOG 0x4002 1800 0x0000 1800 GPIOH 0x4002 1C00 0x0000 1C00 GPIOI 0x4002 2000 0x0000 2000
GPIOx(x=A-I)端口寄存器列表:(相对GPIOx(x=A-I)的基地址偏移:0x04)
GPIOx_MODER GPIOx _OTYPER GPIOx_OSPEEDR GPIOx_PUPDR GPIOx_IDR GPIOx_ODR GPIOx_BSRR GPIOx_LCKR GPIOx_AFRL GPIOx_AFRH (以0x04单位递增) (每个GPIOx(x=A-I)有16个引脚,每个引脚有一套寄存器引脚列表)
使用寄存器点亮LED:
【注意】
1.外设GPIOx(x=A-I)时钟默认关闭状态 2.GPIOx_MODER默认处于输入状态(00) 3.操作GPIOx_ODR处于输出低(高)电平
【代码实现】
#define GPIOH_MODER *(unsigned int*)0x40021C00 #define GPIOH_ODR *(unsigned int*)(0x40021C00+0x14) #define RCC_AHB1ENB *(unsigned int*)(0x40023800+0x30) int main(void) { //打开GPIOH端口时钟 RCC_AHB1ENB |=1<<7; //让PH10处于输出状态 GPIOH_MODER |=(1<<(2*10)); //让PH10输出低电平 GPIOH_ODR &=~(1<<10); while(1); } void SystemInit() {}
我的私人博客:blog.icreidea.com,欢迎交流
此为原创作品,转载须经本人同意