https://gitee.com/xushicheng1202/stm32-cube-mx_LL.git
这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。
1、TIM2 & NVIC 配置
点击?TIM2,选择?Internal Clock?使能 TIM2 时钟,配置所需的分频系数、计数器重装载值及相应参数。
定时器中断时间计算:????
?2、点击?NVIC,使能?TIM2 global interrupt?中断,优先级设置为 3、0。
?(在 TIM2 配置窗口的?NVIC Swttings?也可以使能 TIM2 中断,但不可以修改中断优先级)
?3、检查:点击?Code generation,勾选?Generate IRQ handler?生成中断服务函数,勾选?Call HAL handler
?4、Clock 配置
?5、生成代码
?6、代码测试
6.1、查看?MX_TIM2_Init() ?函数源码;
?分析?MX_TIM2_Init() ?函数:
a. 开启时钟,开启中断及分配中断优先级;
b. 设置定时器参数:分频系数、计数模式、自动重装载值、时钟分频因子(时钟分割);
c. 关闭自动重装载值缓存器;
d. 相比于标准库配置,未开启更新中断:TIM_DIER_UIE = 1 ;
????????标准库函数语句:TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
e. 相比于标准库配置,未使能定时器计数器:TIM_CR1_CEN = 1 ;
????????标准库函数语句:TIM_Cmd(TIM2, ENABLE);
6.2、在?main ?函数的用户代码区域 2 使能更新中断并开启 TIM2 计数器;
/* USER CODE BEGIN 2 */
LL_TIM_EnableIT_UPDATE(TIM2); // ENABLE TIM2 IT Update Interrupt <=> TIM_DIER_UIE = 1
LL_TIM_EnableCounter(TIM2); // ENABLE TIM2 Counter <=> TIM_CR1_CEN = 1
// LL_TIM_DisableIT_UPDATE(TIM2); // Disable TIM2 IT Update Interrupt <=> TIM_DIER_UIE = 0
// LL_TIM_DisableCounter(TIM2); // Disable TIM2 Counter <=> TIM_CR1_CEN = 0
/* USER CODE END 2 */
6.3、在?stm32f1xx_it.c?文件的中断处理函数?TIM2_IRQHandler ?用户代码区域 0 加入中断处理回调内容;
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
if (LL_TIM_IsActiveFlag_UPDATE(TIM2) == SET)
{
LL_TIM_ClearFlag_UPDATE(TIM2);
LL_GPIO_TogglePin(GPIOH, LED_Drive_2_Pin);
}
/* USER CODE END TIM2_IRQn 0 */
/* USER CODE BEGIN TIM2_IRQn 1 */
/* USER CODE END TIM2_IRQn 1 */
}
6.4、在?main ?函数中?while ?循环中加入程序运行指示灯代码;
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
LL_GPIO_TogglePin(GPIOH, LED_Drive_1_Pin);
LL_mDelay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
|