2024年6月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

カテゴリー

ブログパーツ

無料ブログはココログ

« STM32F4 DISCOVERYのシリアル通信(UART)をテストする(エコーバック編) | トップページ | STM32F4 DISCOVERYのシリアル通信を割り込みで実装する »

2011年12月11日 (日)

STM32F4 DISCOVERYのSysTick割り込みをテストする

ロボット作ろう:シェーキー製作記

一番基本的な割り込みをテストしましょう。SysTickタイマを使った周期割り込みです。

割り込みハンドラはstm32f4xx_it.cに記述します。すでにDISCOVERYで使いそうなものは記述済みです。
SysTick_Handler(void)というのが、SysTick割り込みのハンドラになります。
ここに青いLEDをトグルするプログラムを書きます。

//割り込みハンドラ stm32f4xx_it.cに記述
void SysTick_Handler(void)
{
//青いLEDをトグルする
if(GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_15)==Bit_SET){
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
}
else{
GPIO_SetBits(GPIOD,GPIO_Pin_15);
}
}

実行するたびに点灯→消灯→点灯・・ と切り替わるプログラムですね。この割り込みを周期的に発生させればいいわけですね。

割り込みを設定はmain.cに書きます。こんな感じです。

int main(void)
{
//PORTDの初期設定(LEDを使用するため)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 |GPIO_Pin_13 | GPIO_Pin_14 |GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);

//PORTDの初期値設定(LEDをすべて消灯)
GPIO_ResetBits(GPIOD,GPIO_Pin_12 |GPIO_Pin_13 | GPIO_Pin_14 |GPIO_Pin_15);

//SysTickによる割り込みの初期設定はたったコレだけ
//10800000で約200ms周期、5370で約100us周期
if (SysTick_Config(10800000)) //systickによる割り込み周期を設定
{
//初期設定に失敗したら赤色LEDを点灯!
GPIO_SetBits(GPIOD,GPIO_Pin_14);
}

//ダミーの無限ループ
while (1){

}
}

ほとんどLEDの初期設定で、SysTickの割り込み設定はSysTick_Config(10800000)だけです。これはif文とセットで使用するようで、このようにしないとエラーになります。もちろんifの中身は何でもよく、何も書かなくともOKです。

これを実行すると200ms周期で青色LEDが点滅します。これは割り込みで実行されているので、無限ループ内に別のプログラムを入れて、見かけ上二つのプログラムが同時に走っているようにできます。

ついでにクロックの設定がどうなっているかも調べました。下記のコードを初期化部分に入れ、プログラムを一時停止して構造体RCC_ClockFreqの中身をデバッガで確認しました。

RCC_ClocksTypeDef RCC_ClockFreq;
RCC_GetClocksFreq(&RCC_ClockFreq);

やってみると構造体の中身はこうなっています。

SYSCLK_Frequency 168000000
HCLK_Frequency  168000000
PCLK1_Frequency 42000000
PCLK2_Frequency 84000000


startupあたりで最高速度に設定されているようです。あやふやですが。


« STM32F4 DISCOVERYのシリアル通信(UART)をテストする(エコーバック編) | トップページ | STM32F4 DISCOVERYのシリアル通信を割り込みで実装する »

ロボット作ろう」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: STM32F4 DISCOVERYのSysTick割り込みをテストする:

« STM32F4 DISCOVERYのシリアル通信(UART)をテストする(エコーバック編) | トップページ | STM32F4 DISCOVERYのシリアル通信を割り込みで実装する »