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
}