03 BoardInit()

ファイルはこの場所にあるboardinit.cです.

リセットとclockを設定していると思えばOKでしょう.

↓ソースコードはこれだけ.

void BoardInit(void) {

/* System Clocks Configuration */

SystemInit(); リセットとclockの初期設定.system_stm32f10x.cの中に記述があります.

↓外付けclockが12MHzであるケースに対応していますが、STM32-DISCOVERYは8MHzですので無視してOK.

// Clock re-configuration for boards with 12MHz xtal

#ifdef XTAL_12MHZ

Use_12MHz_Xtal();

#endif

↓ベクターテーブルの初期設定(後述)

// Set vector table location

NVIC_SetVectorTable(NVIC_VectTab_FLASH, VECTOR_OFFSET);

↓JTAG・SWDに割り当てたポートをリリースし、GPIOとして再設定します.

// Remap JTAG for boards with DFU feature

Remap_JTAG();

}

NVIC_SetVectorTable()はmisc.cの中にあります.

コードの実体はレジスタ設定のたった一行です.

//Sets the vector table location and Offset.

//NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory.

// This parameter can be one of the following values:

// NVIC_VectTab_RAM

// NVIC_VectTab_FLASH

//Offset: Vector Table base offset field. This value must be a multiple of 0x200.

void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)

{

SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);

}

Remap_JTAG()はboardinit.cの中にあります.

JTAG・SWDに割り当てたポートをリリースし、GPIOとして再設定します.

別のところで「JTAG_ほにゃらら」を設定してからこのルーチンを呼べと言ってます.

//free JTAG/SWD port and make them available as GPIO

void Remap_JTAG(void)

{

#ifdef JTAG_SWD_Enabled

// keep reset state. do nothing

// PA13/PA14/PA15/PB3/PB4 are used as JTAG/SWD port

#endif

#if defined (JTAG_SWD_Enabled_without_NJTRST) ||\

defined (JTAG_Disabled_SWD_Enabled) || \

defined (JTAG_SWD_Disabled)

//Supply APB2 Remep Clock

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);

#endif

#ifdef JTAG_SWD_Enabled_without_NJTRST

/* Remap PB4 to GPIO */

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);

#endif

#ifdef JTAG_Disabled_SWD_Enabled

/* Remap PA15/PB3/PB4 to GPIO */

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

#endif

#ifdef JTAG_SWD_Disabled

/* Remap PA13/PA14/PA15/PB3/PB4 to GPIO */

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

#endif

}