これらの手順は、Olimex STM32 P103開発キットをエミュレートするためのものです。
ダウンロードして
まずダウンロードを構築し、STM32にADCの周辺機器をエミュレートするためのパッチが含まれ、Qemu STM32を構築:
wget https://github.com/beckus/qemu_stm32/archive/stm32.tar.gz
tar xf stm32.tar.gz
cd qemu_stm32-stm32
./configure --target-list="arm-softmmu"
make
cd ..
のconfigureステップが失敗した場合は、不足している要件をインストールします。詳細については、READMEを参照してください。その後
Olimex STM32 P103 Development Kit Demosダウンロード:ADCを使用するサンプルプログラムのstm32_p103_demos-master/demos/adc_single/main.c
で
wget https://github.com/beckus/stm32_p103_demos/archive/master.tar.gz
tar xf master.tar.gz
ルック。 adc_singleデモをビルドして実行するには
実行デモアプリケーション
:
cd stm32_p103_demos-master
QEMU_ARM_DIR=../qemu_stm32-stm32/arm-softmmu/ make adc_single_QEMURUN_TEL
(from another terminal) telnet localhost 7777
UART2は、あなたからの出力を見るべき、ポート7777でtelnetサーバに接続されています。デモアプリケーションのビルド方法と実行方法の詳細については、READMEを参照してください。
から読み出されます利用可能です。私はint mode = 1;
の値を変更してプログラムを再コンパイルすることによってモードを切り替えました。
ADCエミュレーション
QEMUは、各ADCチャネルをエミュレートするために使用する方法は、hw/arm/stm32_adc.cにstm32_adc_start_conv
関数で見ることができる:あなたが見ることができるように
static void stm32_adc_start_conv(Stm32Adc *s)
{
uint64_t curr_time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
int channel_number=stm32_ADC_get_channel_number(s,1);
// Write result of conversion
if(channel_number==16){
s->Vdda=rand()%(1200+1) + 2400; //Vdda belongs to the interval [2400 3600] mv
s->Vref=rand()%(s->Vdda-2400+1) + 2400; //Vref belongs to the interval [2400 Vdda] mv
s->ADC_DR= s->Vdda - s->Vref;
}
else if(channel_number==17){
s->ADC_DR= (s->Vref=rand()%(s->Vdda-2400+1) + 2400); //Vref [2400 Vdda] mv
}
else{
s->ADC_DR=((int)(1024.*(sin(2*M_PI*qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)/1e9)+1.))&0xfff);
}
s->ADC_SR&=~ADC_SR_EOC; // jmf : indicates ongoing conversion
// calls conv_complete when expires
timer_mod(s->conv_timer, curr_time + stm32_ADC_get_nbr_cycle_per_sample(s,channel_number));
}
は、ADCチャンネル16は、ランダムVddの入力をエミュレートしますADCチャネル17はランダムな温度入力をエミュレートし、他のすべてのチャネルは0〜2048の正弦波に従います。あなたはADCチャネルが異なるエミュレーション・パターンを使用したい場合は、あなたがstm32_adc_start_conv
を変更し、上記の手順を以下のQEMUを再構築することができます
:ここでは、すべての3つのモードから返されたADC値のグラフです。
出典
2017-06-07 23:36:18
Tim
あなたはどのようなターゲットをエミュレートしていますか? STM32用のこのQEMUブランチには、サインパターンのADCエミュレーションが含まれています。https://beckus.github.io/qemu_stm32/ – Tim
@Tim:はい、STM32!どうもありがとうございました!エミュレーションを追加するコンパイル可能で実行可能なQEMU STM32プロジェクトをどのように持っているかについての短い解説(プロジェクトファイルのディレクトリに十分なソースファイルを追加するだけです)を書いてください。 – DuckQueen