STM32F107シリアルIAPジャンプ機能の実装ノート

USARTインターフェイスにエンジニアリングからモードスイッチをインターフェース、IOポート、クロック、とてもうまく、データキャッシュを中断し、常にではないUSARTはデータを受信し、そのようなボーレート、問題はないなどの設定を確認することができます。

タイマーがテストされ、間違ったので、チップのクロック周波数で機能することがわかっ開始します。主な周波数は、単純ではない72M。72Mというよりも数倍遅いです。

USART3_Configurationは()クロックが問題であるが、RCC_Configuration()と私はそれが間違って行くだろうかと、ファームウェアのライブラリ関数に従っていると推定され、問題になることはないでしょうか?I stm32f10x_rcc.hソースからの私の検索を開始し、デフォルトの初期化クロック機能SystemInitを見つける()の問題がありますが、もちろん、部門は問題を設定していない、問題は107分の105は、インターネット製品に属し、クロックを選択することにある、使用プリプロセッサシンボル私のボードが8MHzの結晶であるとSTM32F10X_CL、場所のファームウェアの多くはSystemInit()デフォルトでは、外部クロックHSEを選択し、このSTM32F10X_CLの条件付きコンパイルを、行われますされ、HSEのデフォルト設定はstm32f10x.hマクロで定義されたHSE_VALUEは、25MHzのですもちろん、そこに変更する必要があるので、私は、元、プラス8MHzのコメントアウト。

 

#if!HSE_VALUEは、定義されました

 #ifdefのSTM32F10X_CL   

//の#define HSE_VALUEヘルツでの外部発振器の((のuint32_t)25000000)/ *!<値* /

  #define HSE_VALUE((のuint32_t)8000000)/ *!<ヘルツでの外部発振器の値* /

 #else 

  #define HSE_VALUE((のuint32_t)8000000)/ *!<ヘルツでの外部発振器の値* /

 #endifの/ * STM32F10X_CL * /

#endifの/ * HSE_VALUE * /

次に見つけ、デバッグを続行するか、ではない、常に間違っている、その後、SystemInit()関数に従うと、最終的には最終決定のクロック周波数を設定するための場所を見つけるために引き続き、SetSysClockTo72()のstm32f10x_rcc.hは、デフォルトの最大72MHzを選択し、クロックは自分のプロジェクトのために必要とされます条件は、このように変更内側にコンパイル、72MHが必要になります。

 

#ifdefのSTM32F10X_CL

 

#if(0) 

    / *設定のPLL ---------------------------------------------- -------- * /

    / * PLL2構成:PLL2CLK =(HSE / 5)* 8 = 40 MHzの* /

    / * PREDIV1構成:PREDIV1CLK = PLL2 / 5メガヘルツ= 8 * /

        

    RCC-> CFGR2&=(のuint32_t)〜(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |

                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);

    RCC-> CFGR2 | =(のuint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |

                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);

 

#else

   / * PLL2構成:PLL2CLK =(HSE / 2)×10 = 40 MHzの* / // HSE = 8MHzの 

    / * PREDIV1構成:PREDIV1CLK = PLL2 / 5メガヘルツ= 8 * /  

    RCC-> CFGR2&=(のuint32_t)〜(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | 

                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); 

    RCC-> CFGR2 | =(のuint32_t)(RCC_CFGR2_PREDIV2_DIV2 | RCC_CFGR2_PLL2MUL10 | 

                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); 

#endifの

 

その上!参考http://news.eeworld.com.cn/mcu/2018/ic-news081240692.html

 

問題2:IAPは常に失敗し、APPへジャンプ、ホップは死にました。割り込み、クロック、無駄に、シャットダウンしているもの。その後、別のプロジェクトに出くわした問題の原因を見つけることができます。

もともと、APPプロジェクトを飛び越え、コードがそうです

 

メイン{

__enable_irq()。

RCC_Configuration_107();
GPIO_Configuration();
I2C_Configuration();
CAN_Configuration((char型*)MODID、0); // PCに接続
// CAN2_Configuration((char型*)MODID、0); //モジュールに接続
NVIC_Configuration();

...

}

それが変更できるように:

メイン

{

NVIC_SetVectorTable(NVIC_VectTab_FLASH、0x8003000)。
RCC_Configuration_107();
GPIO_Configuration();
I2C_Configuration();
CAN_Configuration((char型*)MODID、0); // PCに接続
// CAN2_Configuration((char型*)MODID、0); //モジュールに接続
NVIC_Configuration();
__enable_irq()。

 

}

文を増やし、およびNVICを設定した後、その後、中断さ回します。ただ、細かいです!

失敗の元々の理由は、割り込みベクタテーブルアドレスを設定するための時間がないということです!しかし、最初のオープンブレークが許可され、そして開かれた周辺機器を、割り込みベクタを設定する前に、許可証を中断し、周辺機器割り込み割り込み機能に入ろうとして、その後、誤った割り込みエントリアドレスの同等!

それはそれでした!周辺機器、割り込み、クロックの場合、オーダーのような層は、元の割り込みベクタテーブルがあります!

おすすめ

転載: www.cnblogs.com/heywei/p/11431529.html