精简版:
需要 C 编程帮助以选择 STM32F3(探索板)中 ADC 的通道/秒。请在问题末尾找到我现在编写的代码。如果有人可以参考一些裸机编程的资源,那就太好了。
长版:
我正在学习编程 ARM 控制器;我拥有的是 ST32F303 Discovery 板,我相信我正在尝试的方法称为裸机编程。我有为 AVR 微控制器编写纯 C 代码的经验,但这很简单,几乎所有寄存器在整个系列中都是相同的。但是当谈到 ARM 时,我非常惊讶地看到我们必须正确地编译代码的东西(文件)的数量。顺便说一句,我有一个 Linux 系统,所以我将gnu arm 工具链与 Eclipse 放在一起。
经过一些研究和大量 Youtube 视频后,我最终确定了两种材料
- STM32片段
- 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
}
}