你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何将前面的宏定义作为后面的宏定义的参数

[复制链接]
qag 提问时间:2017-7-7 16:52 /
本帖最后由 qag 于 2017-7-7 16:55 编辑

比如在移植的时候,需要配置引脚,经常要改下面的代码
  1. #define SDA0_PERIPHCLOCK        RCC_APB2Periph_GPIOB
  2. #define SDA0_GPIO                     GPIOB
复制代码
#define SDA0_PIN              GPIO_Pin_9
#define SDA0_OUT             PORTB_Out(9)
#define SDA0_IN             PORTB_In(9)
想实现的是,只要改
  1. #define SDA0                             B9
复制代码

剩下的宏定义就能根据此自动对应地改变。

搜索了下预处理指令中好像没有相关的内容,请教大家该如何实现。
收藏 评论9 发布时间:2017-7-7 16:52

举报

9个回答
creep 回答时间:2017-7-7 17:13:35
本帖最后由 creep 于 2017-7-7 17:14 编辑

http://www.cnblogs.com/3me-linux/p/5825940.html

试下这个连接符,不知道行不行。
回答时间:2017-7-7 19:34:51
理论是可以的,比如用一个计算公式取地址。如下代码:
#define gpiox(x) ((GPIOB_BASE-GPIOA_BASE)*(X-0X0A)+GPIOA_BASE)
或者如下:
#define gpiox(x)  GPIO##x

这些都是想法,楼主可以根据实际情况来选择使用。
eagle0754 回答时间:2017-7-7 22:45:45
联接符满足你要求
MrJiu 回答时间:2017-7-8 09:54:48
你可以参考一下芯片定义的头文件。。。。
zhao.zhao 回答时间:2017-7-8 13:20:08
简单一点,一般我再定义一个SDA引脚,为了和GPIO_PIN_9区别,我一般这样做
.....
#define    PIN9     9
.....
#define   pinSDA   PIN9
.....
#define SDA0_OUT          PORTB_Out(pinSDA)
#define SDA0_IN             PORTB_In(pinSDA)

qag 回答时间:2017-7-10 10:31:14
安 发表于 2017-7-7 19:34
理论是可以的,比如用一个计算公式取地址。如下代码:
#define gpiox(x) ((GPIOB_BASE-GPIOA_BASE)*(X-0X0A ...

好像编译器不支持把一个宏作为另一个宏的参数呀
.c
GPIO_Init(GPIOX(LED_PORT), &GPIO_InitStructure);

.h
#define LED_PIN         13
#define LED_PORT        C

#define GPIOX(x)      GPIO##x

会报错
qag 回答时间:2017-7-10 11:02:09
安 发表于 2017-7-7 19:34
理论是可以的,比如用一个计算公式取地址。如下代码:
#define gpiox(x) ((GPIOB_BASE-GPIOA_BASE)*(X-0X0A ...

#define gpiox(x)  GPIO##x

这个测试了,x不能是另一个宏,这样没有变得简便
回答时间:2017-7-10 14:08:13
C要定义为0x0C,我是举例大概这样使用,具体要根据实际情况进行改变。
回答时间:2017-7-11 14:45:12
我使用如下代码,没有问题:
#define STD_GPIOx(x)              (GPIOA_BASE + (GPIOB_BASE - GPIOA_BASE)*(x))

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版