代碼需要適應(yīng)不同板子的PCB布局,不同板子同一功能使用的GPIO引腳也不一樣。
為了方便替換,一般會(huì)把GPIO引腳進(jìn)行defined宏定義,然后在代碼中使用。
但SDK提供的函數(shù)名字自身包含GPIOA和GPIOB。這意味著僅僅替換GPIO引腳名是不夠的,還需要逐一修改所用到的函數(shù)名。
這個(gè)問題有啥好辦法嗎?
代碼需要適應(yīng)不同板子的PCB布局,不同板子同一功能使用的GPIO引腳也不一樣。
為了方便替換,一般會(huì)把GPIO引腳進(jìn)行defined宏定義,然后在代碼中使用。
但SDK提供的函數(shù)名字自身包含GPIOA和GPIOB。這意味著僅僅替換GPIO引腳名是不夠的,還需要逐一修改所用到的函數(shù)名。
這個(gè)問題有啥好辦法嗎?
將需要用到的GPIO,自己再重新封裝一層,然后調(diào)用。比如說GPIOA_SetBits( GPIO_Pin_9 ),封裝成一個(gè)函數(shù)。
// 電源指示燈
#define LED_1_PIN? ? GPIO_Pin_7
#define LED_1(x)? ? ? ?GPIO_WriteBit(GPIOB, LED_1_PIN, x)
我之前用過標(biāo)志位+pin offset的方法,結(jié)構(gòu)體里有一個(gè)uint8_t 是配置,有各種其他配置,拿出一位用作識(shí)別AB組,然后uint32_t用作pin。
使用的時(shí)候只需要
if( ( data->config & GPIO_GROUP_A )? ==?GPIO_GROUP_A ) GPIOA_... else GPIOB_... 這樣就行了
這樣速度就是慢一點(diǎn),配置大概多需要消耗3個(gè)時(shí)鐘周期,翻轉(zhuǎn)需要多需要1到3個(gè)時(shí)鐘周期。