赞
踩
目录
16位递增计数器,有DMA请求生成,捕获比较通道数0,所在总线:APB1,只具有定时功能,有连续定时模式和单次定时模式
基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。
它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它
们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。两定时器相互独立,不共享任何资源
● 16位自动重装载累加计数器
● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值
分频
● 触发DAC的同步电路
● 在更新事件(计数器溢出)时产生中断/DMA请求
TIM6配置为连续定时模式,1ms中断一次
TIM7配置为单次定时模式,2s进入中断
配置中断优先级
配置LED引脚
启动TIM6中断
- /* USER CODE BEGIN 2 */
- HAL_TIM_Base_Start_IT(&htim6);
- /* USER CODE END 2 */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- if(ledFlag==1)
- {
- ledFlag=0;
- HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
- HAL_TIM_Base_Start_IT(&htim7);
- }
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- /* USER CODE BEGIN 1 */
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- if(htim->Instance==TIM6)
- {
- timerCount++;
- if(timerCount==1500)
- {
- timerCount=0;
- ledFlag=1;
- }
- }
- else if(htim->Instance==TIM7)
- {
- HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
- }
- }
- /* USER CODE END 1 */
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作
通用TIMx (TIM2、 TIM3、 TIM4和TIM5)定时器功能包括:
● 16位向上、向下、向上/向下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意
数值
● 4个独立通道:
─ 输入捕获
─ 输出比较
─ PWM生成(边缘或中间对齐模式)
─ 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA:
─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
─ 输入捕获
─ 输出比较
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
①CubeMX配置
TIM3基础配置
TIM3中断开启
②编写代码
- HAL_TIM_Base_Start_IT(&htim3);//启动定时器3
- HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_1);//启动定时器3CH1通道输出PWM波
- //读取TIM3 CH1 Compare
- int CH1_Value=__HAL_TIM_GetCompare(&htim3,TIM_CHANNEL_1);
动态修改TIM3 CH1 占空比,可以实现呼吸灯效果
- //脉宽调制
- int pulsWidth=100,dirInc=0;
- void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
- {
- if(htim->Instance==TIM3)
- {
- if(dirInc==0)
- {
- pulsWidth++;
- if(pulsWidth>=195)
- {
- pulsWidth=195;
- dirInc=1;
- }
- }
- else
- {
- pulsWidth--;
- if(pulsWidth<=5)
- {
- pulsWidth=5;
- dirInc=0;
- }
- }
- }
- __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,pulsWidth);//设置TIM3 CH1占空比
- }
输出总是50%占空比的方波,脉宽总是与ARR的值相等,如果CCR和计数器的值匹配,那么就会使CH1的输出翻转
①CubeMX配置
②代码编写
- HAL_TIM_Base_Start(&htim4);
- HAL_TIM_OC_Start(&htim4, TIM_CHANNEL_1);
中断配置
- HAL_TIM_Base_Start(&htim2);
- HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
- HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);
- //输入PWM
- void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
- {
- int IC1_Width=__HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_1);
- int IC2_Pulse=__HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_2);
-
- char buff[20]="";
- sprintf(buff,"IC1_Width:%d \r\n",IC1_Width);
- HAL_UART_Transmit(&huart2, (uint8_t *)buff, strlen(buff),HAL_MAX_DELAY);
- sprintf(buff,"IC2_Pulse:%d \r\n",IC2_Pulse);
- HAL_UART_Transmit(&huart2, (uint8_t *)buff, strlen(buff),HAL_MAX_DELAY);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。