統合開発環境 MCU Xpressoを使ってみよう


統合開発環境 MCU Xpressoのワークスペース表示画面


組み込みマイコン入門講座 特設ページ

桑野 雅彦 Masahiko Kuwano

 旧フリースケール・セミコンダクタと合併したNXPセミコンダクターズからリリースされた新しいマイコン製品がMCXと名付けられたマイコン・ファミリです.MCXはNXPセミコンダクターズ(以降NXP)やフリースケール・セミコンダクタの従来品種の後継品種として位置付けられています.
 前回はこのMCXマイコンの概要(ファミリの分類,内部ブロック)について解説しました.今回は開発環境 MCU Xpressoの使い方を紹介します.ターゲット・ボードには,前回紹介したFRDM-MCXN947写真1)を引き続き使用します.
 MCUXpressoは,MCXマイコンだけでなく,従来のマイコン・ファミリもサポートしています.豊富なサンプル・プログラムがきちんと整理されており,MCUXpresso上から簡単にワークスペースに取り込んで動作を確認できるようになっています.今までLPCやKinetisを利用してきた方もスムーズに移行できるのではないでしょうか.



写真1 今回使用するターゲット・ボードFRDM-MCXN947

■準備

 MCUXpressoには,次の2つがあります.今回はスタンドアロン版を使用します.

・スタンドアロン版(独立したアプリケーションとして動作するもの)
・VSCode上のプラグイン版

 OSはLinux(Ubuntu22.04LTS)を使用しました.Windows版やMacOS版もあります.画面や使い方は基本的に同じ(ディレクトリやFRDMボードを接続したときのデバイス名が異なる程度)です.
 NXP社のウェブ・ページで「MCUXpresso」で検索すると図1のようなダウンロード・ページが見つかります.



図1 MCUXpressoのダウンロード・ページにおいて検索窓にMCUXpressoと入力

 図1に示すリンクをクリックすると,図2のように開発ツールの一覧が表示されます.ここでMCUXpresso IDEを選択します.するとMCUXpresso IDEのページになります.図3右側の「ダウンロード」をクリックすると図4-1のようなページが開くので,再度「ダウンロード」をクリックします.
 ダウンロード時にはNXPアカウントへのサイン・インが必要です.NXPアカウントを持っていない場合は,ここで新たに作成します.サイン・インが完了すると,図4-2の画面が表示されるので,「MCUXpresso IDE」をクリックします.するとライセンスの同意に関する画面が表示されるので,[I Agree]をクリックします.図4-3の画面が表示されるので,使用するOSに合わせたファイルをダウンロードして実行すればインストールされます.



図2 ダウンロード・ページにある開発ツール一覧



図3 MCUXpresso IDEのトップページ



図4-1 MCUXoresso IDEダウンロード・ページ…その1



図4-2 MCUXoresso IDEダウンロード・ページ…その2



図4-3 MCUXoresso IDEダウンロード・ページ…その3

■サンプル・プログラムを動かしてみよう

●MCUXpressoの起動

 インストールしたMCUXpressoを新たに起動すると,図5のようなワークスペース(プログラム作成作業場所)の指定画面が表示されます.独自のディレクトリを指定したいときはここで指定します.指定したら[Launch]ボタンをクリックします.



図5 ワークスペースの指定

●サンプル・プログラムの取り込み

 ワークスペースを指定すると図6のようなホーム画面になります.ここではサンプル・プログラム(SDK Examples)を取り込むので,[Import SDK Examples]をクリックして,次の画面(図7)で[Go straight to the Wizard]をクリックします.



図6 サンプル・プログラム(SDK Examples)を取り込む



図7 Go straight to the Wizardの起動

●評価ボード/デバイスの登録

 図8のような画面が表示されます.サンプル・プログラムは使用するマイコン・ボードやデバイスごとに用意されているのですが,インストールした直後はまだボードもデバイスも登録が無いので空白になっています.使用する評価ボード(ここではFRDM-MCXN947)を登録します.分かりにくいのですが,左上にある「X」型のアイコンをクリックします.



図8 MCU Xpressoアプリケーション画面

 図9のように,「Boards」タブ下に評価ボードの型名と基板の写真が並んでいます.評価ボードの名前順に並んでいるので,この中から対象とするボードを選択します.ここではFRDM-MCXN947を選択して[Install]ボタンをクリックします.
 すると,図10のようなダイアログが出て,ボードのSDKサンプルがインストールされます.



図9 インストールする評価ボードを選択



図10 ボードのSDKサンプルがインストールされている

●サンプルの取り込み

 ボードのインストールが終わると,図11のようにインストールしたボードが表示されます.このボードを選択して[Next]ボタンをクリックします.もし,インストールが終わっても図11にならない場合は,もう一度Go straight to the Wizard ... を開くと表示されるようになります.
 図12のようにdemo_appsフォルダ下にサンプルが大量に用意されています.ここでは次のサンプルを動かしてみます.

・demo_apps\hello_world_cm33_core0

 このサンプルはターミナルに「hello world.」と表示した後,キーボードから入力された文字をそのままエコーバックするものです.
 インストールしたいサンプルを選んで[Finish]ボタンをクリックすると,最初に作成したワークスペースの下にサンプル・プロジェクトが生成されて,図13のようなIDE(統合開発環境)画面になります.



図11 使用する評価ボードを選んで[NEXT]ボタンをクリック



図12 サンプル hello_world_cm33_core0を選択



図13 サンプルの読み込みが完了するとIDE画面になる

●ビルド

 サンプルをそのままビルドして動かしてみましょう.図14のように,Projectメニューから「Build All」を選択してビルドを実行します.
 図15のようにエラーが無く正常終了したことを確認します.今回はサンプルに手を加えていないのでエラーは出ないはずです.




図14 サンプルをそのままビルドして動かしてみる



図15 ビルドが正常終了した

●ターミナルを設定しておく

▼IDE内蔵ターミナルを使う
 サンプルからはターミナルを使用するので,最初にターミナルを設定しておきましょう.専用のターミナル・ソフトウェアを起動しても良いのですが,ちょっとしたテスト程度ならIDEに内蔵されたターミナルが使えます.
 図16のように「Terminal」タブを選択します.もし,「Terminal」タブが無い場合は図17のように,IDEのWindowメニューから「Show View」→「Other」と選択すると,図17下側のような選択画面になるので,ここにある「Terminal」を選択して[Open]ボタンをクリックすると,「Terminal」タブが現れます.



図16 「Terminal」タブを選択する



図17 もし「Terminal」タブが無いとき

▼ボードを接続する
 ここからはボードを使用します.ボード上にあるMCU-LINK(USB Type-C)コネクタとPCをUSBケーブルで接続します.
▼ポートを選択する
 使用するポートの選択などを行います.図18のようにTerminalタブ画面にあるアイコンをクリックすると,図19のようなターミナルの接続先の選択ダイアログが表示されます.ここではPCのシリアル・ポートを使用しますので,「Serial Terminal」を選択して[OK]ボタンをクリックします.
▼デバイス名を選択する
 次に図20の画面になるので,FRDMボードが接続されているポート(デバイス名)を指定します.筆者の環境では/dev/ttyACM0でしたが,環境によって異なります.そのほかの部分は変更せず,そのまま[OK]ボタンをクリックします.
 図21のようにシリアル・ポート名が付いたターミナル画面が現れます.



図18 ターミナルを開く



図19 ターミナルの接続先の選択ダイアログにおいて「Serial Terminal」を選択する



図20 FRDMボードが接続されているポート(デバイス名)を指定する



図21 シリアル・ポート名が付いたターミナル画面が現れた

●プログラムの書き込み

 ターミナルの準備ができたので,プログラムを書き込みます.図22のように,ワークスペース一覧の一番上にあるプロジェクトをクリックしてから,画面上部の「GUI Flash Tool」アイコンをクリックします.
 アイコンの位置は図22とは異なる場所に移っていることもありますが,虫の形をしたDebugアイコンを目印に探すと良いようです.
 「GUI Flash Tool」アイコンをクリックすると,図23のようにMCU-LINKが見つかるはずですので,そのまま[OK]ボタンをクリックします.
 図24のような警告ダイアログが現れます.プロジェクトの設定がMCXN947なのに検出されたデバイスがMCXN947DVFTなので,名前が不一致(プロジェクト側が詳細型名になっていない)となっています.問題ないので「Yes」をクリックして先に進みます.
 図25の画面が表示されます.デフォルトのままで構いませんので,そのまま[Run]ボタンをクリックします.
 最後に図26のようなプロセッサ・コアの選択ダイアログが現れますが,デフォルトのまま「OK」をクリックします.これで書き込みが行われます.



図22 GUI Flash Toolを起動



図23 デバッガの検出



図24 Target mismatch detectedの警告が出ても[Yes]ボタンをクリック



図25 プログラミング・パラメータ設定画面ではそのまま[Run]ボタンをクリックする



図26 プロセッサ・コアの選択

●書き込みの確認

 書き込みが終わったら,「Terminal」タブを選択し,ターミナル画面に切り替えます.図27のように「hello world.」と表示されていて,キーボードから文字入力すると,入力した文字がエコー・バックされます.
 IDEとは別のターミナル・アプリケーションを使うこともできます.IDEのターミナルを閉じて,シリアル・ターミナル・ソフトウェア(moserial)を使ってみたのが図28です.



図27 書き込みの確認・・・ターミナル画面からキー入力のエコーバックを確認



図28 別のターミナル・ソフトウェア moserialを使ったエコーバックの確認

■活用レッスン・・・hello world.サンプルにLED点滅機能を追加してみる

 上記のhello world.サンプルに,LEDの点滅機能を追加してみましょう.機能追加のために,SDKに用意されている「SysTickタイマ割り込みを使ったLED点滅のサンプル」を参考にします.


●ホーム画面に戻る

 LED点滅のサンプルを取り込むため,いったんホーム画面(Welcome画面)に戻りましょう.IDE上の家の形のアイコン(マウスカーソルを近づけると「Welcome」と表示される)をクリックすると,ホーム画面に戻ります(図29).



図29 IDE上の家の形のアイコンをクリックするとホーム画面に戻る

●LED点滅サンプルの追加

 サンプル・プログラムは多数あるので検索機能を使って絞り込みます.図30のように検索窓に「led」と入力して絞り込みます.この中でdemo_appsフォルダの下にあるled_blinky_peripheral_cm33_core0を選択します.



図30 LED点滅のサンプルを検索,led_blinky_peripheral_cm33_core0を追加する

●LED点滅サンプルを開く

 サンプルのソース(sourceの下のled_blinky.c)を開くと,図31のようになっています.SysTick割り込み処理が,SysTick_Handler()関数です.試しにこのサンプルのプロジェクト名のところをクリックして選択した後,ビルドして書き込むと,LEDが1秒ごとに点滅を繰り返します.



図31 LED点滅サンプル下のled_blinky.cを開いた

SysTick_Handler()の定義場所を探してみよう

 この関数がどこから呼ばれているのかをちょっと探してみましょう.IDEの検索機能を使ってみます.関数名を左クリックで選択した後,右クリックして出てくるメニューから「References」→「Project」でプロジェクト内から検索します.
 図32のようにstartupの下のファイルで参照されています.図33は,これをダブルクリックして開いてみたところです.CPUの割り込みベクタ・テーブルの定義で,ここに関数名が書かれています.
 ところで,SysTick_Handler()の記述をコメント・アウトしてビルドしてもエラーにはなりません.これは別の場所でも同じ名前の関数が定義されているからです.先ほどと同じように関数名を右クリックして表示されたメニューから「Declarations」を使って定義場所を検索すると,ベクタ・テーブルと同じファイルの中でWEAK_AV void SysTick_Handler(void)という関数が定義されています(図34).このWEAK_AVという属性は,「他で定義されていないならこれを生かすけれど,他で定義されているものがあればそっちを優先(こちらは使わない)」というものです.



図32 SysTick_Handler()の定義場所を探す



図33 図32右下[SysTick_Handler()]をダブルクリック



図34 デフォルトのSysTick割り込みハンドラWEAK_AV void SysTick_Handler(void)

●ピンの設定とSysTickタイマの初期化

 SysTick_Handler()関数をコピーしてhello_world.cに貼り付けてビルドしても,エラーになってしまいます.理由は現状のhello_worldサンプルでは,

・LEDが接続されているGPIOピンの定義,設定がされていない
・SysTickタイマの初期化が行われていない

ためです.

 そこで図35のように,「ConfigTools」メニューから「Pins」を選択します.すると,ピン設定ツールが起動します.最初に起動した後はまだプロジェクトを選択していないので空白のままです.図36のようにプロジェクトを選択します.ここではhello_world_cm33_core0を選択します.



図35 ピン設定ツールを起動する



図36 ピン設定するプロジェクトを選択する

▼B12がLED(赤色)端子
 図37のようなピン設定画面になります.B12(P0_10)がフルカラーLEDの赤色端子につながっています.FRDMボードに合わせてLED_REDという名前が既に付けられていますので,これをそのまま利用することにします.この名前がポートの名称などとして使われます.



図37 LEDのピン(B12)を選択する

▼GPIOモードに設定する
 このピンの左端のチェック・ボックスをクリックすると図38のように,モード設定画面になりますので,ここでGPIOモード(GPIO0.GPIO.10)を選択して「Done」をクリックします.



図38 B12(P0_10)をGPIOモードにする

▼出力モードに設定する
 GPIOモードに設定した後,GPIOを出力モードに設定します.図39のように,プルダウン・メニューを使ってB12(P0_10)端子をOutput(出力)モードに設定します.



図39 B12(P0_10)をOutputに設定する

▼Develop(ソフト開発画面)に戻る
 設定が終わったら,MCUXpressoが自動生成したライブラリ・ファイルを更新します.図40のように,画面上部の「Update Code」をクリックします.
 ちなみに,更新せずにソフトウェア開発画面を開く(現在仮設定している状態はそのまま保持されます)ときは,右側の「develop」アイコンをクリックすれば,現在設定している状態を保持したままソフト開発画面に戻ります.
 図41のような更新されるファイルが示されます.特に変更するところは無いので,このまま[OK]をクリックします.



図40 「Update Code」をクリックしてソフトウェア開発画面に戻る



図41 ライブラリの更新・・・特に変更するところは無いので[OK]をクリック

●LED点滅コードを修正する

 LED点滅サンプルのソースコードである,led_blinky.cのSysTick割り込み処理にあるBOARD_LED_RED_GPIOBOARD_LED_GPIO_PINが定義されている場所をIDEの検索機能で検索すると,app.hの中で,

#define BOARD_LED_GPIO BOARD_LED_RED_GPIO
#define BOARD_LED_GPIO_PIN BOARD_LED_RED_GPIO_PIN

となっています.
 ここで,さらにBOARD_LED_RED_GPIOなどを「Search Text」で検索すると,board.hの中で定義されていることが分かります.
 そこで,hello_worldのプロジェクトでboard.hを見ると,同じように定義されていることが分かります(図42).
 ここではapp.hの中での置き換えは行わずに,この定義をそのまま使ってしまいましょう.サンプルのソースコードのSysTick_Handler()関数をhello_world.cの中にコピーしたら,
BOARD_LED_GPIOをBOARD_LED_RED_GPIO
BOARD_LED_GPIO_PINをBOARD_LED_RED_GPIO_PIN
に書き換えておきます.これで仮ビルドしてみたのが図43です.エラーが出ていないことを確認します.



図42 LEDポートの定義



図43 LED点滅コードを追加して仮ビルド

●SysTickタイマの初期化

 SysTickタイマの初期化(周期設定)が必要です.これもLED点滅サンプルの中から探すと,boardの下のhardware_init.cの中にあるBOARD_InitHardware()関数の中で行われています.図44が該当部分で,ここのSysTick_Config()関数がSysTickタイマの初期化です.
 hello_world.cでも同じようにしても良いのですが,ここではmain()の中に入れてみました.図45が追加したところです.これでhello_worldのときと同じようにビルドして書き込むとカラーLED(D2)が赤く点滅します.SysTickタイマに与えている周波数が異なりますので,点滅周期はだいぶ速いです.



図44 LED点滅サンプルからSysTickタイマの初期化を探す



図45 今修正しているhello_world.cでは,main()の中にSysTickタイマ初期化を追加した


 2回に分けてNXPセミコンダクターズの新しいマイコン・ファミリ MCXの話題を紹介しました.全てをここで紹介していくのはとても無理なほど多彩な機能が盛り込まれています.興味を持たれた方はぜひ同社ウェブ・ページを訪れてみてください.

■コラム:FRDMボード壊してしまった!?・・・ファームウェア書き換え失敗からの復活

 本稿はなるべくクリーンな状態からインストールしていきたかったので,仮想マシン下にLinux(Ubuntu22.04LTS)をインストールして試しています.LPCXpressoでプログラムを書き込もうとしたとき,「FRDMのファームウェアのアップデートがあるよ」というメッセージを見ました.そこで,試しに実行したところ,いったんUSBが切り離された後,再接続に時間がかかったためか,途中でエラーになってしまいました.
 ファームウェアのアップデートが途中で止まってしまったために,再度,FRDMボードを接続してもUSBデバイスとしては認識されるものの,FRDMの内蔵デバッガ(MCU-Link)が認識されなくなってしまいました.使い物にならないのかと思いましたが,次のような手順で復旧できました.

●ステップ1・・・Linkserverのダウンロード

 図Aのように,NXPセミコンダクターズのウェブページにあるLinkserverソフトウェアを探します.「Linkserver installer」で検索すると見つかると思います.本稿執筆時点でのバージョンは25.3.31(2025年3月25日)でした.
 macOS用,Windows用,Linux(Ubuntu)用があります.筆者はテスト環境にLinux(Ubuntu 22.04LTS)を使っているので,Ubuntu用をダウンロードしました.ダウンロードされたファイル名は「LinkServer_25.3.31.x86_64.deb.bin」です.
 Linux版の場合,シェル(ターミナル)から管理者権限で起動します.ダウンロードしたファイルのあるディレクトリで,

chmod +x ./ LinkServer_25.3.31.x86_64.deb.bin

として実行権を付けた後,rootで(sudoを付けて)実行します.

sudo ./ LinkServer_25.3.31.x86_64.deb.bin

 これで必要なファイルが/usr/local/MCU-LINK_installerにインストールされます.
 Linuxの場合には,/usr/local/MCU-LINK_installer/scripts/program_CMSISにファームウェア書き込み用のスクリプトが置かれています.



図A Linkserverソフトウェアを探す

●ステップ2・・・FRDMボードをISPモードにする

 FRDM-MCXN947ボードのJ21をショートします.ショート用のプラグは評価ボードに添付されています.J21はFRDMボードをシルクが読める向きに置いたときに中央左側にあります(図B).J21をショートしたたら上側のUSBコネクタに接続します.



図B FRDM-MCXN947ボードにおけるJ21の位置

●ステップ3・・・書き込みを実行する

 書き込み用のスクリプトである

/usr/local/MCU-LINK_installer/scripts/program_CMSIS

を実行します.
 図Cのようにスクリプトを起動したら,FRDMボードが接続されているのを確認して[スペース]バーを押すと書き込みが行われます.
 書き込みが正常に終了したら[Enter]キーを押すと終了します.図Dは筆者が書き込みを行ったときの画面です.
 この後USBケーブルを切り離し,USBJ21を外し,再度USBケーブルを接続すると復旧できていました.



図C プログラム・スクリプトの起動



図D ファームウェアの書き込みが完了した

本記事に記載されている社名,および製品名は,一般に開発メーカの登録商標,または商標です.


・組み込みマイコン入門講座
-- https://interface.cqpub.co.jp/mcu-hands-on/

・登録内容の変更,メール・マガジン配信中止はこちらからお願いします.
-- https://cc.cqpub.co.jp/system/auth/


Interface 表紙

CQ出版社オフィシャルウェブサイトはこちらからどうぞ

CQ出版の雑誌・書籍のご購入は、ウェブショップで!


CQ出版社 新刊情報


近日発売

トランジスタ技術 2025年 7月号

ソニーの超小型コンピュータSpresense

POWER ELECTRONICSシリーズ

スイッチング電源[3]LLC共振コンバータの設計

Interface 2025年 7月号

プログラム改善ビフォーアフター[技100]

別冊CQ ham radio QEX Japan No.55

巻頭企画 八重洲無線 SCU-LAN10+αで作るパーフェクトなリモート環境

CQ ham radio 2025年 6月号

初夏の電波伝搬攻略ガイド