サンプルコードsystick_ob_led_toggle_by_interrupt_only がうまく動かない。(周期が違う)
クロックの設定がおかしいのは明白なので、色々と設定を変更する。
http://miqn.net/introduction/100.html
以下でSystemCoreClockUpdate()をかけると安定すると言ってて、試したらちゃんと動いた。
http://electassy.blogspot.jp/2014/04/mbed-nucleoled.html
BoarInit()の後ろくらいに置いとくと良さそう。SysTick_Config(SystemCoreClock/8)の後ろに置くとうまく動かなかった。
BoardInit()の中のUse_12MHz_Xtal()によるクロックの変更が反映されていないのだろうか。
int main(void) { BoardInit(); SystemCoreClockUpdate();//これが必要 GPIO_Configuration(); /* Setup SysTick Timer for 1000 msec interrupts */ //SystemCoreClock is defined insystem_stm32f10x.c //by default SystemCoreClock is 72,000,000 and is to be divided by 8(SysTick_CLKSourceConfig). //System clock frequency is 9MHz. By counting, 9,000,000(SystemCoreClock/8), 1000 ms passes. //上でUpdateをかけてSystemCoreClock変数を初期化しとく if (SysTick_Config(SystemCoreClock/8)) { /* Capture error */ while (1); } //Set system clock be divided by 8 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); while (1); }
(追記)boardinit.cライブラリのBoardInit()関数の最後にSystemCoreClockUpdate()を追加しておいた。
boardinit.c
void BoardInit(void) { /* System Clocks Configuration **********************************************/ SystemInit(); // Clock re-configuration for boards with 12MHz xtal #ifdef XTAL_12MHZ Use_12MHz_Xtal(); //Added SystemCoreClockUpdate(); #endif // Set vector table location NVIC_SetVectorTable(NVIC_VectTab_FLASH, VECTOR_OFFSET); // Remap JTAG for boards with DFU feature Remap_JTAG(); }