Previous: 5.4.6.1. マイコンの種別の指定 |
Up: 5.4.6. ファームウェアの修正 |
Next: 5.4.6.3. ファームウェアライブラリ使用の宣言 |
ファームウェアライブラリの標準の設定は、マイコンボードに搭載されているクリスタル(水晶発振器)が8MHzであることを前提としています。STBeeやSTBee Mini、本書では紹介していませんがSTM32-Primer2などは12MHzのクリスタルを使用していますので、設定の変更が必要です。
makefile.inで12MHzのクリスタルを搭載したマイコンボードを選択した場合には、ユーザプログラムの実行時に、12MHz用のクロック設定を再実行するようになっています。具体的にはBoardInit関数(lib/Platform/boardinit.c)中で、Use_12MHz_Xtal関数を実行しています。Use_12MHz_Xtal関数は後述のSystemInit関数を12MHz用に修正したものです。
自分で変更をする場合には、2つのファイルの変更が必要です。
まず/lib/CMSIS/CM3/DeviceSupport/ST/STM32F10xフォルダ内にあるstm32f10x.hの95行目の、
#define HSE_Value??? ((uint32_t)8000000) |
を
#define HSE_Value??? ((uint32_t)12000000) |
と変更します。HSE_Valueはクロック設定の際に使用されるマクロです。
次に/lib/CMSIS/CM3/DeviceSupport/ST/STM32F10xフォルダ内にあるsystem_stm32f10x.cの981行目の、
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); |
を、
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); |
と変更してください。初期値は、8MHzのクリスタルの仕様を前提にしているので、これを「9倍」にして72MHzを作っているのですが、12MHzであることを前提に「6倍」にします。
72MHz以外の周波数で動作させる場合には、周波数に応じて以下の変更が必要です。
・24MHzの場合
system_stm32f10x.c? 575行目付近 |
|
変更前 |
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6); |
変更後 |
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL2); |
・36MHzの場合
system_stm32f10x.c? 676行目付近 |
|
変更前 |
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9); |
変更後 |
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL3); |
・48MHzの場合
system_stm32f10x.c? 776行目付近 |
|
変更前 |
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); |
変更後 |
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL4); |
・56MHzの場合
HSEクロックが12MHzの場合には、システムクロックを56MHzにすることはできません。
Previous: 5.4.6.1. マイコンの種別の指定 |
Up: 5.4.6. ファームウェアの修正 |
Next: 5.4.6.3. ファームウェアライブラリ使用の宣言 |