1

短縮版:

STM32F3 (Discovery ボード) で ADC のチャネルを選択するには、C プログラミングのヘルプが必要です。質問の最後に今書いたコードを見つけてください。ベア メタル プログラミングに関するリソースを参照できる人がいれば幸いです。

長いバージョン:

ARM コントローラーのプログラミングを学んでいます。私が持っているのは ST32F303 Discovery ボードで、私が試みている方法はベア メタル プログラミングと呼ばれるものだと思います。私は AVR マイクロコントローラー用の単純な C コードを書いた経験がありますが、それは非常に簡単で、ほとんどすべてのレジスターはシリーズ全体で同じでした。しかし、ARM に関して言えば、コードを適切にコンパイルするためにさえ、正しく取得しなければならないもの (ファイル) の数を見て、私は完全に驚きました。ところで、私は Linux システムを使用しているので、gnu arm ツールチェーンを Eclipse にまとめました。

いくつかの調査と数多くの Youtube ビデオの後、2 つの資料を完成させました。

  1. STM32スニペット
  2. NewbieHack - このチャップスYoutube シリーズは、

もちろん手持ちのコントローラーのリファレンスマニュアルも参考にしています。しかし問題は、上記の両方のリソースが stm32F3 用の単純なものではないことです。しかし、私は F3 用の書き込みに同じワークフローを使用しています。現在、変換用のチャネルを選択する方法がわからず、アドバイスやガイダンスが役立つため、ADC にこだわっています。

ここに私がこれまでに書いたコードがあります

  /*
   * ADC in ARM
   *
   * Author : Easwaran
   *
   */
  #include "stm32f30x_conf.h"

  int main (void)
  {
      //ADC calibration
      ADC1->CR &= ~ADC_CR_ADEN; //Disables ADC; 0 in ADCEN to disable ADC.

  //    ADC1->CR
      ADC1->CR |= ADC_CR_ADCAL; //put a 1 in calibration register |  CR is the control register for ADC1
      while ((ADC1->CR & ADC_CR_ADCAL) != 0)
        {
          //waiting till the calibration is over; ie the bit turns 0
        }

      //select a clock source
      RCC->AHBENR |= RCC_AHBENR_ADC12EN; // enables both ADC1 & 2
      RCC->CR |= RCC_CR_HSEON;
      while((RCC->CR & RCC_CR_HSERDY) != 1)
        {
          //to make sure the clock has started
        }
      ADC1->CR = ADC12_CCR_CKMODE; // this is weird

      // enable ADC

      ADC1-> CR = ADC_CR_ADEN;
      while((ADC1->ISR & ADC_ISR_ADRD) == 0)
        {
          //waiting to get ready
        }

      //sampling time

      ADC1->SMPR1 |= ADC_SMPR1_SMP0_0 | ADC_SMPR1_SMP0_1 | ADC_SMPR1_SMP0_2;

      //set the channel - here internal temp register

      while(1)
      {
          //start conversion
      }

  }
4

0 に答える 0