Time2
1msインターバル、アップカウントタイマーを作ります。
LLライブラリーを使用しています。

Timer2初期化の追記
カウント開始と、オーバーフロー割り込み許可は、ユーザーが行う。
Timerの初期化で自分で追記する部分
/* USER CODE BEGIN TIM2_Init 2 */
LL_TIM_EnableCounter(TIM2);
LL_TIM_EnableIT_UPDATE(TIM2);
/* USER CODE END TIM2_Init 2 */
TIM2 割り込みハンドラ
stm32F4xx_it.c
/**
* @brief This function handles TIM2 global interrupt.
*/
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
LL_TIM_ClearFlag_UPDATE(TIM2);//割り込みフラグクリア
tm2.count++;
if(tm2.count==500)//1ms x 500回=500msインターバルでLEDを点滅
{
tm2.count=0;
tm2.completed = true;//処理は、mainで行う。
LL_TIM_DisableIT_UPDATE(TIM2);//割り込み停止
}
/* USER CODE END TIM2_IRQn 0 */
/* USER CODE BEGIN TIM2_IRQn 1 */
/* USER CODE END TIM2_IRQn 1 */
}
TIM2初期化関数
上記、カウント開始、割り込み許可の2行は、ユーザー記入。
TIM2初期化(MX生成)
/**
* @brief TIM2 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM2_Init(void)
{
/* USER CODE BEGIN TIM2_Init 0 */
/* USER CODE END TIM2_Init 0 */
LL_TIM_InitTypeDef TIM_InitStruct = {0};
/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
/* TIM2 interrupt Init */
NVIC_SetPriority(TIM2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(TIM2_IRQn);
/* USER CODE BEGIN TIM2_Init 1 */
/* USER CODE END TIM2_Init 1 */
TIM_InitStruct.Prescaler = 16;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 0x15F9;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
LL_TIM_Init(TIM2, &TIM_InitStruct);
LL_TIM_EnableARRPreload(TIM2);
LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_INTERNAL);
LL_TIM_SetTriggerOutput(TIM2, LL_TIM_TRGO_RESET);
LL_TIM_DisableMasterSlaveMode(TIM2);
/* USER CODE BEGIN TIM2_Init 2 */
LL_TIM_EnableCounter(TIM2);//カウント開始
LL_TIM_EnableIT_UPDATE(TIM2);//オーバーフロー割り込み許可
/* USER CODE END TIM2_Init 2 */
}

