短縮版:
STM32F3 (Discovery ボード) で ADC のチャネルを選択するには、C プログラミングのヘルプが必要です。質問の最後に今書いたコードを見つけてください。ベア メタル プログラミングに関するリソースを参照できる人がいれば幸いです。
長いバージョン:
ARM コントローラーのプログラミングを学んでいます。私が持っているのは ST32F303 Discovery ボードで、私が試みている方法はベア メタル プログラミングと呼ばれるものだと思います。私は AVR マイクロコントローラー用の単純な C コードを書いた経験がありますが、それは非常に簡単で、ほとんどすべてのレジスターはシリーズ全体で同じでした。しかし、ARM に関して言えば、コードを適切にコンパイルするためにさえ、正しく取得しなければならないもの (ファイル) の数を見て、私は完全に驚きました。ところで、私は Linux システムを使用しているので、gnu arm ツールチェーンを Eclipse にまとめました。
いくつかの調査と数多くの Youtube ビデオの後、2 つの資料を完成させました。
- 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
}
}