STM32F3 C编程:在实现ADC

时间:2018-05-09 08:12:24

标签: linux eclipse arm stm32 gnu-arm

简短版本:

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

长版:

我正在学习编程ARM控制器;我所拥有的是ST32F303发现板,我相信我尝试的方法称为裸机编程。我有为AVR微控制器编写普通C代码的经验,但这非常简单,几乎所有寄存器在整个系列中都是相同的。但是当涉及到ARM时,我完全惊讶地发现,即使正确编译代码,我们也必须正确处理事物(文件)的数量。顺便说一下,我有一个Linux系统,所以我将gnu arm toolchain与Eclipse放在一起。

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

  1. STM32Snippets
  2. NewbieHack - 这个用于
  3. Youtube series

    当然我也指的是控制器的参考手册。但问题是上述两种资源都不是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
          }
    
      }
    

0 个答案:

没有答案