代码需要适应不同板子的PCB布局,不同板子同一功能使用的GPIO引脚也不一样。
为了方便替换,一般会把GPIO引脚进行defined宏定义,然后在代码中使用。
但SDK提供的函数名字自身包含GPIOA和GPIOB。这意味着仅仅替换GPIO引脚名是不够的,还需要逐一修改所用到的函数名。
这个问题有啥好办法吗?
代码需要适应不同板子的PCB布局,不同板子同一功能使用的GPIO引脚也不一样。
为了方便替换,一般会把GPIO引脚进行defined宏定义,然后在代码中使用。
但SDK提供的函数名字自身包含GPIOA和GPIOB。这意味着仅仅替换GPIO引脚名是不够的,还需要逐一修改所用到的函数名。
这个问题有啥好办法吗?
将需要用到的GPIO,自己再重新封装一层,然后调用。比如说GPIOA_SetBits( GPIO_Pin_9 ),封装成一个函数。
// 电源指示灯
#define LED_1_PIN GPIO_Pin_7
#define LED_1(x) GPIO_WriteBit(GPIOB, LED_1_PIN, x)
我之前用过标志位+pin offset的方法,结构体里有一个uint8_t 是配置,有各种其他配置,拿出一位用作识别AB组,然后uint32_t用作pin。
使用的时候只需要
if( ( data->config & GPIO_GROUP_A ) == GPIO_GROUP_A ) GPIOA_... else GPIOB_... 这样就行了
这样速度就是慢一点,配置大概多需要消耗3个时钟周期,翻转需要多需要1到3个时钟周期。