私は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%確信していません。私はデータシートから何ができるのかを理解しようとしましたが、どこにも行きません。それが動作する前に完了する必要があるものはありますか?
ピンの設定が間違っているとデータを送信しようとしているSPIが停止するとは思われません。それはどこにも行かないだろうが、周辺機器はまだそれをtxします。私は周辺機器が正しく設定されていないことをお勧めします。クロックをSPIに有効にしましたか?あなたはSPIを有効にしましたか? –
あなたのコードを投稿してください。さもなければ私たちができることは推測です。 –