2017-02-10 5 views
1

私はAVRコードの一部を移植して、学習の練習として単純なSPI LCDをARMに移行しようとしてきました(私はARMにとってはまったく新しいことです)。このためには、マスターモードでSPIを使用するだけです。STM32F1 - ベアメタルでマスターSPIを使用する

自分のデバイス(STM32F103C8)でdatasheetを調べたところ、必要なSPI1ピンが見つかったので、SCKとMOSIは他のペリフェラル(pg.29)とともにPA5とPA7の代替機能としてマッピングされています。私の理解は、これらのピンでSPI機能を使用するためには、同じピンにマップされている他のものが無効になっていることを確認する必要があります。ただし、ペリフェラルクロックコントロールレジスタのデフォルト値を見ると、他の機能がすでに無効になっているように見えます。

reference manualのSPIセクション(を含む)を参照してください。25.3.3 - マスターモードでSPIを設定する最初に、APB2ENRでSPI1マスタークロックを有効にして、このセクションの手順に従ってSPI1を自分のニーズに合わせて構成しました。また、PA5/7の設定を「Alternate Function Outputプッシュプル」(9.1.4)に設定しました。最後に、CR1_SPEを設定してSPI1を有効にしました。

私の読んだところ、上記のようにSPIを設定した後にSPI1データレジスタに値をロードすると、データがシフトアウトされると考えていました。しかし、データを書き込んだ後、SPIステータスレジスタのTXEフラグは決して設定されません。これは、書き込んだデータがちょうどそこにあることを示しています。

この時点では、私が正しく構成できなかったことがあると仮定しています。たとえば、私はPA5/7ピンをどうするかについて100%確信していません。私はデータシートから何ができるのかを理解しようとしましたが、どこにも行きません。それが動作する前に完了する必要があるものはありますか?

+0

ピンの設定が間違っているとデータを送信しようとしているSPIが停止するとは思われません。それはどこにも行かないだろうが、周辺機器はまだそれをtxします。私は周辺機器が正しく設定されていないことをお勧めします。クロックをSPIに有効にしましたか?あなたはSPIを有効にしましたか? –

+0

あなたのコードを投稿してください。さもなければ私たちができることは推測です。 –

答えて

4

SSMSSIビットをSPIx->CR1レジスタに設定していないことはほぼ確実です。これらのチップでのSPIは、あなたがSPIx->CR1SSMSSISPEMSTR、正しい形式(LSBFIRSTCPOLCPHA)および適切なボーレート(BR)を設定する必要があり、あなたが行ってもいいですポーリング転送のために、非常に単純です。

+0

SSM/SSIの設定に触れなかったのは、マスターモードに影響しないと思ったからです。 – Triforcer

+0

@Triforcer - ハードウェアCSピンを使用しないとき、これらのビットはマスターモードに影響します。 STM32はマルチマスター・モードをサポートしているはずなので、CSがマスター・モードでローのときは何も転送しません。 SSMとSSIは「ソフトウェア・スレーブ・セレクト」として機能し、同じルールが適用されます。「0」の場合、転送は表示されません。 –

+0

SSI/SSMビットを設定すると、私の問題を解決しました。ありがとうございます。これまで私が使用していたマイクロコントローラには、マルチマスターのための規定がなかったので、私にとってはコンセプトは似ていませんでした。私はなぜあなたの答えが下落したのか分かりません。 – Triforcer

関連する問題