2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ARM Cortex-M0+な5VマイコンはMicrochip製なら開発環境構築が格安(Windows)

Last updated at Posted at 2019-09-10

8bit PICマイコン開発環境構築(Windows)」で使っていたIDE、"Microchip MPLAB X-IDE"(とXC32コンパイラ)とPICKit4で、旧AtmelのCortex M0+マイコンであるATSAMC20/21シリーズがサポートされました。
こちら5V電源に対応していて、32ピン~100ピンの規模で32bitなのに価格アップが僅かだったりなので、なかなか心惹かれる方も多いのではないかと思います。
いまだ情報が少ない印象なのと、printf()が使えるようになるまでが大変でした・・。
100ピンのATSAMC20N17Aを例に、「UARTからprintf()出力とechoができたところまで」をまとめておこうと思います。
FreeRTOSも設定しています。

なお前回同様、USB非対応でMouserだと300円ぐらいのマイコンをバラで取り寄せてハンダ付けする・・という、組み込み開発のお話です。
デバッガは¥5000ぐらいのPICkitが使えるほか、2000円切る(!)MPLAB Snapが使えるようになり、費用面のハードルは下がっています。

(2020/6/15 update:MPLAB Snapを追記)

ATSAMC20N17Aについて

製品ページ:https://www.microchip.com/wwwproducts/en/ATSAMC20N17A
Cortex-M0+で電源が2.7~5.5V対応、発振子内蔵、RAM 16kB、ROM 128kB、EEPROM 4096バイトで使いやすいと思います。
ピンが多すぎるという場合は32/48/64ピン、RAMをもっと、という方はRAM 32kB/ROM 256kB品( ATSAMC20N18A、Mouserでは347円)があります。C20とC21の違いはCANの有無です。製品ページの「Similar Devices」も参照。
なおPICマイコンとは違って、内蔵発振子が0~40℃では1%精度のようですので、外部発振子なしでもUARTでの通信は心配なさそうです。

日本語資料

ハードウェアの準備

  • マイコン本体
  • 電源、パスコン
  • (必要な場合)ピッチ変換基板
  • デバッガ(PICkit4かSnap)
  • デバッガ接続用ピンヘッダ(8ピン)

インストール

上記2つをダウンロード&セットアップします。

以前はプラグインをインストールしないとMCCやHarmonyによるドライバコードの生成が行えませんでしたが、IDEインストール時にマイコン種別(8bit/16bit/32bit)を指定することでインストールされるようになったようです。

プロジェクトの作成

  • File → New Project
    New Project.png

  • コードを生成してもらうため、"32bit MPLAB Harmony 3 Project" を選択します。
    32bit MPLAB Harmony 3 Project.png

フレームワークのダウンロード

  • Launch Framework Downloader
    フレームワークをダウンロードしておく必要があります。
    Launch Framework Downloader.png
  • Create Folder
    フレームワークをダウンロードするためのパスを入力します。プロジェクトとは別な場所でOK。
    Create Folder.png
    「Create Folder」をクリックして「Next」
  • リポジトリパスの設定
    ・・どうもGithubからライブラリをダウンロードするようです。
    Connection Setting.png
  • Download Catalog
    「Next」をクリックするとカタログをダウンロードします。
    Download Catalog.png
  • Download Packages
    「Next」をクリックしたら、「Download」
    Download Packages.png
  • SLAを3本Acceptしてください(あるいはAccept All Licenses)。
    SLA.png
  • Clean Package:
    ダウンロードが始まります。10GB以上あるので、相当な時間がかかります。
    Clean Package.png
  • ダウンロード完了:
    Closeをクリックして閉じます。
    Package Download Done.png
  • 再びNext。
    なぜかちょっとここで固まるようですがじっと待ちます。
    Package Download Done - Next.png
  • 完了
    Package Download Done - Complete.png

##新規プロジェクト作成の続き

  • Nextをクリック
    New Project-2.png
  • Location / Folder (Name)を入力
    Locationパスのfirmwareフォルダ内にフォルダが作成されるようです。ようやくFinish
    New Project-3.png
  • Configuration Settings:Harmonyのconfig名を指定します。defaultのままでもOKです。
  • ターゲットデバイスの指定:ここではATSAMC20N17Aを指定しましたが、用意した品種にしてください。
  • 後から品種を変えると、正しいConfigurationにならないようです。
    Configuration Settings.png
    Finishをクリックすると終了します。

MPLAB Harmony 3 Configuratorの起動

プロジェクトの新規作成時は自動で起動するようです。最初にFrameworkのpackageバージョンの確認が表示されますので、「Launch」をクリックします。
次回からはツールバーの「Tools」→「Embedded」→「MPLAB Harmony 3 Configurator」から起動します。
Configuration Database Setup.png
「Launch」をクリックすると起動するのですが、IDEが操作不能になるので、電池駆動時や動作の遅いPCでは要注意です。

クロックの設定

・・というのが普通でしょうけど、内蔵発振子で48MHz動作してくれるようにデフォルト設定されていますので、大丈夫です。生成されるコードを確認すると、キャリブレーション設定もしてくれるようですので精度も出ると思います。
いじりたい場合は「Tools」→「Clock Configuration」からどうぞ。

STDIOとUARTの設定

2-2 MPLAB Harmony Configurator.png

  • 画面左側の「Available Components」から

  • 「Peripherals」→「SERCOM」→「SERCOM0」をダブルクリック

  • 「Tools」→ 「STDIO」をダブルクリック
    2-2 MPLAB Harmony Configurator-2.png
    これで、Project GraphにSTDIOとSERCOM0が出てきました。

  • UARTの設定

  • 箱をドラッグするとレイアウトが変更できます。

  • SERCOM0の黄色の菱形「UART」を、STDIOの赤い菱形までをドラッグしてつなぎます。

  • SERCOM0をクリックしすると右側に設定画面が出ます。

  • この例では、Pad[1]をRXに設定しています。Baud Rateはデフォルト115.2kでした。
    2-2 MPLAB Harmony Configurator-3.png

ピンの設定

  • UARTのピン設定は、Tools - Pin Configurationから。
    2-3 Tools - Pin Configuration.png
  • ここでは、角に配置されている26pinと27pinをSERCOM0に設定しました。割付可能なピンについてはデータシートを参照。なお、26番ピンはNMIに設定できるピンなので、ご注意ください(後から気づくと驚きますよそんなの)。
    2-3 Tools - Pin Configurator - 2.png

Systemの設定

  • Systemをクリック
  • Device & Project Configuration / Project Configuration / Tool Chain Selections / XC32 Global Options / Linker / General と掘って、「Heap Size」を4096 bytesに設定。ここからタスクのヒープを取ります。
    7 System.png
    近くにある設定:
    Device & Project Configuration / Project Configuration / Generate System Exceptionの更に下にある「Use Advanced Exception Handling」も有効にしておくと良いでしょう。

Free RTOSの設定

  • 画面左側から「Third Party Libraries」→「Free RTOS」をダブルクリック
    (OSを使わない場合はmain()を変更します。)
  • 「Memory Management Type」を「Heap_3」に設定します。(STDIOを使用するのに必要)
  • 「Minimal Stack Size」を1536ぐらいに設定します。(printf()だけじゃなくgetchar()とかする時は必要みたい)
    6 Free RTOS.png

Harmony Coreの設定

  • 画面左側から「Harmony」→「Core」をダブルクリックして追加
  • 「Generate Harmony Application Files」にチェック
  • 「Stack Size」を768に設定(768 * 32bit (4byte) = 3072バイトの意味。STDIOでこれぐらいは必要みたいです)。SystemのHeap sizeを超えると動かなくなります。。
    8 Core.png

コードの生成

  • メニューから「Generate」→「Generate Code」
    5 Generate Code.png
  • コンフィグファイルを保存するか聞かれます。Saveしましょう。
    5 Code Generate-2.png
  • Generateをクリックすると、コードを生成して閉じてくれます。
    5-2 Generate Project.png

アプリケーションのコーディング

IDEに戻ると、app.cが生成されています。
#include <stdio.h> を入れたら、APP_Tasks()内にprintf()をコーディングしてみましょう。

サンプルコード
void APP_Tasks ( void )
{

    /* Check the application's current state. */
    switch ( appData.state )
    {
        /* Application's initial state. */
        case APP_STATE_INIT:
        {
            bool appInitialized = true;


            if (appInitialized)
            {
                printf( "Hello World!\r\n" );    //←これだけ

                appData.state = APP_STATE_SERVICE_TASKS;
            }
            break;
        }

プロジェクトのプロパティ設定

ここにも落とし穴。「Hardware Tool」がデフォルトでは「Simulator」が選択されていますので、「PICkit 4」(あるいはSnap)を選択しておかないとハードウェアに接続してくれないのです。
4 Project Properties.png

デバッグ実行

PICkit4とテスト基板を接続したら、Debug
9 Debug.png
ビルド後にPICkit4経由でターゲット接続・書き込み&デバッグ実行してくれます。
ターミナルソフトを接続しておけばシリアルに"Hello World!"が表示されると思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?