[ODYSSEY-STM32MP157C] GPIOを駆動して呼吸光を実現

グローブインターフェース

Groveは、標準の組み込み開発キット接続インターフェイス定義です。

グローブシステムとは

Groveは、モジュラー標準コネクタプロトタイプシステムです。Groveはビルディングブロックアセンブリの電子技術を使用しています。ジャンパーやはんだ付けに基づくシステムと比較して、接続、テスト、構築が簡単で、学習システムが簡素化されます。Groveシステムを使用すると、実際のシステムを構築できます。したがって、オブジェクトを正しく接続するには、ある程度の学習と専門的な知識が必要です。

ここに写真の説明を挿入

Groveシステムは、基本的な処理ユニット(トランク)と、標準化されたコネクタを備えたさまざまなモジュール(ツリーブランチ)で構成されています。ベースユニット(通常はマイクロプロセッサ)を使用すると、Groveモジュールからの入力または出力を簡単に接続できます。各Groveモジュールは通常、単純なボタンやより複雑な心拍数センサーなどの単一の機能を処理できます。

使用している処理ユニットにGroveインターフェースがない場合。Grove to Pinヘッダーアダプターケーブルを使用して、RaspberryPiまたはArduinoのピンをGroveモジュールに接続できます。

もちろん、ODYSSEY-STM32MP157Cは2つのGroveインターフェースを提供します。1つはデジタルGroveインターフェースで、もう1つはI2CGroveインターフェースです。ユーザーは、これら2つのGroveインターフェイスを介してプロジェクトのプロトタイプをすばやく作成できます。Groveモジュールの情報をいくつかまとめました。困っている友達は、クリックして購入できます。

工場 モデル インターフェース リンク
シード オールインワングローブセンサーキット - クリックして購入
シード 1.12インチOLEDディスプレイモジュール I2C クリックして購入
シード 0.96インチ12864OLEDディスプレイモジュール I2C クリックして購入
シード 緑色のLEDグローブモジュール GPIO クリックして購入
シード 白色LEDグローブモジュール GPIO クリックして購入
シード 可変色LEDグローブモジュール GPIO クリックして購入
シード プログラム可能なRGBフルカラーLEDモジュール GPIO クリックして購入

Groveモジュールをすばやくテストする

Seeed StudioからPythonベースのGroveライブラリ(https://github.com/Seeed-Studio/grove.pyが提供されているため、ODYSSEY-STM32MP157C開発ボードでGroveモジュールをテストするのは非常に簡単です。ボタン、LED、ディスプレイ画面、モーター、その他のモジュールなど、多くのテストプログラムがあります。

しかし、これらのライブラリを使用する前に、まだいくつかの作業を行う必要があります!前のセクション「[ODYSSEY-STM32MP157C]環境のセットアップとシステム操作」で環境のセットアップを完了している場合は、GPIOを直接テストできます。

まず、Grove.pyをインストールします

sudo pip3 install Seeed-grove.py

次に、grove.pyライブラリのソースコードをダウンロードします

git clone https://github.com/Seeed-Studio/grove.py

グローブディレクトリに入り、例を実行します

cd grove.py/grove
sudo python3 grove_gpio.py 5

この時点で、Grove Kit拡張ボードを接続し、IOモジュール(LEDライト、リレーなど)をGroveポート5に接続すると、LEDライトが点滅するか、リレーの開閉動作が表示されます。

ここに写真の説明を挿入

Libgpiodライブラリを使用する

勤勉さと質素さの精神で、私はGroveモジュールから始めませんでしたが、ODYSSEY-STM32MP157C開発ボードと既存のLEDモジュールを使用して実験を完了しました。持っていない人は早く車に乗ります〜

GroveライブラリなしでGPIOを操作する方法は?答えは-libgpiodライブラリです!

Linux 4.8以降、GPIOの操作にsysfsインターフェイス(/ sys / class / gpio)を使用することは推奨されなくなりました。代わりに、ユーザースペースで操作するためにキャラクターデバイスを使用することをお勧めします。libgpiodはGPIOキャラクターデバイスを操作するためのライブラリであり、いくつかを提供します。開発者がデバッグしやすくするためのツール。

  • gpiodetect -システムに存在するすべてのgpiochipと、それらの名前、ラベル、およびGPIO行を一覧表示します。
  • gpioinfo -指定されたgpiochipのすべての行と、それらの名前、ユーザー、方向、アクティビティステータス、およびその他の兆候を一覧表示します。
  • gpioget -指定されたGPIO行の値を読み取ります。
  • gpioset -指定したGPIO行の値を設定します。
  • gpiofind -対応するgpiochipとインラインオフセットを名前で検索します。
  • gpiomon -指定されたGPIO回線でイベントを待つか、監視するイベントを指定します。

例えば:

# gpiodetect 
gpiochip0 [GPIOA] (16 lines)
gpiochip1 [GPIOB] (16 lines)
gpiochip2 [GPIOC] (16 lines)
gpiochip3 [GPIOD] (16 lines)
gpiochip4 [GPIOE] (16 lines)
gpiochip5 [GPIOF] (16 lines)
gpiochip6 [GPIOG] (16 lines)
gpiochip7 [GPIOH] (16 lines)
gpiochip8 [GPIOI] (16 lines)
gpiochip9 [GPIOZ] (16 lines)

コントロールLEDの点滅

LEDモジュールを40ピン拡張インターフェースのGPIO_A14(ピン7)に接続しました。GPIO_A14はgpiochip0の14行目に対応します。したがって、LEDは次のコマンドでオンとオフを切り替えることができます。

gpioset gpiochip0 14=1    # 高电平
gpioset gpiochip0 14=0    # 低电平

したがって、この方法でシェルスクリプトを記述して、LEDの点滅の効果を実現できます。

#!/bin/bash
while :
do
    gpioset gpiochip0 14=0
    sleep 0.5
    gpioset gpiochip0 14=1
    sleep 0.5
done

シェルスクリプトを実行すると、効果は次のようになります。

ここに写真の説明を挿入

呼吸光の効果を実感する

呼吸光の効果を実現するために、通常、DACデジタルからアナログへの変換PWM制御使用されます。もちろん、ソフトウェアPWMも実装できますが、操作効率の点ではあまり良い方法ではありません。同時に、STM32MP157CにはCortex-M4コアが含まれているため、STM32 MCUプログラミング方法を完全に使用することで、M4側に呼吸光を実装できます。

同じLEDモジュールです。今回はGPIO_A3(ピン29)を選択します。PA3にはタイマー機能があるので、PWM制御出力モードに設定できます。

  1. STM32CubeIDEを開き、新しいプロジェクトを作成し、STM32MP157Cチップを選択します。

  2. 次の図に示すように、PA3ピンをCortex-M4コアに割り当て、PA3をTIM2_CH4モードに構成し、Timer2を構成し、チャネル4を有効にします。

    ここに写真の説明を挿入

  3. 次に、TIM2パラメーターを構成します。タイマーの周波数は64MHzであるため、プリスケーラー係数は64-1に設定され、自動リロード値は1000-1に設定されます。したがって、PWM周波数は64,000,000 / 64/1000 = 1000Hzです。

    ここに写真の説明を挿入

  4. 次に、PWMのデューティサイクル(dutyCycle)を1サイクル(たとえば1ms)で調整して、呼吸光効果を実現します。主な機能コードは次のとおりです。

    int main(void)
    {
          
          
        /* USER CODE BEGIN 1 */
    	uint16_t dutyCycle = 0;
        /* USER CODE END 1 */
        
        /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
        HAL_Init();
    
        if(IS_ENGINEERING_BOOT_MODE())
        {
          
          
            /* Configure the system clock */
            SystemClock_Config();
        }
    
        /* Initialize all configured peripherals */
        MX_GPIO_Init();
        MX_TIM2_Init();
        
        /* USER CODE BEGIN 2 */
        HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
        /* USER CODE END 2 */
    
        /* USER CODE BEGIN WHILE */
        while (1)
        {
          
          
    	    while (dutyCycle < 1000)
    	    {
          
          
    		    dutyCycle++;
    		    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dutyCycle);
    		    HAL_Delay(1);
    	    }
    	    HAL_Delay(200);
    
    	    while (dutyCycle > 10)  /* 为了效果好一点,我故意不让LED全灭 */
    	    {
          
          
    		    dutyCycle--;
    		    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dutyCycle);
    		    HAL_Delay(1);
    	    }
    	    HAL_Delay(400);
        }
    }
    
  5. STM32CubeIDEのツールバーの「ハンマー」をクリックしてプロジェクトをコンパイルすると、/ CM4 / Debug /ディレクトリにelfファイル(led_CM4.elfなど)が生成されます。

  6. 新しく生成されたファイルをODYSSEY-STM32MP157Cled_CM4.elf/lib/firmwareディレクトリに入れ、次の操作を実行します。

    echo led_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware
    echo start > /sys/class/remoteproc/remoteproc0/state
    

    この時点で、Cortex-M4側のファームウェアはすでに実行されています。呼吸光の効果は次のとおりです。

    ここに写真の説明を挿入



ここに写真の説明を挿入



付録

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/luckydarcy/article/details/108815555