0

STM32 マイクロコントローラーを使用しています (LoRa ノード MB1296D の一部として)。圧力センサー (MS5803) を LoRa ノードに接続し、SPI バス経由でセンサーをプログラムしたいと考えています。基本的に、これは私にとって非常に新しいものです。そのため、サンプルコードを調べました

私はこのコードを理解しようとしていますが、いくつかの質問が出てきました:

  • 最初に定義されたマクロ、その目的は何ですか、使用されているマイクロコントローラーに固有の 16 進数は何ですか? - コードをゼロから作成する場合は、SPI_SCK、SPI_MISO、および SPI_MOSI に対応する GPIO ピンのマクロを定義することから始めることにしました。
  • 関数unsigned long cmd_adc(char cmd)には switch コマンドが含まれていますが、それが何をするのかまったくわかりません。つまり、ADC の分解能を設定しようとしているように見えますが、対応する遅延を知るにはどうすればよいのでしょうか。また、スイッチ コマンドに 0x0f が含まれているのはなぜですか。

そう。有益な回答をいただける時間を見つけていただければ幸いです。また、このトピックに特に焦点を当てた良い読み物を知っている場合は、教えてください! 限られた時間の中でこの問題に取り組んでいます。

4

1 に答える 1

1

あなたの質問は基本的な C プログラミングの質問であり、この圧力センサーや例に固有のものではありません。

マクロは、値がビット フィールドを表すことを明確にするために、16 進数で定義されます。16 進数を 2 進数に変換するのは非常に簡単です (組み込みソフトウェア開発者にとっては当然のことです)。センサーのデータシートでレジスタの説明を読んでください。16 進値で設定されたビットは、センサーのレジスタ記述の意味のあるビットに対応します。

switch (cmd & 0x0f)cmdwithのビットごとの AND を実行し0x0fます。16 進値0x0fには、最下位 4 ビットが設定されています。そのため、コードは値の最上位 4 ビットを無視 (つまり、マスク オフまたはゼロ アウト) しcmd、値の最下位 4 ビットのみを考慮しcmdます。

于 2018-05-03T16:58:33.163 に答える