0、引言
单片机:STM32F407ZGT6; 仿真器:ST Link V2; 开发环境:STM32CubeIDE 1.10.1; 功能说明:采用定时器中断的方式,实现LED按照定时器频率闪烁。
前情提要: STM32Cube学习(1)——点灯&配置
参考资料: 【STM32】HAL库 STM32CubeMX教程六----定时器中断 【STM32】HAL库——定时器溢出中断
1、STM32CubeIDE配置
打开CubeIDE,新建工程,选择匹配的芯片
1.1、配置时钟
在时钟配置中按照如下进行配置,使能HSE、PLLX72,外部时钟配置为8M,APB1分频器为/2,定时器频率设置为72M
1.2、定时器配置
时钟源选择内部时钟
1.3、参数设置
PSC(Prescaler,预分频器)=7199 Counter Mode(触发器模式)=up(向上计数) Counter Period (arr,自动重载值)=4999 CKD(Internal Clock Division,时钟分频因子)=失能 auto-reload preload(自动重载arr值)=使能
TRGO:定时器的触发信号输出 在定时器的定时时间到达的时候输出一个信号 (如:定时器更新产生TRGO信号来触发ADC的同步转换,) 计算公式如下 其中Tout为计算得到的时间,Tclk为时钟频率 按照公式计算得,定时为500ms 使能定时器中断
1.4、生成配置
生成代码
2、代码编辑
在main.c中添加以下代码
int main(void)中初始化中断
HAL_TIM_Base_Start_IT(&htim2);
回调函数,该回调函数会自动将中断标志位复位。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static unsigned char ledState = 0;
if (htim == (&htim2))
{
if (ledState == 0)
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_SET);
ledState = !ledState;
}
}
|