2017-10-04 8 views
2

私はSTM32F7シリーズのマイクロコントローラを使用していますが、コアが停止するたびにGPIOの変更値(トグル、パルス、高zなど)を持たせると最も効果的ですデバッガはJTAGインタフェースに接続されています。誰もそのような機能を認識していますか?STM32ターゲットが停止したときにPINを切り替えます

+0

IMOコアを停止するとuCの状態が変わることはありません。おそらく、プローブによってはそれを伝えるピンがありますが、わかりません。 –

答えて

1

DBGMCUレジスタがあります。これらのレジスタは、コアが停止したときに特定の周辺機能(主にタイマー)を選択的に停止させることができます。

タイマー出力は、実行中は何らかの方法で低レベルの信号にし、そうでない場合は高レベルにします。 1つのタイマーではできませんが、2つのタイマーをマスタースレーブ設定で使用することは可能です。

TIM3は、非常に高いデューティサイクルのPWM信号を出力するように設定し、2サイクルの間は低速で開始し、残りの65536サイクルの期間はハイになります。 2サイクルの周期で動作するTIM2にスレーブし、カウンタオーバーフロー時にTIM3をリセットします。したがって、は、TIM2が実行されている限り、強制的に低い値に強制されますが、TIM2が停止すると、99.997%の高いPWM信号を出力します。その後、TIM2は、デバッガでコアが停止したときに停止するように設定されていますが、TIM3は実行を継続します。私はF7を持っていない

RCC->AHBENR |= RCC_AHBENR_GPIOBEN; // enable peripheral clocks, that might be different on your board 
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN | RCC_APB1ENR_TIM3EN; 

// consult your datasheet for the right AF value 
GPIOB->AFR[0] = (GPIOB->AFR[0] & ~GPIO_AFRL_AFRL0) | 2; // set PB0 to Alternate Function 2, TIM3 
GPIOB->MODER = (GPIOB->MODER & ~GPIO_MODER_MODER0) | GPIO_MODER_MODER0_1; // set PB0 to Alternate Function 

DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_TIM2_STOP; // stop TIM2 when core is stopped 
DBGMCU->APB1FZ &= ~DBGMCU_APB1_FZ_DBG_TIM3_STOP; // but don't stop TIM3 

TIM2->ARR = 1;     // master timer period 
TIM2->CR2 = TIM_CR2_MMS_1;  // master mode selection MMS=010 Update event 
TIM2->CR1 = TIM_CR1_CEN;  // enable timer 2 

TIM3->ARR = 65535;    // PWM period 
TIM3->CCR3 = 2;     // channel 3 PWM duty cycle 
TIM3->CCMR2 = TIM_CCMR2_OC3M; // set channel 3 to PWM mode 2 
TIM3->CCER = TIM_CCER_CC3E  // enable channel 3 compare output 
     /* | TIM_CCER_CC3P */; // it's possible to invert output polarity 
TIM3->SMCR = TIM_SMCR_TS_0  // trigger selection TS=001 ITR1 = TIM2 is master 
     | TIM_SMCR_SMS_2;  // slave mode SMS=100 reset mode 
TIM3->CR1 = TIM_CR1_CEN;  // enable timer 3 

、それは私が中に一時停止ボタンを押したときにLED 3. TIM3チャネルがうまく点灯されるPB0上のLEDを持つようにたまたま私のSTM32L151ボード、上で実行されますデバッガでは、低パルスは肉眼では目立ちません。外付けのlow pass RC filterを適用して、接続されているコンポーネントを気にすると消えます。アドバンストタイマーTIM1またはTIM8のリトリガブルワンパルスモードを使用してクリーンな信号を出力することは可能かもしれませんが、これらの経験はありません。

+0

このタスクの2つのタイマー(貴重な32ビットtim2を含む)、それは過剰です。 –

+0

もちろん、可能なマスタースレーブタイマーのペアで動作します。 – berendi

+0

しかし、私は何のために理解していないのですか?マルチプロセッサ環境で別のマイクロプロセッサを停止するために、jtagに特別なメカニズムがあります。 –

関連する問題