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.h
與STM32F10x.h
,但MODER
,OSPEEDR
,OTYPER
和PUPDR
沒有在GPIO_TypeDef
結構中定義STM32F10x.h
。我在STM32F10x.h
中也沒有找到類似的結構。
是否可以轉換上面的代碼?如果是這樣,我應該使用STM32F10x.h中的哪個結構?
這些是針對不同系列微控制器的頭文件,其GPIO外設在很大程度上是等效的,但提供的功能集和接口略有不同。換句話說,您無法機械地將代碼從一個端口移到另一個端口,需要閱讀參考手冊以瞭解底層接口。一個合適的硬件抽象庫可以幫助爲這兩個設備編寫通用代碼,但不會讓您理解要從端口移植或從學習涉及的硬件及其侷限性中瞭解設備。 – doynax
@doynax:如果你引用那個英國媒體報道STlib/HAL:這是沒有實際用處的。更好地直接使用寄存器寫驅動程序。這也封裝了hardwar,但不需要無用的中間層。 – Olaf
看看兩個mcus的文檔,這兩個有不同的gpio外設。類似的功能寄存器設置不同,所以你需要自己移植代碼。 –