STM32的hal库 定时器刹车配置

最近小编在调试STM32的hal库,TIM1波形刹车控制在此做以下几点总结,如有问题在相互交流谢谢!

1、用cube配置TIM1定时配置PWM输出,使能定时器自动重载,刹车自动恢复:

 

 

 

 

2、程序:

uint16_t dutyCycle = 1;
uint16_t test_value[5];
uint16_t pwmStartUp =0;




 /* USER CODE BEGIN 2 */
	
	HAL_TIM_Base_Start(&htim1);									//使能TIM1
	HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);		//使能PWM通道1
	HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);		//使能PWM通道2

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
		
		if(test_value[0] != dutyCycle)					//修改移相值
		{
			test_value[0] = dutyCycle;
			test_value[1] ++;
			__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, dutyCycle);	//通道移相			
			__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, dutyCycle);	//通道移相			
		}
		else if(pwmStartUp != 0)	   								    //启动PWM输出
		{
			pwmStartUp = 0;
			dutyCycle = 1;		  									    //设置最小值											
			__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, dutyCycle);	//通道移相			
			__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, dutyCycle);	//通道移相			
			HAL_TIM_Base_Start(&htim1);								    //使能TIM1
			HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);				    //使能PWM通道1
			HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);					//使能PWM通道2
		}
		
		
		test_value[4] ++;
		HAL_Delay(200);
		
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

3、仿真波形

 

 

链接:https://pan.baidu.com/s/1c9okZYu2RS1zVWffGWlIiw 
提取码:oblt 
 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 HAL库定时器配置可以分为以下几个步骤: 1. 初始化定时器时钟:根据不同的芯片型号,选择不同的时钟源和分频系数,使得定时器时钟频率满足要求。 2. 初始化定时器:设置定时器的工作模式、计数方式、自动重载值等参数,以确定定时器的计数范围和计数速度。 3. 配置定时器中断:使能定时器中断,并设置触发中断的条件和优先级。 4. 启动定时器:使能定时器计数器,开始计数。 5. 在定时器中断处理函数中编写相应的逻辑:当定时器计数达到设定值时,触发定时器中断,并执行中断处理函数中编写的相应逻辑。 以下是一个简单的基于HAL库定时器配置示例: ```c // 初始化定时器时钟 __HAL_RCC_TIM3_CLK_ENABLE(); // 初始化定时器 htim3.Instance = TIM3; htim3.Init.Prescaler = 999; // 分频系数为1000,定时器时钟频率为84MHz/1000=84kHz htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 8399; // 自动重载值为8400,所以定时器周期为8400/84kHz=0.1s HAL_TIM_Base_Init(&htim3); // 配置定时器中断 HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM3_IRQn); __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE); // 启动定时器 HAL_TIM_Base_Start_IT(&htim3); // 在定时器中断处理函数中编写相应的逻辑 void TIM3_IRQHandler(void) { if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE) != RESET) { __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 执行相应的逻辑 } } ``` 以上代码是配置一个基于TIM3的定时器,定时周期为0.1s,中断优先级为0。在定时器中断处理函数中,可以编写相应的逻辑,例如控制LED闪烁等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值