2017-03-17 2 views
0

に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.hSTM32L1xx.h、しかしMODEROSPEEDROTYPERPUPDRを交換したいですSTM32F10x.h。私はSTM32F10x.hに似たような構造体が見つかりませんでした。

上記のコードを変換することはできますか?もしそうなら、STM32F10x.hのどの構造体を使うべきですか?

+2

これらは、さまざまなファミリのマイクロコントローラを対象としたヘッダーで、GPIOペリフェラルはほぼ同等ですが、機能セットとインターフェイスがわずかに異なります。言い換えれば、機械的にコードを移植することは不可能であり、基礎となるインターフェイスを理解するためにリファレンスマニュアルを読む必要があります。適切なハードウェア抽象ライブラリは、両方のデバイスに共通のコードを記述するのに役立ちますが、移植されるデバイスを理解することや、関連するハードウェアとその制限を理解することから解放されません。 – doynax

+0

@doynax:あなたがそのbloatwareを参照するならば、STlib/HAL:これは実用的ではありません。レジスタを直接使用してドライバを書き込む方が良い。これはまた、ハードウェアをカプセル化しますが、無駄な中間層を必要としません。 – Olaf

+0

2つのmcusのドキュメントを見てください。これらの2つのmcusは、それぞれ異なるgpioペリフェラルを持っています。同様の機能はレジスタの設定が異なっているため、コードを自分で移植する必要があります。 –

答えて

0

stm32f10x_gpio.hを見てください。これは構造体GPIO_InitTypeDefとそれを設定するための関連定義を持っています。現在持っているものをSTM32F1に必要なものに変換するのは簡単です。

現在のSTM32F1 Cubeのものはダウンロードされていないので、ファイルがstm32f1xx_hal_gpio.h(またはこれに類するもの)と呼ばれる可能性がありますが、typedefはまだGPIO_InitTypeDefと呼ばれます。

STMライブラリは少し膨れていますが、必要なものだけを取れば非常に便利です。特に、プロセッサヘッダーと#define。

関連する問題