UP

例:LCDを使う

Standard Peripherals Libraryを使ってプログラムを書く例として LCDに適当な文字列を表示するというごく簡単なプログラムを書く 手順を示す。

表示例

テンプレート

テンプレートとしてプロジェクトProject_templateからスタートする と書いたがこのプロジェクトはMCU依存の部分しか含まないので discoveryのボードの機能を使う上での関数や定数などは含まれていない。 そこでここではstm8l discoveryに元々書き込まれているプログラムのプロジェクト Discoverをテンプレートとして使用することにする。

いらないファイル

ライブラリの stm8l15x_adc.h/c、stm8l15x_exti.h/c、stm8l15x_flash.h/c、stm8l15x_pwr.h/c、 Userファイルのicc_measure.h/c、discover_functions.h/c、stm8l15x_it.h/cは 使わないのでプロジェクトから外す。

編集するファイル・ファイルの依存性

編集するファイルはmain.cとstm8l15x_conf.hとstm8l_discovery_lcd.cの3つ。 main.c以外については後述。

main.c

エラー処理部分だけ残し本体部分はバッサリ書き直す。本体部分:
void main(void)
{
  LCD_GLASS_Init();

  /* Infinite loop */
  while (1)
  {
    LCD_GLASS_DisplayString("HELLO");
    delay_ms(100);
    LCD_GLASS_DisplayString("WORLD");
    delay_ms(100);
  }
}
使ってる関数は LCD_GLASS_Init()でLCDの初期化、LCD_GLASS_DisplayString(文字列) で文字列の表示、delay_ms(待ち時間)で適当な待ち時間、と3つだけ である(delay_ms()は16MHz動作時にミリ秒単位の待ちになるが今回の ようにシステムクロックをいじらないとリセット後のクロックは8分周されている (2MHz)ので8倍になる)。
includeファイルはまずstm8l15x.hが必要。他はLCD_GLASS_xxxxxxを使うために discoveryのボード固有の変数・関数の型が定義されているstm8l_discovery_lcd.h、 delay()を使うためにdelay.h、というわけで
#include "stm8l15x.h"
#include "stm8l_discovery_lcd.h"
#include "delay.h"
としている。

その他のファイルの依存性

delay.c
 - stm8l15x_clk.h

stm8l_discovery_lcd.c
 - stm8l_discovery_lcd.h
 - discover_board.h
 - delay.h

stm8l15x_conf.h

stm8l_discovery_lcd.cではlcd、clk、gpioのライブラリ関数を 使っているがstm8l15x_lcd.h、stm8l15x_clk.h、stm8l15x_gpio.hは 直接にはincludeしていない。 これはstm8l_discovery_lcd.hでstm8l15x.hがincludeされていて stm8l15x.hで(defaultでは)stm8l15x_conf.hがincludeされ、 stm8l15x_conf.hは
/* Uncomment the line below to enable peripheral header file inclusion */
/* #include "stm8l15x_adc.h" */
/* #include "stm8l15x_beep.h" */
#include "stm8l15x_clk.h"
/* #include "stm8l15x_comp.h" */
/* #include "stm8l15x_dac.h" */
/* #include "stm8l15x_dma.h" */
/* #include "stm8l15x_exti.h" */
/* #include "stm8l15x_flash.h" */
#include "stm8l15x_gpio.h"
/* #include "stm8l15x_i2c.h" */
/* #include "stm8l15x_irtim.h" */
/* #include "stm8l15x_itc.h" */
/* #include "stm8l15x_iwdg.h" */
#include "stm8l15x_lcd.h"
/* #include "stm8l15x_pwr.h" */
/* #include "stm8l15x_rst.h" */
のように編集しそれらのファイルがincludeされるようになっている からである。
このように一般にライブラリを使う場合はstm8l15x_conf.hの中の対応する ヘッダファイルのコメントを外しておき、あとはstm8l15x.hをinclude するだけでよい。

stm8l_discovery_lcd.c

元々stm8l_discovery_lcd.cでは
#include icc_measure.h
としていたがicc_measureは使わないのでこの行を削除、ただしdelay_ms() は使うのでそれが宣言されいているdelay.hをインクルードしておく。
#include delay.h

プロジェクト構成

そんなでプロジェクト構成は以下のようになる:
プロジェクト構成

intrist7.hはRaisonanceのコンパイラ特有のファイルで stm8l15x.hで
#ifdef _RAISONANCE_
 #include <intrist7.h>
...
となっている。明示的にプロジェクトに入れればExternal Dependencies のところには現れない、たぶん。
プロジェクト一式(zipファイル)mlcd.zip


2012.02
mm@ils.uec.ac.jp