stm32f103c8t6使用定时器实现1s翻转LED+cubemx生成

本文详细介绍了如何使用STM32的定时器功能,包括TIM2定时器的设置,预分频计算,以及如何通过定时器中断实现每10ms的LED闪烁。特别提到回调函数不宜用于长时间延时操作。
摘要由CSDN通过智能技术生成

STM32定时器定时时长计算公式

T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK
其中TIMxCLK为时钟频率,TIM_Period(arr)自动重装载值,TIM_Prescaler(PSC)为时钟预分频系数。

如:
TIM_Period=7200-1
TIM_Prescaler=100-1
对于stm32f103c8t6时钟频率为72MHZ
T=10000us=10ms=0.01s
【若开启了定时器中断 0.01s进入回调函数一次】

cubeMX创建工程:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
生成工程即可

在main.c中添加

  MX_GPIO_Init();
  MX_TIM2_Init();

  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);//启动定时器中断

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

回调函数

在main.c文件中添加定时器回调函数
static uint16_t index_10ms = 0;
uint16_t index_led = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)	
{
	if (htim->Instance == htim2.Instance)
	{
		index_10ms++;	 
    if(index_10ms%100==0)  
      index_led=1;
    if(index_10ms%100!=0)
	index_led=2;
	}
}


当 index_led=1时满足1s定时

HAL_TIM_Base_Start_IT(&htim2);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
 while (1)
  {
    /* USER CODE END WHILE */

	  if( index_led==1)
	  {	HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
		HAL_Delay(1000);
		HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);
		HAL_Delay(1000);
	  }
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

总结:回调函数时间很短,不能在回调函数中写延时

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值