STM32 Timer

 STM32 Timerのタイマー

タイマーの設定

実は、下に書いてあるように設定して、動かしていると思っていたのにLEDがついたらつきっぱなしで思った通りの動きをしなかった・・・・かと言って何かしましたか?というと一晩寝かせて朝やったら動いた・・・(やった事は、桁で数字をかえる、分周率を7200、36000といった具合に・・それで元の数字に戻ったころにちゃんと動いた・・・謎)

先に時間を操作するので、基準になるクロックの設定をする。


RCCからHSEにCrystal/Ceramic Resonator

クロックの画面で各クロックを設定


ここではTimer4を使ってみた。
Internal clockにチェックを入れると下の設定画面が出てくる。
Prescalerを設定
後で設定するクロック(ここでは72MHz)の分周率。7200(1はゼロから始まるから)
72MHz=72000kHzなので7200で割ると10kHz。
1秒のタイマーにするには、10000カウントという事になる


タイマーだけ設定しても何も起こらないのでオンボードのPC13をOutputに設定して、LEDを点灯させると

static void MX_TIM4_Init(void)
{
中略・・・
  /* USER CODE BEGIN TIM4_Init 2 */
  HAL_TIM_Base_Start_IT(&htim4);
  /* USER CODE END TIM4_Init 2 */
  HAL_TIM_Base_Start_IT(&htim4);でタイマーをスタートさせる命令。

コールバックされたら、ピンをトグルするように記載して点滅間隔でタイマー割り込みを確認する。

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
    static short Led = 1;

    if (htim == &htim4){
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    }
}
/* USER CODE END 0 */


コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

ILI9341 240X320 Arduino

Attiny85 FuseRest