day06:stm32f10x.h寄存器的映射代码(地址的宏定义)

  在stm32f10x.h文件中集中定义各个寄存器和端口、总线的内存地址,这样能让代码变简洁,也方便代码管理和修改,同时,在编程的时候,不用写很多遍

重复代码,相当于Java中的接口定义一样。

main.c

#include "stm32f10x.h"

// 宏定义:指针
#define GPIO_RCC 	RCC_APB2ENR  
#define GPIO_CRL 	GPIOC_CRL
#define GPIO_ODR 	GPIOC_ODR
	
// 延迟函数
void delay(unsigned int i)
{
	for(; i!=0; i--);
}

int main(void)
{
	/* 配置RCC寄存器,使能GPIO口的时钟 */
	GPIO_RCC |= ( 1<<4 );
	
	// 闪烁灯:D4和D5两个LED灯之间不断闪烁
	while(1)
	{
		/* 配置CRL寄存器,配置为推挽输出 */
		GPIO_CRL |= ( 1<<(4*2) );
		/* 配置ODR寄存器 */
		GPIO_ODR &= ~( 1<<2 );	// 位2置0,LED亮
		delay(0X99999);	
		GPIO_ODR |= ( 1<<2 );	// 位2置1,LED不亮	
		
		/* 配置CRL寄存器,配置为推挽输出 */
		GPIO_CRL |= ( 1<<(4*3) );
		/* 配置ODR寄存器 */
		GPIO_ODR &= ~( 1<<3 );	// 位3置0,LED亮
		delay(0X99999);		
		GPIO_ODR |= ( 1<<3 );	// 位3置1,LED不亮			
	}
}

void SystemInit(void)
{
	/* 函数体为空,目的是为了骗过编译器不报错 */
}

 stm32f10x.h

/* 用于存放寄存器的映射代码,相当于51单片机的reg52.h */

/* 所有的外设基地址 */
#define PERIPH_BASE 		(unsigned int)0X40000000
	
/* 三条总线基地址 */
#define APB1_PERIPH_BASE	PERIPH_BASE
#define APB2_PERIPH_BASE	PERIPH_BASE+0X00010000
#define AHB_PERIPH_BASE		PERIPH_BASE+0X00018000

/* GPIOA - GPIOG端口的地址,它们均在APB2这条总线上 */
#define GPIOA_BASE 			APB2_PERIPH_BASE+0X00000800
#define GPIOB_BASE			APB2_PERIPH_BASE+0X00000C00
#define GPIOC_BASE			APB2_PERIPH_BASE+0X00001000
#define GPIOD_BASE			APB2_PERIPH_BASE+0X00001400
#define GPIOE_BASE			APB2_PERIPH_BASE+0X00001800
#define GPIOF_BASE			APB2_PERIPH_BASE+0X00001C00
#define GPIOG_BASE			APB2_PERIPH_BASE+0X00002000

/* GPIOC端口的寄存器地址 */
#define GPIOC_CRL			*(unsigned int*)(GPIOC_BASE+0X00000000)
#define GPIOC_CRH			*(unsigned int*)(GPIOC_BASE+0X00000004)
#define GPIOC_IDR			*(unsigned int*)(GPIOC_BASE+0X00000008)
#define GPIOC_ODR			*(unsigned int*)(GPIOC_BASE+0X0000000C)
#define GPIOC_BSRR			*(unsigned int*)(GPIOC_BASE+0X00000010)	
#define GPIOC_BRR			*(unsigned int*)(GPIOC_BASE+0X00000014)	
#define GPIOC_LCKR			*(unsigned int*)(GPIOC_BASE+0X00000018)

/* APB2外设时钟使能寄存器 */
#define RCC_APB2ENR			*(unsigned int*)0X40021018

现象:

LED灯不断闪烁

这样做的目的是让代码更加简洁和方便管理,同时方便编程和修改代码,同时,代码的扩展性增强。

 

posted @ 2018-04-17 00:18  半生戎马,共话桑麻、  阅读(928)  评论(0)    收藏  举报
levels of contents