1

精简版:

需要 C 编程帮助以选择 STM32F3(探索板)中 ADC 的通道/秒。请在问题末尾找到我现在编写的代码。如果有人可以参考一些裸机编程的资源,那就太好了。

长版:

我正在学习编程 ARM 控制器;我拥有的是 ST32F303 Discovery 板,我相信我正在尝试的方法称为裸机编程。我有为 AVR 微控制器编写纯 C 代码的经验,但这很简单,几乎所有寄存器在整个系列中都是相同的。但是当谈到 ARM 时,我非常惊讶地看到我们必须正确地编译代码的东西(文件)的数量。顺便说一句,我有一个 Linux 系统,所以我将gnu arm 工具链与 Eclipse 放在一起。

经过一些研究和大量 Youtube 视频后,我最终确定了两种材料

  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