2016年09月27日

IARのメールニュースで紹介されたSTM32F0の使い方をやってみる(10)

IARのメールニュースから始まってこれまでSTM32F042について調べてきました。

今日は実際にセンサーをつないでADCで読み込んでみます。

使用するセンサーは温度センサーIC MCP9700−E/TOです。これも秋月電子で手に入ります。⇒ 温度センサーIC MCP9700−E/TO

3本足のパッケージでポイントをいかにまとめました。
STM32F042_B010.png

VDDにマイコンへ与えている電源3Vを与えます。GNDは当然グランドに接続ください。
VoutをADCの入力に接続します。

実際にサンプルをすこし改造して作りました。
    /* Get ADC1 converted data */
    ADC1ConvertedValue =ADC_GetConversionValue(ADC1);
   
    /* Compute the voltage */
    ADC1ConvertedVoltage = (ADC1ConvertedValue *3000)/0xFFF;
   
    TemptureDegree =(ADC1ConvertedVoltage-500)/10;

これを実行して、LiveWatchというEWARMの機能で確認してみます。
LiveWatchはプログラムの実行を停止せずに、メモリの値を読みだしてくれる優れものです。


TemptureDegreeの部分で22と出ていますね。ただいま22度です!







タグ:STM32F042
posted by EWARMJP at 17:00| Comment(0) | TrackBack(0) | STマイクロ | このブログの読者になる | 更新情報をチェックする

2016年09月26日

IARのメールニュースで紹介されたSTM32F0の使い方をやってみる(9)

ADCの調査をしていますが、前回はマニュアルを確認しました。


今日はサンプルを確認します。 
なんで?という方もいるかもしれませんが、マニュアルには書ききれていないことが多いです。
また、サンプルコードだけでは見ない情報がマニュアルから読み取れることもあります。

そのためサンプルがある場合には、実際のコードを確認する方がトラブルも少なくなりますし、そもそも理解が進みます。
ADCの初期化を見てみます。
static void ADC_Config(void)
{
  ADC_InitTypeDef     ADC_InitStructure;
  GPIO_InitTypeDef    GPIO_InitStructure;
 
  /* GPIOC Periph clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
 
  /* ADC1 Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
 
  /* Configure ADC Channel11 as analog input */
#ifdef USE_STM320518_EVAL
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;
#else
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
#endif /* USE_STM320518_EVAL */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
  /* ADCs DeInit */ 
  ADC_DeInit(ADC1);
 
  /* Initialize ADC structure */
  ADC_StructInit(&ADC_InitStructure);
 
  /* Configure the ADC1 in continuous mode with a resolution equal to 12 bits  */
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
  ADC_Init(ADC1, &ADC_InitStructure);
 
  /* Convert the ADC1 Channel 11 with 239.5 Cycles as sampling time */
#ifdef USE_STM320518_EVAL
  ADC_ChannelConfig(ADC1, ADC_Channel_11 , ADC_SampleTime_239_5Cycles);
#else
  ADC_ChannelConfig(ADC1, ADC_Channel_10 , ADC_SampleTime_239_5Cycles);
#endif /* USE_STM320518_EVAL */

  /* ADC Calibration */
  ADC_GetCalibrationFactor(ADC1);
 
  /* Enable the ADC peripheral */
  ADC_Cmd(ADC1, ENABLE);    
 
  /* Wait the ADRDY flag */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
 
  /* ADC1 regular Software Start Conv */
  ADC_StartOfConversion(ADC1);
 
}

STのサンプルコードは読みやすいので概要だけ補足しておきます。
1)周辺クロックの設定
2)ADCの入力に使うピンをADC用に変更する(デフォルトはデジタルI/Oになっていることが多い)
3)ADCの設定をクリア
4)ADCの設定を実施
5) ADCの較正を実施
6) ADCを有効に
7) ADCがレディになるのを待つ。
8) ADCを開始

です。で、このコードも再利用すれば簡単に使えます。

じゃあ、値の読み取りはどうすればよいかと言うと、ADC データレジスタ(ADC_DR)を読めばよいだけです。
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));

  /* Return the selected ADC conversion value */
  return (uint16_t) ADCx->DR;
}


これで明日実際にセンサーをつなげて動作させてみます。






posted by EWARMJP at 16:00| Comment(0) | TrackBack(0) | STマイクロ | このブログの読者になる | 更新情報をチェックする

2016年09月22日

IARのメールニュースで紹介されたSTM32F0の使い方をやってみる(8)

今日はADC変換の実際の手順を調べます。

1)シングル変換
シングル変換モードでは、ADC は単一シーケンスの変換を実行して、すべてのチャネルを一度変換 します。このモードは ADC_CFGR1 レジスタの CONT=0 のときに選択されます。
変換の開始は以下のいずれか
・ADC_CRレジスタのADSTARTビットのセット
・ハードウェアトリガイベント

シーケンス内で、各変換の完了後
・変換されたデータは16ビットのADC_DRレジスタに格納されます。
・EOC(End of Conversion)フラグがセット
・EOCIEがセットされていると割込みが発生

変換シーケンスの完了後
・EOSEQ(End of Sequence)フラグがセット
・EOSEQIEがセットされている場合割り込み発生

  *単一チャネルを変換するには、長さが 1 のシーケンスをプログラムします。

2)連続変換
連続変換モードでは、ソフトウェアまたはハードウェアトリガイベントが発生すると、ADC は一連 の変換を実行して、すべてのチャネルを一度変換した後、自動的に再起動して、同じ変換シーケンスを連続的に実行します。このモードは ADC_CFGR1 レジスタの CONT=1の時選択。
変換の開始は以下のいずれか
・ADC_CRレジスタのADSTARTビットのセット
・ハードウェアトリガイベント

シーケンス内で、各変換の完了後
・変換されたデータは16ビットのADC_DRレジスタに格納されます。
・EOC(End of Conversion)フラグがセット
・EOCIEがセットされていると割込みが発生

変換シーケンスの完了後
・EOSEQ(End of Sequence)フラグがセット
・EOSEQIEがセットされている場合割り込み発生


だいたい理解できたところで、EWARMのサンプルプロジェクトを探してみましょう。
EWARMを起動して、ヘルプ-インフォメーションセンタを選びましょう。
STM32F042_B003.png
STM32F042_B004.png

そこで、以下のようにSTがすでにインストールされていれば次に行きましょう。もし、インストールされていない場合には、インストールしてください(下部にSTをインストールするボタンがあります)。
STM32F042_B005.png

STのボタンをクリックすると、詳細を選びましょう。
STM32F042_B006.png
STM32F042_B007.png

STM32F0xx stdperiph libの下にADC用のプロジェクトがあります。
STM32F042_B008.png

これを開いた状態がこちらです。
STM32F042_B009.png

複数のプロジェクトがあるので、BasicExampleを選択し右クリックし、アクティブに設定を選びます。
これで、コンパイルなどは出来ますし、ADCの初期化などもコードがあるので明日以降見てみましょう。


タグ:STM32F042
posted by EWARMJP at 16:00| Comment(0) | TrackBack(0) | STマイクロ | このブログの読者になる | 更新情報をチェックする

2016年09月21日

IARのメールニュースで紹介されたSTM32F0の使い方をやってみる(7)

STM32F042のADCを調べます。

ブロック図をもう一度出しておきましょう。
STM32F042_B001.png

1)較正
このSTM32F042でADCを使う時には、ADCを較正をする必要があります。マニュアルによると
ADC は較正機能を備えています。この手順時、ADC は、次の ADC の電源オフまで ADC に内部で適 用される較正係数を計算します。アプリケーションは、較正中は ADC を使用してはならず、較正が 完了するまで待つ必要があります。
較正は、A/D 変換を開始する前に行ってください。較正は、プロセスのばらつきによりチップごとに 異なることがあるオフセットエラーを削除します。

その手順もありますのでここで見ておきましょう。
較正ソフトウェア手順
1.ADEN=0 であることを確認します。
2. ADCAL=1 にセットします。
3. ADCAL=0 になるまで待ちます。
4. 較正係数を ADC_DR のビット 6:0 から読み出すことができます。


ADENは、ADCを有効化するビットです。ADC 制御レジスタ(ADC_CR)に含まれます。
ADCALは、ADC較正するビットです。これもADC 制御レジスタ(ADC_CR)に含まれます。
ADC_CRのビット割り当てなどはこちら。
STM32F042_B002.png


2)ADCオン・オフ制御
MCUの電源ON時はADCは無効でパワーダウンモードです。この時の状態はADEN=0になっている。
ADCを有効にするには、
1. ADENを1に設定
2. ADCの動作準備が出来るとADRDYフラグがセットされる。

3)ADCクロック
2系統のクロックを使用可能です。

4)チャネル選択
最大19チャネルが使用可能とマニュアルにはあります。今回使っているマイコンではピンがそんなに出ていないと思われるので全部使えない気がします。
GPIOから16入力と内部の温度センサー、基準電圧、Vbatの3つが合わせて19入力チャネルあります。

5)変換モード
  シングル変換、連続変換が可能。


明日に変換の仕方をチェックしてみます。






続きを読む
posted by EWARMJP at 17:00| Comment(0) | TrackBack(0) | STマイクロ | このブログの読者になる | 更新情報をチェックする

2016年09月20日

IARのメールニュースで紹介されたSTM32F0の使い方をやってみる(6)

これまでIARのメールニュースの内容をもとに、STM32F042で実際にやってみました。
   IARの資料はこちらからアクセス可能 → 資料

ここまで、実際にSTM32F0用のマイコンを開発する環境を準備することが出来ましたので、もうすこしやってみたいと思います。

ADCを使ってみたいと思います。
ADCはアナログ/デジタル変換回路のことで、英語ではAnalog to Digital Converterです。
センサーや電圧などを扱う場合には、よくADCを利用してマイコンに取り込みます。
STM32F042_B000.png

STM32F042にはどんなADCが搭載されているのか調べてみましょう。
・12ビット、10ビット、8ビット、6ビットに分解能を設定可能
・自己較正
・16の外部アナログ入力
・ソフト起動、ハード起動
・ADC電源 2.4 ~ 3.6V

ADCのブロックダイアグラムを見るとイメージが解りやすいかもしれません。

STM32F042_B001.png

これを使うためには、まずはマニュアルを眺める必要があります。
タグ:STM32F042
posted by EWARMJP at 17:00| Comment(0) | TrackBack(0) | STマイクロ | このブログの読者になる | 更新情報をチェックする

2016年09月17日

IARのメールニュースで紹介されたSTM32F0の使い方をやってみる(5)

昨日準備したブレッドボード環境を使って、プログラムを作ってみたいと思います。

IARさんの資料にもとづいて作業をしていきます。
  資料自体はこちらからアクセスできます。  → 資料

EWARM 7.70.2で実行してみたいと思います。プロジェクトを新規に作ります。
ST000018.png
C-mainでOkします。
ST000019.png

適当なプロジェクト名にすると、次の画面になります。
ST000020.png

まずはプログラムを資料のとおりに書き換えます。
ST000021.png

あとはプロジェクトオプションを設定していきます。
ST000022.png
ST000023.png
ST000024.png

ここまで設定したら、メイクして、ダウンロードしてデバッグです。
見事一発で動作しました。

はじめてのマイコンを使う場合にはこうした資料があるととてもやり易いですね。


posted by EWARMJP at 14:00| Comment(0) | TrackBack(0) | STマイクロ | このブログの読者になる | 更新情報をチェックする