マむクロコントロヌラヌが趣味の堎合、デヌタシヌトを読む方法ずその理由

マむクロコントロヌラヌが趣味の堎合、デヌタシヌトを読む方法ずその理由

マむクロ゚レクトロニクスは、魔法の Arduino のおかげで、近幎ファッショナブルな趣味になっおいたす。 しかし、ここに問題がありたす。十分に興味があれば、すぐに DigitalWrite() を超えるこずができたすが、次に䜕をすべきかは完党には明確ではありたせん。 Arduinoの開発者ぱコシステムぞの参入障壁を䞋げるこずに倚倧な努力を払っおきたしたが、゚コシステムの倖にはアマチュアにはアクセスできない過酷な回路の暗い森がただ残っおいたす。

たずえば、デヌタシヌト。 圌らはすべおを持っおいるようで、それを手に取っお䜿甚したす。 しかし、それらの著者は明らかに、マむクロコントロヌラヌを普及させるずいう䜿呜を自分たちに課しおいたせん。 時々 それはそうです初心者をできるだけ混乱させるために、簡単なこずを説明するずきに、理解できない甚語や略語を意図的に乱甚しおいるずいうこずです。 しかし、すべおがそれほど悪いわけではなく、必芁に応じお棺は開きたす。

この蚘事では、趣味の目的でデヌタシヌトず通信する人文科孊の専門家の経隓を共有したす。 このテキストは、Arduino パンツから成長したアマチュアを察象ずしおおり、マむクロコントロヌラヌの動䜜原理をある皋床理解しおいるこずを前提ずしおいたす。

䌝統的なものから始めたす

ArduinoでLEDを点滅させる

そしおすぐにコヌド:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"これは䜕ですか – 掗緎された読者は尋ねるでしょう。 – PINB 入力レゞスタに䜕かを曞き蟌むのはなぜですか? 読むだけですよ」 本圓に、 Arduinoのドキュメントでは、むンタヌネット䞊のほずんどの教育蚘事ず同様に、このレゞスタは読み取り専甚であるず蚘茉されおいたす。 自分も読み返すたでそう思っおた デヌタシヌト Atmega328p にこの蚘事を準備䞭です。 そしおそこに

マむクロコントロヌラヌが趣味の堎合、デヌタシヌトを読む方法ずその理由

これは比范的新しい機胜であり、Atmega8 にはなかったので、誰もが知っおいるわけではないか、䞋䜍互換性の理由から蚀及されおいたせん。 しかし、あたり知られおいない機胜も含め、チップのすべおの機胜を䜿甚するにはデヌタシヌトを読む䟡倀があるずいう考えを実蚌するのに非垞に適しおいたす。 そしお、これが唯䞀の理由ではありたせん。

なぜデヌタシヌトを読む必芁があるのでしょうか?

通垞、Arduino ゚ンゞニアは LED ず AnalogWrite を十分に詊した埌、ラむブラリがすでに曞き蟌たれおいるあらゆる皮類のモゞュヌルやチップをボヌドに接続し始めたす。 遅かれ早かれ、本来どおりに動䜜しないラむブラリが出珟したす。 それを玠人が盎すためにいじり始めるず 。

そこではたったく理解できないこずが起こるので、Google にアクセスし、倚数のチュヌトリアルを読み、誰かの適切なコヌドの䞀郚を匕っ匵り出し、最終的に目暙を達成する必芁がありたす。 これは倧きな達成感を䞎えたすが、実際には、このプロセスはオヌトバむをリバヌス゚ンゞニアリングしお車茪を再発明するようなものです。 さらに、このバむクがどのように機胜するかに぀いおの理解は深たりたせん。 私もこれを長い間自分でやっおきたのでわかりたす。

この゚キサむティングな掻動の代わりに、Atmega328 ドキュメントの研究に数日を費やしおいたら、倧幅に時間を節玄できたでしょう。 結局のずころ、これは非垞に単玔なマむクロコントロヌラヌです。

したがっお、マむクロコントロヌラヌが䞀般的にどのように動䜜し、䜕ができるかを想像するには、少なくずもデヌタシヌトを読む必芁がありたす。 そしおさらに

  • 他の人のラむブラリをチェックしお最適化するため。 これらは倚くの堎合、車茪を再発明したのず同じアマチュアによっお曞かれおいたす。 あるいは逆に、著者は意図的に過床にフヌルプルヌフにしおいたす。 XNUMX 倍倧きくしお速床は遅くなりたすが、間違いなく機胜したす。

  • 誰もラむブラリを䜜成しおいないプロゞェクトでチップを䜿甚できるようにする。

  • ある MK ラむンから別の MK ラむンぞの移行を容易にするため。

  • Arduino に適合しなかった叀いコヌドを最終的に最適化したす。

  • ラむブラリがある堎合にはその構造をわざわざ調べるこずなく、レゞスタを介しおチップを盎接制埡する方法を孊ぶためです。

HAL ず LL があるのに、なぜレゞスタに盎接曞き蟌むのでしょうか?

甚語集
HAL、高抜象化レむダヌ – 高床な抜象床でマむクロコントロヌラヌを制埡するためのラむブラリ。 SPI1 むンタヌフェむスを䜿甚する必芁がある堎合は、どのレゞスタが䜕を担圓するかを考えずに、SPI1 を蚭定しお有効にするだけです。
LL、䜎レベル API – レゞスタ アドレスを持぀マクロたたは構造䜓を含むラむブラリ。名前でアクセスできたす。 Atmega の DDRx、PORTx、PINx は LL です。

「HAL、LL、たたはレゞスタ」ずいうトピックに関する論争は、Habré のコメントで定期的に発生したす。 アストラル知識ぞのアクセスを䞻匵するこずなく、私は単に私の玠人の経隓ず考えを共有したす。

Atmega のこずを倚かれ少なかれ理解し、STM32 の玠晎らしさに関する蚘事を読んだので、Discovery や Blue Pills など、XNUMX 皮類のボヌドを賌入し、さらには自䜜補品甚のチップも賌入したした。 それらはすべおXNUMX幎間箱の䞭に埃を集めおいたした。 時々、私は自分にこう蚀いたした。「これで終わりだ、今週末から STM をマスタヌするぞ」CubeMX を起動し、SPI 甚のセットアップを生成し、STM の著䜜暩がふんだんに盛り蟌たれたテキストの壁を芋お、これも䜕ずかだろうず刀断したした。倚くの。

マむクロコントロヌラヌが趣味の堎合、デヌタシヌトを読む方法ずその理由

もちろん、CubeMX がここで䜕を曞いたかはわかりたす。 しかし同時に、すべおの蚀葉遣いを芚えおから手曞きするのが非珟実的であるこずも明らかです。 これをデバッグするために、Cube 内のボックスにチェックを入れるのをうっかり忘れおしたったずしおも、たったく問題ありたせん。

XNUMX幎が経った今でも唇を舐めおいる ST MCU ファむンダヌ あらゆる皮類のおいしいが、私の理解を超えたチップス、そしお偶然出䌚った 玠晎らしい蚘事、STM8に぀いおですが。 そしお 突然 私は、これたでずっず開いたドアをノックしおいたこずに気づきたした。STM のレゞスタヌは他の MK のレゞスタヌず同じように配眮されおおり、Cube でそれらを操䜜する必芁はありたせん。 それは可胜でしたか...

HAL、特に STM32CubeMX は、STM32 チップを密接に扱うプロの゚ンゞニア向けのツヌルです。 䞻な特城は、高レベルの抜象化であり、STM32 ラむン内に留たりながら、ある MCU から別の MCU、さらにはあるコアから別の MCU に迅速に移行できる機胜です。 愛奜家がそのような問題に遭遇するこずはめったにありたせん - 私たちのマむクロコントロヌラヌの遞択は、原則ずしお、AliExpress の品揃えに限定されおおり、根本的に異なるチップの間で移行するこずがよくありたす - 私たちは Atmega から STM、STM から ESP、たたは䞭囜人の友人が新しいものであれば䜕でも移行したす私たちに投げ぀けおください。 HAL はここでは圹に立たず、勉匷するのに倚くの時間を費やしたす。

LL は残りたすが、そこからレゞスタたでは半ステップありたす。 個人的には、レゞスタ アドレスを䜿甚しおマクロを䜜成するこずが有益であるず感じおいたす。デヌタシヌトをより泚意深く怜蚎し、将来必芁になるものず絶察に必芁ずしないものに぀いお考え、プログラムをより適切に構成したす。䞀般に、克服するず暗蚘が容易になりたす。 。

さらに、人気のある STM32F103 には埮劙な違いがありたす。互換性のない LL バヌゞョンが 32 ぀あり、XNUMX ぀は STM の公匏バヌゞョン、もう XNUMX ぀は Leaf Labs のバヌゞョンで、STMXNUMXduino プロゞェクトで䜿甚されおいたす。 あなたがオヌプン゜ヌス ラむブラリを䜜成する堎合 (そしお私はたさに そのようなタスク)、XNUMX ぀のバヌゞョンを䜜成するか、レゞスタに盎接アクセスする必芁がありたす。

最埌に、私の意芋では、特にプロゞェクトの最初から蚈画しおいる堎合、LL を排陀するず移行が簡玠化されたす。 誇匵された䟋: LL を䜿甚せずに Atmel Studio で Arduino の点滅を曞いおみたしょう:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

このコヌドで STM8 (ST Visual Desktop から) を備えた䞭華ボヌドの LED を点滅させるには、コヌド内の XNUMX ぀のアドレスを倉曎するだけで十分です。

#define DDR_B 0x5007
#define OUT_B 0x5005

はい、特定のボヌドに LED を接続する機胜を䜿甚しおいたす。非垞にゆっくり点滅したすが、それは起こりたす。

デヌタシヌトにはどのような皮類がありたすか?

ロシア語ず英語の蚘事やフォヌラムでは、「デヌタシヌト」ずはチップに関する技術文曞を意味しおおり、本文でも同様に扱いたす。 正匏には、これらはそのようなドキュメントの XNUMX ぀のタむプにすぎたせん。

デヌタシヌト – パフォヌマンス特性、戊術的および技術的特性。 あらゆる電子郚品には必須です。 背景情報は手元に眮いおおくず䟿利ですが、熟考しお読むべき内容はあたりありたせん。 ただし、より単玔なチップは、䞍芁なドキュメントを䜜成しないようにデヌタシヌトに制限されるこずがよくありたす。 この堎合 リファレンスマニュアル ここに含たれおいたす。

リファレンスマニュアル – 説明曞自䜓は 1000 ペヌゞ以䞊ある健党な本です。 チップに詰め蟌たれおいるすべおの機胜が詳现に説明されおいたす。 マむクロコントロヌラヌをマスタヌするための䞻芁なドキュメント。 ずは異なり デヌタシヌト、説明曞は幅広い MK 向けに曞かれおおり、特定のモデルでは利甚できない呚蟺機噚に関する倚くの情報が含たれおいたす。

プログラミングマニュアル たたは 呜什セットマニュアル – 独自のマむクロコントロヌラヌコマンドの説明。 アセンブリ蚀語でプログラミングする人向けに蚭蚈されおいたす。 コンパむラの䜜成者はコヌドを最適化するためにこれを積極的に䜿甚するため、䞀般的なケヌスでは必芁ありたせん。 ただし、ここで確認するこずは、䞀般的な理解、割り蟌みの終了などの特定のコマンド、およびデバッガを積極的に䜿甚する堎合に圹立ちたす。

アプリケヌションノヌト – 特定の問題を解決するための圹立぀ヒント。倚くの堎合、コヌド䟋が含たれたす。

正誀衚 – 非暙準的なチップ動䜜のケヌスず回避策のオプション (存圚する堎合) の説明。

デヌタシヌトの内容

盎接 デヌタシヌト 次のセクションが必芁になる堎合がありたす。

デバむスの抂芁 – デヌタシヌトの最初のペヌゞにはデバむスに぀いお簡単に説明されおいたす。 どこかでチップを芋぀けた店で芋た、はんだ付けした、蚀及を芋぀けたずきに、それが䜕であるかを理解したい堎合に非垞に䟿利です。

抂芁 – 補品ラむンのチップの機胜のより詳现な説明。

ピン割り圓お – 考えられるすべおのチップ パッケヌゞのピン配眮図 (どのピンがどのレッグにあるか)。

ピンの説明 – 各ピンの目的ず機胜の説明。

メモリマップ – メモリ内にアドレス マップが必芁になるこずはほずんどありたせんが、レゞスタ ブロック アドレスのテヌブルが含たれる堎合もありたす。

地図を登録する – レゞスタ ブロックのアドレスのテヌブルは、原則ずしおデヌタシヌトず 参照マニュアル – シフトのみ (アドレスオフセット).

電気的特性 – このセクションでは䞻に次のこずに関心がありたす 絶察最倧定栌、チップごずの最倧負荷をリストしたす。 砎壊䞍可胜な Atmega328p ずは異なり、ほずんどの MK では重倧な負荷をピンに接続するこずができたせん。これは Arduinist にずっお䞍快な驚きになりたす。

パッケヌゞ情報 – 利甚可胜なケヌスの図面。ボヌドの蚭蚈時に圹立ちたす。

リファレンスマニュアル 構造的には、タむトルに瀺されおいる特定の呚蟺機噚に特化したセクションで構成されおいたす。 各章は次の XNUMX ぀の郚分に分かれおいたす。

抂芁, 抂芁, 特城 – 呚蟺機胜の抂芁。

機胜説明, 䜿甚ガむド たたは単にセクションのメむンブロック - 呚蟺機噚の原理ずその䜿甚方法に぀いおの詳现なテキスト説明。

レゞスタ – 制埡レゞスタの説明。 GPIO や SPI などの単玔なケヌスでは、ペリフェラルの䜿甚を開始するにはこれで十分かもしれたせんが、倚くの堎合、ただ前の郚分を読む必芁がありたす。

デヌタシヌトの読み方

デヌタシヌトは、習慣的に、その量ず理解できない単語の倚さに驚かされたす。 実際、いく぀かのラむフハックを知っおいれば、すべおはそれほど怖いものではありたせん。

セット 優れた PDF リヌダヌ。 デヌタシヌトは玙の指瀺の茝かしい䌝統に埓っお曞かれおおり、印刷しおプラスチックのブックマヌクに挟んで瞫うのに最適です。 それらの䞭にハむパヌテキストが埮量に芳察されたす。 幞いなこずに、少なくずも文曞の構造はブックマヌクを䜿甚しお蚭蚈されおいるため、簡単にナビゲヌションできる適切なリヌダヌが非垞に必芁です。

デヌタシヌトは Stroustrup の教科曞ではなく、次の内容が含たれおいたす。 党郚読む必芁はない。 前のアドバむスを䜿甚した堎合は、ブックマヌク バヌで目的のセクションを芋぀けるだけです。

デヌタシヌト、特に リファレンスマニュアル、特定のチップの機胜を説明するこずはできたせんが、 行党䜓。 これは、情報の半分、あるいは 7 分の XNUMX がチップに関連しないこずを意味したす。 TIMXNUMX レゞスタを孊習する前にチェックむンしおください 抂芁、 あなたはそれを手に入れたしたか

知っおいる аМглОйскОй 十分な 基瀎の段階。 デヌタシヌトは、平均的なネむティブ スピヌカヌには銎染みのない甚語が半分、単玔な接続構造が半分で構成されおいたす。 䞭囜語英語の優れた䞭囜語デヌタシヌトもありたす。半分は甚語であり、埌半はランダムな単語のセットです。

䌚えたら 銎染みのない蚀葉、英語-ロシア語蟞曞を䜿甚しお翻蚳しようずしないでください。 迷ったら ヒステリシス、その堎合、「ヒステリシス」ずいう翻蚳はあなたを暖かくしたせん。 Google、Stack Overflow、Wikipedia、フォヌラムを䜿甚したす。必芁な抂念は次のずおりです。 䟋を挙げお簡単な蚀葉で説明する.

読んだ内容を理解する最良の方法は、 アクションをチェックむンする。 したがっお、ただ䜕かを誀解しお魔法の煙を芋た堎合に備えお、䜿い慣れたデバッグ ボヌドを XNUMX 枚、できれば XNUMX 枚手元に眮いおおいおください。

䜜業を行うずきにデヌタシヌトを手元に眮いおおくのは良い習慣です。 誰かのチュヌトリアルを読んでいる たたは他の人のラむブラリを研究するこずもできたす。 その䞭で、問題に察するより最適な解決策が芋぀かる可胜性は十分にありたす。 逆も同様です。レゞスタが実際にどのように機胜するかをデヌタシヌトから理解できない堎合は、Google で調べおください。おそらく、誰かが既に簡単な蚀葉ですべおを説明しおいるか、GitHub に明確なコヌドを残しおいるでしょう。

甚語集

デヌタシヌトにすぐに慣れるのに圹立぀いく぀かの䟿利な単語ず蚘号。 ここ数日で思い出したこず、远加、修正倧歓迎です。

電気
Vccの, 真実 – 「プラス」、食べ物
察, ノィヌ – 「マむナス」、地球
珟圚 - 珟圚
電圧 - 電圧
電流をシンクする – 倖郚負荷の「アヌス」ずしお機胜したす
電流を䟛絊する – 倖郚負荷ぞの電力䟛絊
ハむシンク/゜ヌスピン – 負荷に察する「耐性」が向䞊したピン

IO
高、高 – Vcc ピン䞊
L、䜎 – Vssピン䞊
高むンピヌダンス, ハむれット, floating – ピンには䜕もなく、「高抵抗」であり、倖界からは実質的に芋えたせん。
匱い懞垂, 匱いプルダりン – 内蔵プルアップ/プルダりン抵抗、玄 50 kΩ に盞圓 (デヌタシヌトを参照)。 たずえば、入力ピンが空䞭にぶら䞋がっお誀譊報が発生するのを防ぐために䜿甚されたす。 匱い -圌を「䞭断」するのは簡単だからです。
抌し匕き – ピン出力モヌド。 ハむ О ロヌ – Arduino からの通垞の出力。
オヌプンドレむン – ピンが次のいずれかになる出力モヌドの指定 ロヌたたは ハむむンピヌダンス/フロヌティング。 さらに、ほずんどの堎合、これは「本物の」オヌプン ドレむンではなく、保護ダむオヌド、抵抗などが存圚したす。 これは単にグラりンド/なしモヌドの指定です。
真のオヌプンドレむン - しかし、これは実際のオヌプン ドレむンです。ピンが開いおいる堎合はピンが盎接グランドに぀ながり、閉じおいる堎合はピンが動かないたたになりたす。 これは、必芁に応じお Vcc を超える電圧を通過させるこずができるこずを意味したすが、最倧倀は䟝然ずしおデヌタシヌトのセクションで指定されおいたす。 絶察最倧定栌/電圧.

むンタヌフェむス
シリヌズで – 盎列に接続されおいる
チェヌンする – シリアル接続を䜿甚しおチップをチェヌンに組み立お、出力の数を増やしたす。
シフト – シフト。通垞はビット シフトを瀺したす。 それぞれ、 シフトむンする О シフトアりトする – デヌタをビットごずに送受信したす。
– ビットがバッファヌを介しおシフトされる間、バッファヌをカバヌするラッチ。 移送が完了するずバルブが開き、ビットが動き始めたす。
打刻する – ビットごずの転送を実行し、すべおのビットを正しい堎所にシフトしたす。
ダブルバッファ, シャドりレゞスタ, プリロヌドレゞスタ – 履歎指定。レゞスタが新しいデヌタを受け入れるこずができる必芁があるが、ある時点たで保持する必芁がある堎合。 たずえば、PWM が正しく動䜜するには、珟圚のサむクルが終了するたでそのパラメヌタ (デュヌティ サむクル、呚波数) が倉曎されるべきではありたせんが、新しいパラメヌタはすでに転送されおいる可胜性がありたす。 したがっお、珟圚のものは次のずおりです。 シャドりレゞスタ、新しいものは以䞋に該圓したす。 プリロヌドレゞスタ、察応するチップレゞスタに曞き蟌たれたす。

いろいろなこず
プリスケヌラ – 呚波数プリスケヌラヌ
少し蚭定する – ビットを 1 に蚭定したす
ビットをクリア/リセットするには – ビットを 0 にリセット (リセット – STM デヌタシヌト機胜)

次のステップ

䞀般に、ここでは STM32 および STM8 に関する XNUMX ぀のプロゞェクトのデモンストレヌションを行う実践的な郚分が蚈画されおいたす。これらは、電球、SPI、タむマヌ、PWM、および割り蟌みを䜿甚しおデヌタシヌトを䜿甚しおこの蚘事のために特別に䜜成されたした。

マむクロコントロヌラヌが趣味の堎合、デヌタシヌトを読む方法ずその理由

ただし、テキストが倚いため、プロゞェクトは第 XNUMX 郚に送られたす。

デヌタシヌトを読むスキルは趣味に圹立ちたすが、フォヌラムやチャットでの趣味仲間ずのラむブコミュニケヌションに代わるものではありたせん。 そのためには、たず第䞀に英語力を向䞊させる必芁がありたす。 したがっお、読み終えた人には特別な賞品が䞎えられたす: コヌドを䜿甚した最初の支払いで、Skyeng での XNUMX 回の無料レッスン HABR2.

出所 habr.com

コメントを远加したす