Help us understand the problem. What is going on with this article?

305円のARM 32bitでRAMが16kBで100pinな5Vマイコン、ATSAMC20N17Aの開発環境構築

はじめに

PICマイコンでも使えるIDE、"Microchip MPLAB X-IDE"(とXC32コンパイラ)とPICKit4で旧AtmelのCortex M0+マイコンであるATSAMC20/21がサポートされました。
まだ情報が少ない印象なのと、printf()が使えるようになるまでが大変でした・・
100ピンのATSAMC20N17Aを例に、「UARTからprintf()出力できたところまで」をまとめておこうと思います。
FreeRTOSも設定しています。

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」も参照。

日本語資料

ハードウェアの準備

  • マイコン本体
  • 電源、パスコン
  • (必要な場合)ピッチ変換基板
  • デバッガ(PICkit4)
  • デバッガ接続用ピンヘッダ(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からダウンロード ・・そう、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」
2-1 Configuration Database Setup.png

クロックの設定

・・というのが普通でしょうけど、内蔵発振子で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に設定しました。割付可能なピンについてはデータシートを参照。 2-3 Tools - Pin Configurator - 2.png

Systemの設定

  • Systemをクリック
    • Heap Sizeを4096 bytesに設定。ここからタスクのヒープを取りますので要注意。 7 System.png

Free RTOSの設定

  • 画面左側から「Third Party Libraries」→「Free RTOS」をダブルクリック (OSを使わない場合はmain()を変更します。)
  • 「Memory Management Type」を「Heap_3」に設定します。(STDIOを使用するのに必要) 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
    • コンフィグファイルを保存するか聞かれます。どっちでもいいですがDon't Saveでも大丈夫(後でまた聞かれますし、Saveでいいのに下記のように「Don't Save」と「Save As」ボタンしかないときがあります)。 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」を選択しておかないとハードウェアに接続してくれないのです。
4 Project Properties.png

デバッグ実行

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away