2017-03-17 85 views
0

我有下面的代碼,其中包括STM32L1xx.h轉換GPIO_TypeDef從STM32L1xx到STM32F10x

GPIO_TypeDef* gpioport ... // Declaration. 

gpioport->MODER = (gpioport->MODER & ~(3 << pin2)) | (((gpiocfg >> GPIOCFG_MODE_SHIFT ) & 3) << pin2); 
gpioport->OSPEEDR = (gpioport->OSPEEDR & ~(3 << pin2)) | (((gpiocfg >> GPIOCFG_OSPEED_SHIFT) & 3) << pin2); 
gpioport->OTYPER = (gpioport->OTYPER & ~(1 << pin)) | (((gpiocfg >> GPIOCFG_OTYPE_SHIFT) & 1) << pin); 
gpioport->PUPDR = (gpioport->PUPDR & ~(3 << pin2)) | (((gpiocfg >> GPIOCFG_PUPD_SHIFT ) & 3) << pin2); 

我想更換STM32L1xx.hSTM32F10x.h,但MODEROSPEEDROTYPERPUPDR沒有在GPIO_TypeDef結構中定義STM32F10x.h。我在STM32F10x.h中也沒有找到類似的結構。

是否可以轉換上面的代碼?如果是這樣,我應該使用STM32F10x.h中的哪個結構?

+2

這些是針對不同系列微控制器的頭文件,其GPIO外設在很大程度上是等效的,但提供的功能集和接口略有不同。換句話說,您無法機械地將代碼從一個端口移到另一個端口,需要閱讀參考手冊以瞭解底層接口。一個合適的硬件抽象庫可以幫助爲這兩個設備編寫通用代碼,但不會讓您理解要從端口移植或從學習涉及的硬件及其侷限性中瞭解設備。 – doynax

+0

@doynax:如果你引用那個英國媒體報道STlib/HAL:這是沒有實際用處的。更好地直接使用寄存器寫驅動程序。這也封裝了hardwar,但不需要無用的中間層。 – Olaf

+0

看看兩個mcus的文檔,這兩個有不同的gpio外設。類似的功能寄存器設置不同,所以你需要自己移植代碼。 –

回答

0

看看stm32f10x_gpio.h。這有一個結構GPIO_InitTypeDef和相關的設置它的定義。將你現在擁有的內容翻譯成你需要的STM32F1應該很簡單。

我沒有下載當前的STM32F1立方體內容,所以我想這個文件現在可能被稱爲stm32f1xx_hal_gpio.h(或類似的),但我認爲typedef仍然會被稱爲GPIO_InitTypeDef

STM庫有點臃腫,但如果你只是拿你需要的東西,我覺得它們非常有用。特別是處理器頭文件和#defines。