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