エントリー
前回の記事では、受け取ったキットの個人的な印象を共有し、MT-LINKを使用したデモプロジェクトでコントローラーをプログラムしました(これも提供されていました)。 キット全体を詳細に検討したので、今度はキットを使い始めましょう。
せっかちな人のために-結果。
K1986BE92QIのKeil 5で空のプロジェクトを作成します。
まず、クリーンなプロジェクトを作成する必要があります。 もちろん、デモンストレーションプロジェクトをベースとして使用できますが、番号「2」のプロジェクトは開始されず、何らかの理由でプロジェクト「3」にコントローラー選択メニューに空白のシートがあります。 それはどういうわけか私を守った。 番号「1」のプロジェクトは原則的にはありません。
- 1. [プロジェクト]-> [新しいuVisionプロジェクト]に移動します...
- 2.プロジェクト用のフォルダーを作成し(パスにロシア語の文字が含まれないようにします)、名前(英語でも)を記入して保存します。
- 3.コントローラーを選択します。
- 4.表示されるウィンドウで、[OK]をクリックします。 正直なところ、このエディターを使用してプロジェクトを構成することはできなかったため、すべてが最初からコンパイルされます。 常に何かを変えなければなりませんでした。 ほとんどの場合、自分で行う方が簡単であることが判明しました。
- 5.プロジェクトツリーが左上隅に表示されます。 次に、必要なサブカテゴリを作成する必要があります。 これを行うには、一番上のフォルダーを右クリックして、「プロジェクト項目の管理...」を選択します
- 6.このメニューで、名前を変更するフォルダーを2回左クリックして、必要なものを書き込みます。 繰り返しますが、英語の方が良いです。 新しいフォルダを追加するには、「赤いX」の左側にあるアイコンを使用します。
少なくとも4つのフォルダーが必要です。
- 1.ユーザーデータ(ファイル)の下。
- 2. LCDドライバー用(含まれるもの)。
- 3.コードをFlashで動作させるため。
- 4. SMSISなどのSPLの下。
- 7.すべてのフォルダーの名前を変更したら、[OK]をクリックします。 ディレクトリは大まかな外観になっているはずです。
- 8.次に、これらすべてのファイルを取得する必要があります。 実際のデモプロジェクトからそれらを取り上げます。 ところで。 ちょうど今、プロジェクトがkeil 2で書かれていることに気付きました。 別の興味深い事実は、最新の変更の情報から判断すると、デモンストレーションプロジェクト「2」と「3」の間で3か月が経過したことです。 さらに、作業中のプロジェクトは私たちの時代に近づいています。 ファイルを取得します(このデモプロジェクトの入手先-前のレビュー記事で述べました)。 選択したファイルをコピーする必要があります。 さらに、main.c(他のファイルと同様)は、別のフォルダーで削除することをお勧めします。 これを行うために、Userフォルダーを作成し、そこにmain.cを配置します(変更し、それに基づいて作成します)。
- 9.次に、ライブラリファイルをプロジェクトに追加する必要があります。 追加は次のとおりです。 プロジェクトツリーで目的のフォルダーを右クリックし、「既存のファイルをグループ 'グループ名'に追加...」を選択します。
開いたウィンドウで、ファイルタイプ「すべてのファイル(*。*)」を選択します。 次に、1を選択するか、複数のファイルを選択します。
以下を追加する必要があります。
- 1.フォルダUser-> "User-> main.c"。 これは最も重要なファイルです。 少し変更することで、独自のコードを記述し始めます。
- 2.フォルダーFlash-> "flash-> MilFlash.c"。 Flashコントローラを操作するためのライブラリはここに保存されています。
- 3. LCDフォルダー-> "mlt-> mlt_lcd.c"。 ボードにインストールされているLCDを使用した作業のライブラリ。
- 4.フォルダーSMSIS_and_Drivers-> "Libraries \ 1986BE9x_StdPeriph_Driver \ src-> all .c files"。 これは、STL32アナログSPLが保存される場所です。 簡単に言えば、これらは「ラッパー」であり、コントローラーの構造に入ることなく、その周辺(出力、uartなど)を制御できます。
- 5. SMSIS_and_Driversフォルダー-> "Libraries \ CMSIS \ CM3 \ DeviceSupport \ 1986BE9x \ startup \ arm-> startup_1986be9x.s" これはスタートアップファイルです。 すべての「遷移ベクトル」はここに記述されています。 つまり、割り込み(たとえば、ボタンを押す)によって、コントローラーはこのテーブルに戻り、コードをさらに実行するためにどこに行くかを調べます。
- 6.フォルダーSMSIS_and_Drivers-> "Libraries \ CMSIS \ CM3 \ DeviceSupport \ 1986BE9x \ startup \ arm-> system_1986BE9x.c"。
結果はそのようなツリーになるはずです。
- 10.次に、main.c。ファイルを少しきれいにする必要があります これを行うには、ディレクトリツリーでマウスの左ボタンでクリックします。 main関数のシェルと#includeファイルを除くすべてを削除します。 そのように滞在する必要があります。
- 11.ご覧のとおり、#includeファイルの一番上に十字があります。 Keilはこのファイルを見ません。 これを修正するには、このファイルの入手先を彼に伝える必要があります。 これを行うには、Alt + F7を押します。 開いたウィンドウで、C / C ++タブに移動します。 少し気を散らす。 将来的には、keilがデフォルトでは理解できないトリックを頻繁に使用します。 これを修正するには、「C99モード」の碑文の横にあるチェックマークをクリックする必要があります。 これにより、C言語の初期の標準よりも高度な標準で記述できるようになります。 次に、「...」が入った長方形をクリックします。 「Include Paths」という署名のある行のすぐ隣。
- 12.開いたウィンドウで、十字の左側にある長方形のアイコンをクリックします。 これにより、空の文字列が作成されます。 作成された行の右隅で、「...」をクリックします。 その後、目的のファイルが存在する目的のフォルダーを指定します。 その後、「OK」をクリックします。 フォルダーが追加されます。 これらすべてのパスを追加する必要があります。 気づいたら、1つを除くすべてのリンクは相対的です。 つまり、ルートディレクトリから取得されます。 ただし、1は "C:\"に由来します。 これは、プロジェクトディレクトリ自体へのリンクです。 それも示されるべきです。
[OK]をクリックしてmain.cに進みます。
最も単純なプログラムをコンパイルします。
メイン関数に、カウンターが1増加する無限ループを挿入します。これで、ファイルは次のようになります。
各ファイルの最後は空行であることを忘れないでください。 Keilはこれを警告と見なし、しばしばあなたの神経を痛めます。 もちろんコンパイルされますが、警告自体は驚くべきものです。
これでセットアップは完了です。 F7キーを押すと、プロジェクトを再コンパイルできます。 すべてがうまくいけば、あなたはそれを見るでしょう。
これで、設定でJ-LINKを設定するだけになり、アップロードできます。 構成方法については、前の記事で詳しく説明しました。
ところで。 J-LINKは追加の電源を接続せずにチップを認識し、チップをデバッグすることもできます。 したがって、外部電源は実際には必要ありません。 コードの行をナビゲートすると、画面がどのようにちらつくかがわかります。
LEDを操作するためのコントローラーフットの調整
ドキュメントの目次を確認しても、周辺のタイミングについては何も表示されなかったため、すぐに調整を開始しました。 STM32でI / Oポートを構成するという点でSPLのすべての恐ろしさを思い出して、バンドルされたライブラリを使用するという考えはすぐに消えました。 そして、そのようにすぐに、レジスターをいじる時間がない、ライブラリの後ろに隠れることはよくありません。ところで、間違いは排除されません。
まず、設定する必要があるポートを理解します。 ファイル1986EvBrd_64_Rev2.pdfがあります。このファイルには、「Debug Board198692、198692QI(MDR32F9Q2I)\ Printed circuit board 1986EvBrd_LQFP64」に回路図があります。 その上で、2つのLEDがピンPC0とPC1に接続されていることがわかります。 素晴らしい。 変位に苦しむ必要はありません。
Milanderには、チップラインに関するすべての情報が1つのドキュメントに収められていることがとても気に入りました。 STM32はドキュメントで非常に混乱しています... I / Oポート図を見てください。 リモートで何かがSTM32のポート回路に似ています。 目を引くものは何も見えないので、レジスタをセットアップします。
Milanderが彼のポートにどのように名前を付けたのか正確にはわからなかったので、ポート構成ライブラリに登りました。 そこで私は以下を見ました。
まあ、もう少し高い。
ポートCのアドレスがデータシールドのアドレスと一致することを確認した後、main.cファイルに新しい関数を作成しました(上記のmain関数を使用してください!それ以外の場合は、.hファイルに関数のプロトタイプを記述する必要があります。これは今のところ不要な問題です)。
PORTC->(習慣ではない)の記述を開始し、ctrl +スペースを押したままにして、以下を確認します。

これはおなじみの絵です。 とても幸せでした。 その後、彼はどのレジスタを変更する必要があるかを見始めました。
ポート "0"にLEDが必要なので、次のように記述できます。PORTC-> RXTX | = 1;
これにより、ポートの0番目のビットが1に変換されます。したがって、ポート0のダイオードを点灯します。しかし、オンにする前に、構成する必要があります...
したがって、このアクションは最後に実行されます。
出口があるので、 PORTC-> OE | = 1;
デフォルトではゼロはどこにでもあるので、そのままにしておきます。
そして、ここではデジタルが必要です。PORTC-> ANALOG | = 1;
エレベーターは必要ないので、スキップしてください。
まあ、私たちもそれを必要としません...
そして、ここで速度を選択する必要があります。 デフォルトではそれだけです。 遅い前線を選択してください。 LEDについては、 PORTC-> PWR | = 1;
さて、最後のレジスタ。 一般的に私には以前のことは知らない。 これはまだ見られない。
さて、これで設定は完了です。 しかし、今このコードを縫うと、何も機能しません。 私は長い間、問題が何であるかを理解しようとしましたが、再びタイミングシステムについて注意深く読みました。 ポートセクションにクロッキングについての言葉はありません。 しかし、別の章があり、どのように、どのように行動するかが書かれています。 私はそこに行って、次を見ました。
ポートが必要です。 これは、周辺ユニットの説明に適合します。 このレジスタとここを探しています。
キールがこのレジスターを何と呼ぶかを理解することだけが残った。 私は図書館で実際に何も見つけられなかったので、私は選択を行いました。 その結果、RST_CLKと呼ばれることが判明しました。 それでは、目的のブロックに「1」を書き込むだけです。
RST_CLK-> PER_CLOCK | =(1 << 23);
偶然PER_CLOCKに来ました。 「RST_CLK」を書いたとき、ctrl +スペースを押し、リストが表示された後、「p」を押しました。 適切なオプションを選択した後。
結果はそのようなコードです。
コードがコンパイルされ、取得されます。
keil 5でのロシアのコメント
コードごとにコメントを配置する価値はありますが、ロシア語ではこれを行うことはできません。 不可解な文字が出てきます。ロシア語のコメントを書くためには、編集->設定に行く必要があります。

そして、図に示すように、エンコードを変更します。 次に「OK」をクリックします。

LED点滅
次に、サイクルを使用してLEDで点滅するコードを作成します。
縫って喜ぶ! 速度は、STM32でLEDを点滅させる経験から取得されます。 LEDは約1秒間に1回点滅します。
それだけです 何も欠けていないようです。 このプロジェクトをすぐにアーカイブすることをお勧めします。 次に、空白として使用します。
githubのプロジェクト 。
もう一度思い出します。 プロジェクト設定には、「C:\」に関するプロジェクトディレクトリへのリンクが1つあります。 したがって、プロジェクトは記事と同じパスでのみ機能します。 方法を簡単に変更して自由に使用できます。
修正してくれたsguwenkaに感謝します。