お話のコーナー
息抜きに お話 でも、ご覧ください。

A+-2C : ええ加減にC
マスコット   A+-2C と書いて
  ええ加減にC と読みます。

  処理番号を使用した、
 組み込みCプログラミングを紹介しています。


  STMicroelectronics社製のCPU、
 STM32F405VG, STM32F446RE, STM32L476RG, STM32G431KB の
 サンプルプログラムを紹介しています。

  サンプルプログラムは、freeの開発ツール STM32CubeIDE を使用して作成しました。

  STM32F405VG のサンプルプログラムの動作には、
 えがおのでんし製の評価用基板 Base-F405VG を使用しています。
  Base-F405VG には、STM32F405VG のCPU基板 tri-S (えがおのでんし製)が
 搭載されています。

  STM32F446RE, STM32L476RG, STM32G431KB には、それぞれ
 STMicroelectronics社製の評価用基板
 NUCLEO-F446RE, NUCLEO-L476RG, NUCLEO-G431KB を使用しています。


処理番号を使用したプログラムの説明
 LED点滅の例 : Blink_LED_Status
  Blink_LED_Status のプログラムコード
  Blink_LED_Status の説明
  モジュール内の変数について(重要)



目次

1. 既存のプロジェクトを開く方法
  サンプルプログラムのプロジェクトの圧縮ファイルを解凍した後、
 STM32CubeIDEで、そのプロジェクトを開く方法について説明しています。

2. STM32CubeIDEの日本語設定
  プログラムソース内の日本語のコメントが文字化けしないための
 設定方法について説明しています。



  組み込みCのサンプルプログラム



STM32F405VG のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32F405VG の
 サンプルプログラムです。

  えがおのでんし製の評価用基板 Base-F405VG を使用しています。
  Base-F405VG には、STM32F405VG のCPU基板 tri-S (えがおのでんし製)が
 搭載されています。



NUCLEO-F446RE のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32F446RE の
 評価用基板 NUCLEO-F446RE のサンプルプログラムです。



NUCLEO-L476RG のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32L476RG の
 評価用基板 NUCLEO-L476RG のサンプルプログラムです。

  タッチパネル付きグラフィックLCD MSP2807 のサンプルプログラムを掲載しています。



NUCLEO-G431KB のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32G431KB の
 評価用基板 NUCLEO-G431KB のサンプルプログラムです。



ST-LINKのFirmwareのUpgrade
  ST-LINKのFirmwareのUpgradeについて説明しています。



ST-LINKによるデバッグのための接続
  ST-LINKによるデバッグのための接続について説明しています。


シリアル送受信試験器 SCTester の販売
SCTester_I2C_ADT7410_S0_G_ON
  シリアル通信の送受信試験を行う装置です。

  I2C送受信 と UART送受信 の装置があります。

  以下の3種類です。
  1) I2C送受信試験器 SCTester I2C
  2) UART送受信試験器 SCTester UART
  3) UART送受信モニタ SCMonitor UART

  左の写真は、I2C対応 温度センサモジュール
 ADT7410 を接続して送受信を行っている様子です。


シリアル送受信試験器 SCTester をご覧ください。


UART(非同期シリアル通信)について
 以下のページでUARTについて簡単に説明しています。
 UART(非同期シリアル通信) の説明 をご覧ください。



  組み込みCのサンプルプログラムを以下に紹介します。



STM32F405VG のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32F405VG の
 サンプルプログラムを以下に紹介します。

  えがおのでんし製の評価用基板 Base-F405VG を使用しています。
  Base-F405VG には、STM32F405VG のCPU基板 tri-S (えがおのでんし製)が
 搭載されています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_LED_USW
  LED点滅とスイッチ入力の処理を並列に動作させるサンプルプログラムです。

  tri-S基板上の User Switch を押すごとに、LED1 の点滅間隔が変化します。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_MSP2807_ASCII
  タッチパネル付きグラフィックLCD MSP2807 の ASCII文字表示 のサンプルプログラムです。

MSP2807_Startup_Screen_ASCII

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_MSP2807_UTF16_A
  タッチパネル付きグラフィックLCD MSP2807 の Unicode文字(日本語)表示 のサンプルプログラムです。

  Unicode文字表示モジュールの引数に
 (uint8_t *)"ようこそ!" のように
 直接、日本語を指定して、日本語表示を行うことができます。

MSP2807_Startup_Screen_UTF16

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_MSP2807_TP_ASCII_10K
  タッチパネル付きグラフィックLCD MSP2807 の タッチパネル制御 のサンプルプログラムです。

  タッチパネルの位置調整(基準位置の設定) と
 タッチパネルのデータ入力を行うことができます。

Adjust_TP_First TP_Screen_Input

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_DFU_10K
  USBを介して、バイナリファイル .bin をCPUのFlashメモリに書き込むサンプルプログラムです。
  STMicroelectronics社が提供しているアプリケーション STM32CubeProgrammer を使用して書き込みます。
  書き込んだプログラムは、0x08010000 番地から実行されます。

  DFU : Download Firmware Update

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_CDC
  USBのCDC通信(VCP : 仮想COMポート)のサンプルプログラムです。

  CDC : Communication Device Class

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_SD_SDIO
  マイクロSDのSDIOアクセスのサンプルプログラムです。

tri-S_CPU_F

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_DAC
  STM32F405VG内蔵のDACを使用して正弦波を出力するサンプルプログラムです。

F405VG_DAC_Wave_Screen

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_ADC_DAC
  STM32F405VG内蔵のADCとDACを使用して、
 A/D変換して入力したデータを
 そのまま、D/A変換出力するサンプルプログラムです。

F405VG_ADC_DAC_Wave_Screen

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F405VG_ADC_DAC_MA(移動平均してD/A出力)
  STM32F405VG内蔵のADCとDACを使用して、
 A/D変換して入力したデータを
 移動平均して、D/A変換出力するサンプルプログラムです。

F405VG_ADC_DAC_MA_Wave_Screen

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


NUCLEO-F446RE のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32F446RE の
 評価用基板 NUCLEO-F446RE のサンプルプログラムを以下に紹介します。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム N446RE_Blk_LED
  まずは、基本的なLED点滅のサンプルプログラムです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム N446RE_LED_USW
  LED点滅とスイッチ入力の処理を並列に動作させるサンプルプログラムです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム NF446RE_UART1
  STM32F446REのUSART1を使用した、UART通信のサンプルプログラムです。

  UART : Universal Asynchronous Receiver/Transmitter (非同期シリアル通信)



UART(非同期シリアル通信)について
 以下のページでUARTについて簡単に説明しています。
 UART(非同期シリアル通信) の説明 をご覧ください。


サンプルプログラム N446RE_UART2
  STM32F446REのUSART2を使用した、UART通信のサンプルプログラムです。

  UART : Universal Asynchronous Receiver/Transmitter (非同期シリアル通信)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム NF446RE_UART4
  STM32F446REのUART4を使用した、UART通信のサンプルプログラムです。

  UART : Universal Asynchronous Receiver/Transmitter (非同期シリアル通信)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム N446RE_CDC
  USBのCDC通信(VCP : 仮想COMポート)のサンプルプログラムです。

  CDC : Communication Device Class

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_MSP2807_ASCII_A
  タッチパネル付きグラフィックLCD MSP2807 の ASCII文字表示 のサンプルプログラムです。

MSP2807_Startup_Screen_ASCII

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_MSP2807_JIS_X_0208_A
  タッチパネル付きグラフィックLCD MSP2807 の JIS X 0208日本語文字表示 のサンプルプログラムです。

MSP2807_Startup_Screen_JIS_X_0208

  サンプルプログラム F446RE_MSP2807_JIS_X_0208_A では、
 JIS X 0208の日本語文字のフォント配列を使用しています。
  フォントはプログラムに埋め込まれます。

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_MSP2807_JIS_X_0208_B
  タッチパネル付きグラフィックLCD MSP2807 の JIS X 0208日本語文字表示 のサンプルプログラムです。

MSP2807_Startup_Screen_JIS_X_0208

  サンプルプログラム F446RE_MSP2807_JIS_X_0208_B では
 バイナリFontファイル Font_16x16_JIS_X_0208_B.bin を使用します。

  バイナリFontファイル Font_16x16_JIS_X_0208_B.bin は
 Flash Memory の以下の番地に配置します。
sector 6 : 0x08040000 - 0x0805FFFF : 128Kbytes : JIS X 0208バイナリFont
sector 7 : 0x08060000 - 0x0807FFFF : 128Kbytes : JIS X 0208バイナリFont

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_MSP2807_TP_ASCII_10K
  タッチパネル付きグラフィックLCD MSP2807 の タッチパネル制御 のサンプルプログラムです。

  タッチパネルの位置調整(基準位置の設定) と
 タッチパネルのデータ入力を行うことができます。

Adjust_TP_First TP_Screen_Input

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム N446RE_AQM1602_I2C1
  I2Cインターフェース接続のLCD AQM1602 に
 文字を表示するサンプルプログラムです。

  AQM1602 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム N446RE_PWM_RGB
  RGB 3色LED の点灯制御をPWMにより行うサンプルプログラムです。
  RGB をそれぞれ独立に制御することができます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム N446RE_WiFi_TCP_Server
  Wi-Fiモジュール ESP-WROOM-02 を使用して、ST(Station)モードで
 TCP Serverとして動作するサンプルプログラムです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム N446RE_WiFi_HTTP
  Wi-Fiモジュール ESP-WROOM-02 を使用して、ST(Station)モードで
 HTTP Serverとして動作するサンプルプログラムです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_DFU_10K
  USBを介して、バイナリファイル .bin をCPUのFlashメモリに書き込むサンプルプログラムです。
  STMicroelectronics社が提供しているアプリケーション STM32CubeProgrammer を使用して書き込みます。
  書き込んだプログラムは、0x08010000 番地から実行されます。

  DFU : Download Firmware Update

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム NF446RE_RTC
  STM32F446RE内蔵のRTCの時刻設定と時刻取得を行うサンプルプログラムです。


サンプルプログラム F446RE_SD_SDIO
  マイクロSDのSDIOアクセスのサンプルプログラムです。

IF_N446RE_SD_SDIO_F

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_SD_SPI
  マイクロSDのSPIアクセスのサンプルプログラムです。

IF_N446RE_SD_SPI_F

  タッチパネル付きグラフィックLCD MSP2807 に搭載の SD でも動作します。

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_eMMC_4bit
  eMMCのSDIOアクセスのサンプルプログラムです。

  4bits (SDIO_D0 - SDIO_D3) のBUS幅でアクセスします。

IF_Nuc_eMMC_F

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム F446RE_eMMC_8bit
  eMMCのSDIOアクセスのサンプルプログラムです。

  8bits (SDIO_D0 - SDIO_D7) のBUS幅でアクセスします。

IF_Nuc_eMMC_F

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

NUCLEO-L476RG のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32L476RG の
 評価用基板 NUCLEO-L476RG のサンプルプログラムを以下に紹介します。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

サンプルプログラム L476RG_MSP2807_ASCII_A の説明
  タッチパネル付きグラフィックLCD MSP2807 の ASCII文字表示 のサンプルプログラムです。

MSP2807_Startup_Screen_ASCII
  ASCII文字表示のプログラムを紹介します。

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム L476RG_MSP2807_UTF16_A
  タッチパネル付きグラフィックLCD MSP2807 の Unicode文字(日本語)表示 のサンプルプログラムです。

  Unicode文字表示モジュールの引数に
 (uint8_t *)"ようこそ!" のように
 直接、日本語を指定して、日本語表示を行うことができます。

MSP2807_Startup_Screen_UTF16

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム L476RG_MSP2807_TP_ASCII
  タッチパネル付きグラフィックLCD MSP2807 の タッチパネル制御 のサンプルプログラムです。

  タッチパネルの位置調整(基準位置の設定) と
 タッチパネルのデータ入力を行うことができます。

Adjust_TP_First TP_Screen_Input

  MSP2807 は、秋月電子通商で販売しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー



NUCLEO-G431KB のサンプルプログラム
  STMicroelectronics社製のマイクロコントローラ STM32G431KB の
 評価用基板 NUCLEO-G431KB のサンプルプログラムを以下に紹介します。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム G431KB_LED_USW
  LED点滅とスイッチ入力の処理を並列に動作させるサンプルプログラムです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム G431KB_CDC
  USBのCDC通信(VCP : 仮想COMポート)のサンプルプログラムです。

  CDC : Communication Device Class

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルプログラム G431KB_UART2
  STM32G431KB の USART2 を使用した、UART通信のサンプルプログラムです。

  UART : Universal Asynchronous Receiver/Transmitter (非同期シリアル通信)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


処理番号を使用したプログラムの説明
  処理番号を使用して、順番に個々の処理を実行することにより、
 一連の動作を実現する方法について説明します。

 LED点滅の例 : Blink_LED_Status
  STM32F405VG のサンプルプログラムで使用している
 LED点滅のモジュール Blink_LED_Status の処理番号による動作は
 以下のようになっています。


   処理番号 0 : LED接続ピンの初期化後、LEDを点灯して待ち時間をセットし、処理番号 1 に移行する。

   処理番号 1 : 指定時間待つ。時間が経過したら、LEDを消灯して待ち時間をセットし、処理番号 2 に移行する。

   処理番号 2 : 指定時間待つ。時間が経過したら、LEDを点灯して待ち時間をセットし、処理番号 1 に戻る。

   このあと、このプログラムは 処理番号 1 と 処理番号 2 を繰り返し実行します。



 Blink_LED_Status のプログラムコード
  LED点滅の例 : Blink_LED_Status のプログラムコードを以下に記します。


//------------------------------------------------------
// Status LED点滅
//------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

// uint16_t uint16_Time_ON  : 点灯時間
// uint16_t uint16_Time_OFF : 消灯時間

// 戻り値:
//   -1 : 処理中
//    0 : OK終了
//    1 : NG
//------------------------------------------------------
int16_t Blink_LED_Status(uint8_t *puint8_JobNum,
                         uint16_t uint16_Time_ON,
                         uint16_t uint16_Time_OFF)
{
  static uint8_t STC_uint8_JobNum_Wait;  // 時間待ちの処理番号
  static uint32_t STC_uint32_tikstart;   // 時間待ち開始時のカウント数
  static uint32_t STC_uint32_Interval;   // 待ち時間

  int16_t int16_Return;


  // Status LED再起動フラグチェック
  if(GLB_int16_Restart_LED_Status == 1){
    // Status LED再起動フラグONの場合
    *puint8_JobNum = 0;  // 処理番号を 0 にする。

    GLB_int16_Restart_LED_Status = 0;  // Status LED再起動フラグOFF
  }


  switch(*puint8_JobNum)
  {
  case 0:
    // Status LED 初期化済みフラグ判定
    if(GLB_int16_LED_Status_Init_Done != 1){
      // Status LED が初期化済みでない場合

      //------------------------------------------------
      // Status LEDのGPIO初期化
      //------------------------------------------------
      Init_LED_Status();


      GLB_int16_LED_Status_Init_Done = 1;  // Status LED 初期化済み をセット
    }


    //------------------------------------------------
    // Status LED点灯
    //------------------------------------------------
    LED_Status_ON();


    STC_uint8_JobNum_Wait = 0;  // 時間待ちの処理番号初期化
    STC_uint32_Interval = (uint32_t)uint16_Time_ON;  // 待ち時間


    (*puint8_JobNum)++;  // 処理番号をインクリメント : 次の処理番号に移行する。 : case 1:
    int16_Return = -1;   // 処理継続
    break;

  case 1:
    //------------------------------------------------------
    // 時間待ち : 単位 mSec
    //------------------------------------------------------
    // 戻り値が -1 以外になるまで、繰り返し呼び出してください。
    //------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ

    // uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
    // uint32_t uint32_mSec : 待ち時間(mSec)

    // 戻り値:
    //   -1 : 処理中 : 時間が経過していない。
    //    0 : OK終了 : 時間が経過した。
    //    1 : NG終了
    //------------------------------------------------------
    int16_Return = Wait_Interval(&STC_uint8_JobNum_Wait,
                                 &STC_uint32_tikstart,
                                 STC_uint32_Interval);
    if(int16_Return == -1){
      // 処理中 : 時間未経過
      break;  // 処理番号維持 : 処理継続 : case 1: をループ
    }


    //------------------------------------------------
    // Status LED消灯
    //------------------------------------------------
    LED_Status_OFF();


    STC_uint8_JobNum_Wait = 0;  // 時間待ちの処理番号初期化
    STC_uint32_Interval = (uint32_t)uint16_Time_OFF;  // 待ち時間


    (*puint8_JobNum)++;  // 処理番号をインクリメント : 次の処理番号に移行する。 : case 2:
    int16_Return = -1;   // 処理継続
    break;

  case 2:
    //------------------------------------------------------
    // 時間待ち : 単位 mSec
    //------------------------------------------------------
    // 戻り値が -1 以外になるまで、繰り返し呼び出してください。
    //------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ

    // uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
    // uint32_t uint32_mSec : 待ち時間(mSec)

    // 戻り値:
    //   -1 : 処理中 : 時間が経過していない。
    //    0 : OK終了 : 時間が経過した。
    //    1 : NG終了
    //------------------------------------------------------
    int16_Return = Wait_Interval(&STC_uint8_JobNum_Wait,
                                 &STC_uint32_tikstart,
                                 STC_uint32_Interval);
    if(int16_Return == -1){
      // 処理中 : 時間未経過
      break;  // 処理番号維持 : 処理継続 : case 2: をループ
    }


    //------------------------------------------------
    // Status LED点灯
    //------------------------------------------------
    LED_Status_ON();


    STC_uint8_JobNum_Wait = 0;  // 時間待ちの処理番号初期化
    STC_uint32_Interval = (uint32_t)uint16_Time_ON;  // 待ち時間


    *puint8_JobNum = 1;  // 処理番号 1 に移行する。: case 1:
    int16_Return = -1;   // 処理継続
    break;

  default:
    *puint8_JobNum = 0;   // 処理番号初期化
    int16_Return = 1;     // NG終了
    break;
  }

  return(int16_Return);
}


Blink_LED_Status の説明

  *puint8_JobNum が処理番号です。この変数は呼び出し側で 0 に初期化します。

  この switch case文のモジュールを繰り返し呼び出すことにより、
 処理番号の処理を順次、実行します。

  switch case文の、処理番号 *puint8_JobNum を使用して1個ずつ処理を進めていきます。
 1個の処理が完了したら処理番号 *puint8_JobNum をインクリメント または セットして、
 次の処理番号に移行します。

  それぞれの case の処理を以下に記します。

 a) case 0:
   初期化済みフラグ GLB_int16_LED_Status_Init_Done を判定して
  初期化済みでない場合は、モジュール Init_LED_Status を呼び出して
  LED接続ピンの初期化を行います。

   そしてLEDを点灯して点灯時間をセットします。

   *puint8_JobNumがインクリメントされ、次の処理 case 1: に進みます。

 b) case 1:
   時間待ちをしています。
   時間が経過するまで case 1: をループします。

   時間が経過していない場合、
  *puint8_JobNumが 1 のまま抜けるので、次にモジュールが呼び出されると
  switch case文で再び case 1: が実行されます。

   時間が経過したとき、LEDを消灯して消灯時間をセットします。

   *puint8_JobNumがインクリメントされ、次の処理 case 2: に進みます。

  c) case 2:
   時間待ちをします。
   時間が経過するまで case 2: をループします。
   時間が経過したら、LEDを点灯して点灯時間をセットします。

   処理番号を 1 にして、case 1:に処理を移行します。

   このあと、このプログラムは case 1: と case 2: を繰り返し実行します。



モジュール内の変数について(重要)
  モジュール Blink_LED_Status 内では、
 以下の3個の変数を static 宣言しています。
  static uint8_t STC_uint8_JobNum_Wait;  // 時間待ちの処理番号
  static uint32_t STC_uint32_tikstart;   // 時間待ち開始時のカウント数
  static uint32_t STC_uint32_Interval;   // 待ち時間
  その理由は、一度、モジュールからリターンした後、
 次にまた呼び出されたときに、変数の値が保持されている必要があるためです。

  モジュール内で static 宣言した変数は値が保持されます。

  処理番号を使用したプログラムの作成において、
 非常に重要なことなので、覚えておいてください。



  上記に示したLED点滅のプログラムは サンプルプログラム F405VG_LED_USW の
 C_Lib/User_IF_Lib/Blink_LED_Status/Blink_LED_Status.cに記述されています。

 このサンプルプログラムは、LED点滅とスイッチ入力のプログラムが並列に動作します。
 処理番号を使用して記述することにより複数のモジュールを並列に実行することが可能になります。


シリアル送受信試験器 SCTester の販売
SCTester_I2C_ADT7410_S0_G_ON
  シリアル通信の送受信試験を行う装置です。

  I2C送受信 と UART送受信 の装置があります。

  以下の3種類です。
  1) I2C送受信試験器 SCTester I2C
  2) UART送受信試験器 SCTester UART
  3) UART送受信モニタ SCMonitor UART

  左の写真は、I2C対応 温度センサモジュール
 ADT7410 を接続して送受信を行っている様子です。


シリアル送受信試験器 SCTester をご覧ください。


 メールアドレス: apm2c.sumi@gmail.com

 なんでも、気軽に ご相談ください。
 担当:おの

マスコット
  えがおのでんし 案内