本帖最后由 qag 于 2017-7-7 16:55 编辑 比如在移植的时候,需要配置引脚,经常要改下面的代码 #define SDA0_PERIPHCLOCK RCC_APB2Periph_GPIOB #define SDA0_GPIO GPIOB复制代码#define SDA0_PIN GPIO_Pin_9 #define SDA0_OUT PORTB_Out(9) #define SDA0_IN PORTB_In(9) 想实现的是,只要改 #define SDA0 B9复制代码 剩下的宏定义就能根据此自动对应地改变。 搜索了下预处理指令中好像没有相关的内容,请教大家该如何实现。
http://www.cnblogs.com/3me-linux/p/5825940.html
试下这个连接符,不知道行不行。
#define gpiox(x) ((GPIOB_BASE-GPIOA_BASE)*(X-0X0A)+GPIOA_BASE)
或者如下:
#define gpiox(x) GPIO##x
这些都是想法,楼主可以根据实际情况来选择使用。
.....
#define PIN9 9
.....
#define pinSDA PIN9
.....
#define SDA0_OUT PORTB_Out(pinSDA)
#define SDA0_IN PORTB_In(pinSDA)
好像编译器不支持把一个宏作为另一个宏的参数呀
.c
GPIO_Init(GPIOX(LED_PORT), &GPIO_InitStructure);
.h
#define LED_PIN 13
#define LED_PORT C
#define GPIOX(x) GPIO##x
会报错
#define gpiox(x) GPIO##x
这个测试了,x不能是另一个宏,这样没有变得简便
#define STD_GPIOx(x) (GPIOA_BASE + (GPIOB_BASE - GPIOA_BASE)*(x))