にGPIO_TypeDefを変換するI STM32L1xx.h
含まれて次のコードを持っている: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);
は私がGPIO_TypeDef
構造体で定義されていないSTM32F10x.h
とSTM32L1xx.h
、しかしMODER
、OSPEEDR
、OTYPER
とPUPDR
を交換したいですSTM32F10x.h
。私はSTM32F10x.h
に似たような構造体が見つかりませんでした。
上記のコードを変換することはできますか?もしそうなら、STM32F10x.hのどの構造体を使うべきですか?
これらは、さまざまなファミリのマイクロコントローラを対象としたヘッダーで、GPIOペリフェラルはほぼ同等ですが、機能セットとインターフェイスがわずかに異なります。言い換えれば、機械的にコードを移植することは不可能であり、基礎となるインターフェイスを理解するためにリファレンスマニュアルを読む必要があります。適切なハードウェア抽象ライブラリは、両方のデバイスに共通のコードを記述するのに役立ちますが、移植されるデバイスを理解することや、関連するハードウェアとその制限を理解することから解放されません。 – doynax
@doynax:あなたがそのbloatwareを参照するならば、STlib/HAL:これは実用的ではありません。レジスタを直接使用してドライバを書き込む方が良い。これはまた、ハードウェアをカプセル化しますが、無駄な中間層を必要としません。 – Olaf
2つのmcusのドキュメントを見てください。これらの2つのmcusは、それぞれ異なるgpioペリフェラルを持っています。同様の機能はレジスタの設定が異なっているため、コードを自分で移植する必要があります。 –