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のシリアル通信を割り込みで実装する »
「ロボット作ろう」カテゴリの記事
- Raspberry Pi3でturtlebotを動かしたいのだけど(2016.06.11)
- STM32F4のAD変換トラブル(その2)(2013.03.29)
- TrueSTUDIOからEclipseへ乗り換える(拾遺)(2012.07.14)
- TrueSTUDIOからEclipseへ乗り換える(その3)(2012.07.13)
- TrueSTUDIOからEclipseへ乗り換える(その2)(2012.07.07)
« STM32F4 DISCOVERYのシリアル通信(UART)をテストする(エコーバック編) | トップページ | STM32F4 DISCOVERYのシリアル通信を割り込みで実装する »
コメント