STM32I/O基板にArduino NANOボードを載せて動作確認です。
ステッピングモーター2個をボリュームでそれぞれ速度制御、最低速度で励磁OFF動作です。使用したボードは非常に使いやすいNanoタイプです。ATMEGA16820AU CPU 20Mhz動作でNANO互換ボードです。ステッピングモーターはDC12Vの減速ギア付きです。480パルスで1回転タイプです。(秋月)また、モーターは他のコンテンツでも使用している中型(DC24V)でも動作はOKです。 参考 3jiku_motor_vr.html
動作風景 最初の画像が行方不明です


基板のアップ CPUボードが良く解ります。


動作確認中のArduinoのプログラムのスナップです。ArduinoはC言語の入門には最適です。フリーで関連書籍も多いです。
現在の物はUSB接続でそのままプログラムが書き込めますのでフラッシュライターが必要有りません。また、動作確認出来るサンプルソフトも
付属しています。

  

 
ボリュームから読み込んだ値をスピードの値に変換してUSBのシリアルで受信しているターミナルです。これが簡単出来るのでデバックは非常に
助かります。一昔前はここまで来るのに一苦労したものです。
 

プログラムです。 このページはジオシテーズのジオクリエイターで製作しているのですがテキストを貼り付けると改行幅が大きいので手作業で改行幅を小さくしてます。その為ソースのテキストが替わって要るかもしれません。
#include <MsTimer2.h> は標準ではライブラリーの中に入っていませんので自分でダウンロードしてライブラリーに加える必要が有ります。
タイマー割り込み等が使用出来る様になるとプログラムの自由度が飛躍的に上がります。( 正徳太子モードに成ります )
*コメントを追加しました。
//-------------------------------------------------------------------------------------------------------------------------------------------
// ステピングモーター2軸同時回転 各軸ごとボリュームで速度制御
//  最低速で励磁OFF  serial moniterに速度送信 9600bps
// 2011/02/05  stepmotor4.c
#include <MsTimer2.h>
int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
int sensorValue1 = 0;        // value read from the pot
int outputValue1 = 0;        // value output to the PWM (analog out)
 static int int_cnt = 0;
 static int int_cnt_set = 1;
 static int int_cnt1 = 0;
 static int int_cnt_set1 = 1;

 void flash() {                        //割り込みプログラム
  static int thisStep = 0;
  static int thisStep1 = 0;
  static boolean dir = HIGH;
  static boolean dir1 = HIGH;
  if(int_cnt >= int_cnt_set){      //速度による割り込み回数のチェック
    switch (thisStep) {            //1軸 励磁パターン
      case 0:    // 1010
      digitalWrite(5, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(6, LOW);
      break;
      case 1:    // 0110
      digitalWrite(5, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(6, LOW);
      break;
      case 2:    //0101
      digitalWrite(5, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(6, HIGH);
      break;
      case 3:    //1001
      digitalWrite(5, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(4, LOW);
      digitalWrite(6, HIGH);
      break;
    }
    if(dir){                            //CW,CCWの選択
      thisStep++;
      if(thisStep>4) thisStep=0;
    }else{
      thisStep--;
      if(thisStep<0) thisStep=3;
    }
    int_cnt=0;      
  }else{
      int_cnt++;      
  }
   if(int_cnt1 >= int_cnt_set1){
    switch (thisStep1) {           //2軸 励磁パターン
      case 0:    // 1010
      digitalWrite(9, HIGH);
      digitalWrite(11, LOW);
      digitalWrite(8, HIGH);
      digitalWrite(10, LOW);
      break;
      case 1:    // 0110
      digitalWrite(9, LOW);
      digitalWrite(11, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(10, LOW);
      break;
      case 2:    //0101
      digitalWrite(9, LOW);
      digitalWrite(11, HIGH);
      digitalWrite(8, LOW);
      digitalWrite(10, HIGH);
      break;
      case 3:    //1001
      digitalWrite(9, HIGH);
      digitalWrite(11, LOW);
      digitalWrite(8, LOW);
      digitalWrite(10, HIGH);
      break;
    }
    if(dir1){
      thisStep1++;
      if(thisStep1>4) thisStep1=0;
    }else{
      thisStep1--;
      if(thisStep1<0) thisStep1=3;
    }
    int_cnt1=0;      
  }else{
      int_cnt1++;      
  }
}
 void setup() {                            //初期化
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(13, OUTPUT);
   // initialize serial communications at 9600 bps:
  Serial.begin(9600);
  //  MsTimer2::set(1, flash);
  MsTimer2::set(0, flash);
}
 void loop() {                                            //メインループ
   // read the analog in value:
   sensorValue = analogRead(A0);                 //速度ボリュームの読み込み           
   outputValue = map(sensorValue, 0, 1023, 2, 30);  
   int_cnt_set = outputValue;
    sensorValue1 = analogRead(A1);            
    outputValue1 = map(sensorValue1, 0, 1023, 2, 30);  
   int_cnt_set1 = outputValue1;                    //速度の割り込み回数設定
   Serial.print(" speed = ");      
   Serial.print(outputValue);   
   Serial.print(" ");      
   Serial.println(outputValue1);                      //速度のシリアルでの返送

  if((outputValue<30)||(outputValue1<30)){        //励磁OFFの条件
    MsTimer2::start();
  }else{
    MsTimer2::stop();
      digitalWrite(5, LOW);                                //励磁OFF動作
      digitalWrite(7, LOW);
      digitalWrite(4, LOW);
      digitalWrite(6, LOW);
      digitalWrite(9, LOW);
      digitalWrite(11,LOW);
      digitalWrite(8, LOW);
      digitalWrite(10,LOW);
  }
   digitalWrite(13, HIGH);      // set the LED on
   delay(100);                   // wait for a second
   digitalWrite(13, LOW);       // set the LED off
   delay(100);                   // wait for a second
}

//--------------------------------------------------------------------------------------------------------------------------------------------