FreeRTOS学习

练习

STM32中使用定时器函数控制LED灯的亮灭

/* USER CODE BEGIN 0 */
	int flag_red =0;
	int flag_bule =0;
	int flag_yellow = 0;//标志LED灯的状态
	//当时间到达就会调用到这个函数
	//每隔100ms调用一次中断回调函数
	
	void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
	{
		//判断是否是定时器1
		if(htim == &htim2)
		{
			//执行LED灯闪烁的代码
			flag_red = !flag_red;//修改LED灯的状态,0->1,1->0
			if(flag_red == 1)
			{
		
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
				
			}
			else if(flag_red ==0)
			{
			
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
			}
		
		}
		else if(htim == &htim1)
		{
			//执行LED灯闪烁的代码
			flag_bule = !flag_bule;//修改LED灯的状态,0->1,1->0
			if(flag_bule == 1)
			{
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
				
				
			}
			else if(flag_bule ==0)
			{
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
			
			}
		
		}
		else if(htim == &htim3)
		{
			//执行LED灯闪烁的代码
			flag_yellow = !flag_yellow;//修改LED灯的状态,0->1,1->0
			if(flag_yellow == 1)
			{
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
			}
			else if(flag_yellow ==0)
			{
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
			}
		
		}
		
		
	}
	
/* USER CODE END 0 */

/* USER CODE BEGIN 2 */
	HAL_TIM_Base_Start_IT(&htim1);//以中断的方式打开定时器1,定时器开始工作计数,当时间到达后会产生溢出事件,也就是
										//会产生一个中断,在中断中去处理对应的事件
	HAL_TIM_Base_Start_IT(&htim2);
	HAL_TIM_Base_Start_IT(&htim3);
	
		
	
  /* USER CODE END 2 */

演示效果

定时器让红黄蓝灯亮灭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值