0
点赞
收藏
分享

微信扫一扫

地址映射后点亮LED

对平时外设进行地址映射分为五级:总线、分线、端口、寄存器、位。下面是各个寄存器的起始地址

地址映射后点亮LED_#define

地址映射后点亮LED_STM32_02

值得注意的是只在小容量、中容量和大容量的产品中才有这个共享的SRAM区域,互联型产品中没有这个区域。

为了方便操作,将各个地址进行映射有一定英文含义的宏。

#define PERIPH_BASE 0x4000 0000                   //总线基地址
#define APB1PERIPH_BASE PERIPH_BASE //表示APB1总线
#define APB2PERIPH_BASE (PERIPH_BASE+0x00010000) //APB2总线
#define AHBPERIPH_BASE (PERIPH_BASE+0x00020000) //AHB总线,和实际图表中的0x40018000对不上,究其原因,没有解释

#define GPIOC_BASE (APB2PERIPH_BASE+0x00001000) //定义GPIC的基地址
#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04) //定义不同的寄存器
#define GPIOC_IDH *(unsigned int*)(GPIOC_BASE+0x08)
#define GPIOC_ODH *(unsigned int*)(GPIOC_BASE+0x0C)

#define RCC_BASE (AHBPERIPH_BASE+0x1000) //定义时钟
#define RCC_APB2ENR *(unsigned int*)(RCC_BASE+0x18)

在最后的生成的代码

main.h文件

#define PERIPH_BASE 0x4000 0000                   //总线基地址
#define APB1PERIPH_BASE PERIPH_BASE //表示APB1总线
#define APB2PERIPH_BASE (PERIPH_BASE+0x00010000) //APB2总线
#define AHBPERIPH_BASE (PERIPH_BASE+0x00020000) //AHB总线,和实际图表中的0x40018000对不上,究其原因,没有解释

#define GPIOC_BASE (APB2PERIPH_BASE+0x00001000) //定义GPIC的基地址
#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04) //定义不同的寄存器
#define GPIOC_IDH *(unsigned int*)(GPIOC_BASE+0x08)
#define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C)

#define RCC_BASE (AHBPERIPH_BASE+0x1000) //定义时钟
#define RCC_APB2ENR *(unsigned int*)(RCC_BASE+0x18)

main.c文件

#include "main.h"

int main(void){
RCC_APB2ENR |= 1<<4;
GPIOC_CRH &=~(0x0F<<(4*5));
GPIOC_CRH |=(1<<(4*5));
GPIOC_ODR &=~(1<<13);

while(1);
}
void SystemInit(){

}

举报

相关推荐

0 条评论