STM32-HAL库03-TIM定时器实现LED闪烁
所用材料:
STM32F103C8T6(最小系统板)
STM32cubemx(HAL库软件)
MD5(编程软件)
本节所学内容:
通过TIM3定时器实现LED闪烁;
其中LED-PC13;
第一步-新建工程
1.选择MCU-F103C8
第二步-GPIO设置
- 选择PC13引脚
- 选择GPIO_Output即GPIO输出
- 默认各输出参数

第三步-SYS设置
将DEBUG选线设置为Serial Wire
第四步-时钟设置
具体配置如下图
第五步-配置TIM定时器
- 本文选用TIM3,目标为每500ms进行一次LED电平翻转
- Timers – Tim3 – Clock Source – Internal Clock
- Paramater Setting – Prescaler – (720-1)
预分频值为720,则TIM3频率为72M/720=100K,即每10us计数一次 - Paramater Setting – Counter Period --(50000-1)
定时周期为50000个计数,即周期为500ms - NVIC Setting – 勾选TIM3的全局中断

第六步-文件导出至MD5
第七步-程序烧写
- 打开MDK5
- 烧录程序设置:魔术棒-DEBUG(选择STlink)-Settings-Flash Download-勾选Reset and run

- 在main.c文件下加入定时器启动语句如下
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
HAL_TIM_Base_Start_IT(&htim3);
- 在tim.c文件下加入定时器中断回调函数如下
/*------------------------------------------------------------------
函数名称:TIM内部时钟中断回调函数
函数功能:实现运行指示灯的闪烁
函数参数:每过500ms跳进一次中断函数,实现一次LED电平翻转
-------------------------------------------------------------------*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
}
程序附录
main.c主要内容:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
HAL_TIM_Base_Start_IT(&htim3); //内部定时器TIM3中断使能
/* USER CODE END 2 */
while (1)
{
}
}
tim.c主要内容:
TIM_HandleTypeDef htim3;
/* TIM3 init function */
void MX_TIM3_Init(void)
{
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM3_Init 1 */
/* USER CODE END TIM3_Init 1 */
htim3.Instance = TIM3;
htim3.Init.Prescaler = 719;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 49999;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspInit 0 */
/* USER CODE END TIM3_MspInit 0 */
/* TIM3 clock enable */
__HAL_RCC_TIM3_CLK_ENABLE();
/* TIM3 interrupt Init */
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM3_IRQn);
/* USER CODE BEGIN TIM3_MspInit 1 */
/* USER CODE END TIM3_MspInit 1 */
}
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspDeInit 0 */
/* USER CODE END TIM3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM3_CLK_DISABLE();
/* TIM3 interrupt Deinit */
HAL_NVIC_DisableIRQ(TIM3_IRQn);
/* USER CODE BEGIN TIM3_MspDeInit 1 */
/* USER CODE END TIM3_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/*------------------------------------------------------------------
函数名称:TIM内部时钟中断回调函数
函数功能:实现运行指示灯的闪烁
函数参数:每过500ms跳进一次中断函数,实现一次LED电平翻转
-------------------------------------------------------------------*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
}
/* USER CODE END 1 */
版权声明:本文为qq_45854134原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。