mbedオンラインコンパイラ リタイア済?
今日、1月4日ですが、例の場所にあったリンク先がなくなって旧オンラインコンパイラにアクセスできませんね。。。
mbed Compiler終息ファイナルアナウンス?
最終アナウンスかな。どうやって、保存しとけばいいのかなぁ。
Sigfox使い始めた
やっと使い始めたのに、Sigfox経営難で破産しているね。。段階的にメッセージの保管期間も短縮される予定だそうです
https://www.kccs.co.jp/sigfox/blog/technical/2022/0225/
う〜っむ、何かやろうとするといつもこれだな、旬な時すぐ飛びついてやらないからだね。まぁ、そういう技能がないからだという話もあるけど。スイッチサイエンスにはたくさん在庫があるようなので、購入して登録、1年間の無料期間ということになっている。
mbedから接続してAT$SF=なんかpayloadを送信。。sigfoxクラウドで見ることはできた。
で、コレをどうすんだということだが、とりあえず、macに入っているphpとApacheで、urlを取得してみた。
Nucleo SPI CLK
Nucleo(F411RE)のSPIクロックが想定通りにならなかった。2MHzで1.5MHzs、1.5MHzで750KHz・・・。半分というとそうでもない。。。
コミュニティーで答えをもらったのだが、結論としては、データシートをよく読みなさいということだと思われます。mbedで遊んでいると、ターゲットを変えるだけで普通に動いてhしまうため、そこがどうしても、気づかなくなってしまう。それに、KL25の時はあまり気にせずほとんどがその通りに動いていた。(実際、今回の件もあり確認したが細かく設定できる)
printf(“SystemClock=%d[Hz]\r\n”, SystemCoreClock);
クロック出力できるとのことでmNucleo-F411では内蔵発振、外部水晶時ともに、96MHzと出力される。
Nuleo-F411では、SPIクロックソースは内部クロックの分周を利用するがその設定が3ビットしかないとのことである。データシート
Nucleo 今度は外部クロック
今度は外部クロックでハマった。こっちのブックに記載。
mbed-osのなかで、内部クロックが有効にされているため外部振動子を実装しても外部クロックに切り替わってくれないということのように思う。
最初に参考にしたページ
https://os.mbed.com/questions/79122/Nucleo-F303K8MSO/
Nucleo クロックソース
Nucleoの水晶振動子
Nucleo基板(F411RE)には、水晶振動子が二つあり、そのうち32.768KHz(X2)は実装されている。mbedのTickerで時間を刻むと、少し短めになった。1msに対して985usあたり、1~2%の誤差であり、これはセンシング精度としては大きい。会社業務で使用していたため、問題があった。回路図を見ると、X3は8MHzであるが実装されてない。NucleoのDocumenntには、実装すれば自動で切り替わると書いてある。Target基板を作った際、実装できるようにしてあったので、X3を実装したもののTickerの時間精度が上がらず(変わらず)外部クロックが機能していないようだった。
オシロスコープで発振子の振動波形を見たところ、まったく振動していない。しかも、X2もまったく振動していなかった。mbedの中で外部クロックが有効とされずに内部クロックで動いているように思えた。
target.json の中の"STM32F4"に、"clock-source"の記述でHSIを使うようになっていたので、記述をまねして、下記のようにプロジェクトの中のmbed_app.jsonに記述する。
USBSerialの送信
mbed-os5のUSBSerialはボーレート設定も要らず、パソコン側のOS標準ドライバで動作するようでTargetマイコンを変えても常にポート番号が同じで使いやすい。しかしprintfが遅い
mbed-os5のAPIにあるUSBSerialでprintfを使うと1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。USBデコードできるオシロで確認すると1byte=1packetで送信されていた。
mbed-os5 USBSerial
エキスパートには当たり前だったかもしれないのだが、私は知らなかった。
mbed-os5のAPIにあるUSBSerialでは、printfの送信で1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。
mbed-os5でUSBSerial
os2からos5へ変えていきなさいということを言われているらしいので、数週間ずっとチャレンジしていました。
直近でやりたかったことは、Keil Studio Cloudのos2では実現できていたので、これをos5に移行する試みだった。os5はmbed-os-example-blinky5を作って、LEDの点滅動作ができていることを確認してのち、USBSerialを追加するもの。
変数参照が最適化される
os2からos5へ変更する際に、どうもTickerがうまく動かなかった。
Ticker tbase;
DigitalOut led(LED1);
volatile int tb_reach=0;
void tbase_t(void){
tb_reach=0;
}
int main(){
tbase.attach( callback(tbase_t) , 0.5 ) ;
while (true) {
led = !led;
// thread_sleep_for(500);
while( tb_reach );
tb_reach = 1;
}
}
mbed-os5-example-blinkyのthread_sleep_for()をTickerに変えるだけだから、動いて当然、と思ってたのに while( tb_reach ); のところからぬけてくれないみたいな動きになった。