STM32F4およびHAL


23

だから私はSTM32F407(私はARMの初心者)でしばらく実験しており、STがStandard Peripherals Librariesを廃止したように思われるため、HALライブラリを使用して簡単なアプリを書くことにしました。私の質問は、HALのポイントは何ですか?StdPeriphは仕事をしていませんでしたか?なぜ彼らはHALのためにそれを中止するのですか?私には、HALは完全に混乱しているように見えます。

ドキュメントはAWFULです。少なくともStdPeriphについては、必要なものを簡単に見つけることができるように十分に整理された完全なリファレンスがあります(http://stm32.kosyak.info/doc/)。HALには、一見ランダムな構造の安っぽいPDF(http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf)があります。周辺機器などのセクションを読んでも、構成して適切にカスタマイズするための要件を理解できないようです。参照というより、物を忘れたくない人からの個人的なメモのように見えます。

CubeMXを使用してGPIOを初期化し、周辺機器を構成できることは知っていますが、私の目標は自分でそれを行うことです。私は何か間違っていますか?私を混乱させるのはARM初心者ですか?または利用可能なドキュメントは悪いですか?


ChibiOSのような何かがあなたにもっと合っているでしょうか?RTOSがありますが、RTOSなしで使用できる非常に優れたHALもあります。
IgorEE

STは、標準周辺機器ライブラリを厳密に廃止していませんが、新しいファミリ向けに新しいバージョンをリリースすることはありません。彼らは、(STM32F4を含む)リリースされたファミリーのSPLを引き続きサポートすると述べています(フォーラムのどこかにありますが、見つけられないようです)。ARMを初めて使用するので、おそらくHALを使用するのが最善です。私は既にSPLを使用して作成された非常に多くのモジュールを持っているので、移行は苦痛になり、延期しています。私は新しい家族を使用することを決定した後、HALへのポートへのすべてのより多くのコードが存在しますので、これは悪いです
ツタンカーメン

このebook:leanpub.com/mastering-stm32は、初心者向け(ただしプロフェッショナル向け)のSTM32の世界への入門書です。
ロレンツォメラト

回答:


13

独自のライブラリの作成は非常に簡単です。それらのレジスタ仕様のドキュメントは非常に優れており、ほとんどの周辺機器はセットアップが簡単ではありません。彼らのライブラリを使用するのはずっと苦痛だと思います。しかし、おそらくそれは私だけです。これは、st、nxp、ti、atmelに当てはまります(Intelとマイクロチップにはそれほどではありません)。

なぜ彼らがライブラリを変更するのか、いくつもの理由がある可能性があり、いくつかの新しいボスが引き継いだ、いくつかの部門がシャットダウンし、別の部門が引き継いだ。マーケティングは、製品の新しいイメージを望んでいました。ElectronSが述べたように、ハードウェアから離れて抽象化を試みて、ベアメタルを使用したくない、または実行できないユーザーを引き付ける試みになる可能性があります。私はさらにそれを進めて、彼らはおそらくArduino現象と競争しようとしていると言うでしょう。どのmbedと他のみんながいつもやろうとして失敗しました(Arduinoの前でも)。

いずれにせよ、ハードウェアから遠ざかるほど肥大化し、遅くなります。そのため、ROM、RAM、MHZのユニットごとに多くを費やす必要があります。同じ時間をプログラミングに費やすことができますか?ただ違う方法でやってる?

あなたはあなたがPICの世界から来たと言っています、今彼らはツールで大丈夫な仕事をした、彼らのチップドキュメントは恐ろしい、いくつかの最悪のものでした。ライブラリとサンドボックスで補償されました。

1日の終わりに、さまざまなオプションを試し、競合製品を試して、ツールの比較を確認してください。その多くは、それが理にかなっていて、あなたが何かをコンパイルできるかどうかを見るために無料で行うことができます。命令セットシミュレーターを使用することもできます。あなたに合ったものを見つけてください。

あらかじめ用意されているライブラリなしのオプションは常に利用可能です。使用できるツールチェーン、ホストオペレーティングシステム、IDE、エディタなどは制限されません。その点でオプションが極端に制限されている場合は、パーツのプログラミングに固執する可能性があります。または可能な場合はベンダー。

このようなチップ製品を販売するためには、開発環境を提供する必要があります。それがすべて自社のものであっても、無料のものが接着されていてもです。そして、彼らは何らかの種類のライブラリをまとめる傾向があります。十分に見栄えが良く、LEDの例がまばたきするだけで、管理者またはハードウェアチームが製品を設計できるようになります。到着するかしないか。それがほとんど機能するが、チップベンダーにとって大きな勝利ではない場合、その最後の少しの技術サポートにお金を払うことになります。だから、ほとんどそこにいることは彼らの最大の関心事ですが、完全ではありません。

チップベンダーは、デザインを勝ち取るために十分な見栄えさえすればよい。彼らは、新旧の顧客を引き付けるために、製品を改善し続ける必要がありますか?したがって、彼らはやり直しをするでしょう。どれだけ離れているか、どれだけ以前のライブラリがサポートし続けているかは異なります。そのため、慣れ親しんだライブラリについては、最終的にはなくなります。それで、適応することを学んでください(あるいは、彼らのものを使って、あなた自身のものに行かないでください、あなたは無期限にサポートすることができます)。理想的には、製品ごとに1回アプリケーションを開発し、ファームウェアを完璧にすれば(サードパーティライブラリを使用している場合は幸運です)、ツールチェーンを見つけられる場合は戻ってツールチェーンをロードするコンピューターを見つける必要はありません。それをコピーし、その古いライブラリの使用方法を覚えておいてください。ソースコードを保存するだけでなく、すべてのツールとドキュメントを保存する必要があります。

それらのライブラリは、通常1つのツールチェーン、1つまたは2つのIDEでのみサポートされ、場合によってはWindowsおよび特定のバージョンでのみサポートされます。繰り返しますが、あなたが自分でやるのであれば、これらの制限はありません。ARMの場合は間違いありません。いつでも/すべてのライブラリを読んで、どのように動作するかを確認できます。しかし、それはしばしば非常に恐ろしいことです。彼らはライブラリにAチーム開発者を使用していません。

シリコン側とソフトウェア側の両方で時間と労力を節約するために、多くの場合同じIPをリサイクルします。はい、クロックシステムはライブラリの有無にかかわらずトリッキーになることがあります。チップをブリックする可能性が高い、それが私のチップ/ボードブリックのほとんどが発生した場所です。チップがリセットされている間に、すべてではないにしてもほとんどの場合、AVRのチップがどのように機能するかを理解するのに役立ちます。問題は、これらのチップを再プログラムすることができます。これらのベンダーの一部(stは1)には、ストラップ(stワールドではBOOT0など)を使用して選択できる内部ブートローダーがあります。

ワンサイズはすべてに適合し、誰にもうまく合いません。特にソフトウェアに当てはまります。したがって、ハードウェアを抽象化しようとすると、遅くなり、肥大化します。より大きなチップを入手してLinuxを実行することもできます。これの多くは開発者の結果であり、手を汚したくないので、基本的にこれを求めており、彼らはそれを提供しようとしています。

繰り返しますが、stまたはいずれかのベンダーに固執しないでください(手遅れで管理やハードウェアチームがあなたに固執している場合を除き、stm32製品は便利で使いやすいことに注意してください)。周りの買い物。TIはcortex-m4バスケットに多くの卵を入れています。これらの多くのアーム製品とベンダーがサポートするソリューションでmbedを実行できます。

常に信頼できることの1つは、ライブラリが時々変更され、最終的には慣れているライブラリのサポートが停止することです。


あなた自身のライブラリを開発することについての素晴らしい議論は、ほぼ確信しており、私はそれを試してみたいと思いますが、stm32fxxリファレンスマニュアル以外に何が必要だと思いますか?アームコアのマニュアルも読む必要がありますか?CMSISを使用しますか?どのようにレジスタとメモリにアクセスしますか?さらに詳しく説明するか、開始方法の例を提供してください
ElectronS

考えるべきことがいくつかあります。コードの各行はリスクを追加します。使用しているコードのすべてを確認せずに、他の誰かのコードの数万行から数十万行の使用を計画していることを上司に説明する。抽象化する場合は特に、コードのレイヤーにより、バイナリが大きくなり、パフォーマンスが低下します。再度、上司に、ライブラリを使用することを選択したため怠10なため、1,000万単位の製品には35セントまたは350万ドル余分に費用がかかることを説明します。
old_timer

上司がその種のお金であなたに取って代わるために軍隊を雇い、コードのすべての行をレビューして、10,000単位が入らないようにし、危険なソフトウェアを使用することによって引き起こされたソフトウェアバグでそれらを破棄する必要があることに気付くことができます。消費電力が少なく、1回のバッテリー充電で長時間動作する、より遅いクロックレートでより安価な小さな部品を使用します。時には努力する価値がある。そして確かに、時にはそうではありません。
-old_timer

あなたが述べたより多くのポイントに感謝しますが、始めるための最良の方法で、私の質問に答えてもらえますか?CMSISおよびHAL .hファイルをレジスタ名とメモリの場所に使用しますか?
電子

「最高」というものはありません。その言葉を使用すると、事実ではなく個人的な意見になります。いずれかを選択して開始するか、または私ができるように、ロードブロックに到達するまで1つを試してから、別のブロックをもう一度試して、1つまたはすべてが突破するまで各ロードブロックを次のロードブロックに押し戻します。
-old_timer

14

私たちの多くがあなたがHALライブラリと同じ失望を共有していることを教えてください、彼らは確かに不十分で曖昧に文書化されており、まだ新しいには多くのバグが含まれています。

STがHALを決定した理由を簡単に説明してください。

  1. 彼らは、ハードウェアアブストラクションレイヤーを作成したいと考えています。これは、ソフトウェア開発とコードがマイクロコントローラーから独立していることを意味するため、今日stm32f4のコードを作成し、数年後にstm32f7に移行する必要がある場合簡単になり、コードは高度にモジュール化されます。

  2. これにより、ソフトウェアプログラマーなどの開発者は、ハードウェアがタスクをどのように達成しているかを深く理解したり、深く掘り下げたりすることなく、マイクロコントローラーを操作できます。STやTI(この道を今すぐ開始する)などの企業は、高レベルのドライバーを使用してコードを高速で開発するPCコード開発と同様の組み込み開発を試みています。ドライバとライブラリの不器用さと最適化の欠如は、ARMデバイスの高性能によって補われています。

  3. HALライブラリを使用している場合、STM32cubeMXは素晴らしいツールであると思います。最も時間のかかるジョブは周辺機器の初期化であり、ユーザーコードに影響を与えずに簡単に変更できるビジュアルインターフェイスで非常に短時間で実行できるためです適切な場所でコードを記述します)Stm32cubeMxを使用し、コードを確認して、各関数を使用する方法と理由を理解しようとすることができます。この方法で、演習を解決しようとし、修正のためのソリューションマニュアルを近くに持っています素晴らしいIMO。

  4. ARMコアは静かで複雑なため、レジスタを直接処理する(アセンブリ形式でCを書き込む)などの8ビットマイクロコントローラーで使用した古い方法は実行不可能であり、時間がかかり、複雑なアーキテクチャのためにコードの保守が難しくなります(クロック設定など)


6
これはすべて非常に理解できますが、これらはすべてStdPeriphにも当てはまりますか?つまり、それはすでにハードウェア抽象化ライブラリであるので、古いライブラリを改良する代わりに新しいライブラリを作成する意味は何ですか?私は本当に好奇心が強いです、私はARMに非常に新しいです、私は長年にわたってPICを使用してきました。
ジョン

さらにそのCMSIS準拠したライブラリ用
スコット・サイドマン

1
@john、私が理解している限り、HALは標準ライブラリよりも抽象化されており、ハードウェアに依存していません。
電子

12

これは長く、意見が分かれるだろうが、HALを使用して(成功して)新製品をリリースしたばかりなので、検討する価値があると思います。また、私はSTで働いていません。HALのすべてを嫌っています。StdPeriphでプロジェクトをほぼ再開しました。痛みを感じましたが、今ではその理由がわかりました。

まず、少しの背景。超低消費電力テレメトリシステムを開発しており、製品はSTM32L1を搭載しています。ファームウェアの作業を開始したとき、(ベアメタル)STデバイスには通常の選択肢がありました。すべてを手動で行うか、StdPeriphライブラリを使用するか、HALを使用します。STのスタッフは、私たちにHALを採用するように説得しました。それは苦痛で、ソフトウェアのバグを回避する必要があり(I2Cの部分はかなり長い間私たちを夢中にさせました)、私はまだ全体的なアーキテクチャが嫌いです。しかし、それは機能します。

1年以上前にデスクトップから組み込みに切り替えたとき、名前を付けたり、把握することさえできなかった奇妙なことに驚きました。時間が経つにつれて、何起こっているのか、むしろ何起こっているのかを理解することができました。組み込みの世界は過渡期にあります。シリコンは毎日安くなり、MCUはより強力で多用途です。サイズや電力のニーズに関係なく、ますます多くのデバイスが汎用MCUに依存しています。より多くの企業がゲームに参加し、さまざまなバックグラウンドを持つ新しい開発者の大群をもたらします。「平均」文化は、従来の「プログラミングウィザードのスキルを持つEEの男」から「曖昧なハードウェアの知識を持つSWの男」に移行します。

これが良いか悪いかは関係ありません。それはただ起こります。実際、それはソフトウェアの世界にも何度も起こりました。2000年のWebブームはPHP / MySQL初心者を魅了しました-CPUにレジスタがあることを伝えてください。彼らは「Linuxを使用しているので、OSにレジストリはありません」と答えます。以前、プロテクトモードで実行されているマルチユーザのOSは、怠惰な開発者は彼らの全体のキャリアの中でISRを設定することはありませんすることができ、細かいこと。さらに以前は、キーボードとスクリーンがカードパンチャーとプリンターメーカーを狂わせていました。

もちろん、最新の技術にwith敬の念を抱いている無知な開発者を、歴史と完全に結び付けることはできませんが、現在のトレンドは個人的に悲しいものです。若い私が2015年にWebGLでJavascriptでゲームをコーディングしているのを見て、「新しいことは何もありません。1995年にC ++と3Dfx SDKで同じことをしました!」と叫びたいです。物語が伝えていないのは、彼のゲームが私の携帯電話で実行されるのに対して、私のゲームにはゲーマーPC(およびインストーラーが必要で、ウェブで更新をプッシュできませんでした)であるということです。真実は、彼が開発できるのは1か月でゲームであり、私が6か12で同じことをしたことです。

明らかに、ST、TI、Intel、またはチップを製造している人は誰もターンを逃したくありません。そして彼らは正しい。HALはSTの対応であり、実際にはビジネスまたはマーケティングの面だけでなく、エンジニアリングの面でも非常に健全です。それが健全である理由は名前にあります:

ハードウェアアブストラクションレイヤー

それ以外の場合、これは覚えておくべきことです。HALは、ハードウェアから離れる努力です。機能性を詳細から切り離すことができるため、優れたエンジニアリングです。階層化は、複雑なプログラムの開発を可能にするものです-ある抽象概念を別の抽象概念の上に、ハードウェアまで。抽象化は、実際、複雑さを管理するために必要な最も強力なツールです。この惑星の誰もが特定のCPU向けにアセンブリでWebブラウザをプログラムできるとは思えません。

文化の変化を消化するのは確かに難しいですが、ウェブアプリケーションを開発するためにKnuthのコンピュータープログラミング技術を読む必要はないため、EEの世界は埋め込みコードを開発できる(そしてそうする!)ファッキングホーリーリファレンスマニュアルを読んでいない。

良いニュースは、新しいプレーヤーが古いプレーヤーの仕事量を減らすことを意味しないということです-まったく逆の私見です。物事が「うまくいかない」とき、彼らは誰を呼ぶつもりですか?RTFMを使用し(それらとは異なり)、このあいまいな構成レジスタの各ビットが何をするかを知っている場合、利点があります。

測定値と実験の間に、HALを使用してください。新しいMCU 問題ない。新しいMCUライン?問題ないとしても(私はそれだけで感じた... CubeMXとちょうどその日にSTM32F4ヌクレオでテストをコード化して、単に私たちのデバイスに移植されませ)。単体テストのモック?問題ない。抽象化が優れているため、リストは延々と続きます。

もちろん、HAL自体は100%OKではありません。ドキュメントはひどいです(しかし、RT F HRM を持っていますよね?)、バグがあります。STは私たちにベータ版をダンプしました(最近はかなり標準的なようです)、そして彼らのパブリックサポートは冗談です。しかし、HALをリリースしないとさらに悪化します。


どこから来たのかわかります。私が理解しているように、(残念ながら)物事はArduinoのやり方で進み、プログラマから現実をできるだけ隠して、より高度なソフトウェアの人をハードウェアプログラミングに引き付けようとします。これがHALなどのライブラリの背後にある理由です。しかし、それがどれほどひどく文書化されているか、また完全な混乱を見て、私は彼らがいつでもそうすることに成功するとは思わない。
ジョン

@John:HALは「現実」を隠しません。あなたが微調整するためのすべてがそこにあります。すべての部分はオプションです。たとえば、マクロのみを使用してレジスタにアクセスしたり、特定のドライバー(I2Cなど)のみを使用したり、ISRやクロック設定を含むすべてのものを使用したりできます。あなたの選択。しかし、私はドキュメンテーションが大嫌いだと思います。(私はSTを言ったし、彼らはところでそれに取り組んでいたと約束)

新しいツールでも同じことを繰り返しています。なぜなら、新しいツールは仕事をより簡単かつ迅速にすることを約束し、したがって費用効率が高いからです。しかし、人間は2095年でも1995年でも同じであるため、私たちはまだ同じことをしています。新しいツールに従うか、既に使い慣れたツールを使用するかは、私たちに任せます。
ジョニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.