一、选择题
1.
定时器的时基单元不包括(D )
A.
自动重载寄存器
B.
定时器计数器
C.
预分频寄存器
D.
溢出寄存器
2.
下列不属于通用定时器的是( D )
A.TIM2
B.TIM4 C TIM5
D. TIM
3.
下列属于高级通用定时器的是(A )
A.TIM1
B.TIM4 C TIM5
D. TIM7
4.
带互补输出功能的定时器是(A )
A.
高级定时器
B.
通用定时器
C.
基本定时器
5.
没有捕获
/
比较功能的定时器是(C )
A.
高级定时器
B.
通用定时器
C.
基本定时器
二、填空题
1. STM32
通用定时器的
16
位计数器可以采用三种方式工作,
向上计数模式、向下计数模式、中央 对齐计数模式。
2. STM32
定时器具备
16
位可编程预分频器,时钟频率的分频系数为
65535
之间的任意数值。
3.
当定时器使用
GPIO
引脚实现输出比较产生
PWM
,
IO
引脚必须设置为 复用输出 模式。
4. STM32F103
芯片有
2 个普通定时器。
5.
除去看门狗定时器和系统定时器的八个定时器,
STM32F103
分成
3
类,分别为 基本定时器 、
高级定时器 和 通用定时器。
6. SysTick
定时器是
24 位的。
7.
可以使用定时器的输入 捕获 来测量输入脉冲信号频率。
8. TIM_TimeBaseInit
(
)
函数的功能是 初始化时基单元 。
9. STM32
的定时器是
16
位定时器。
三、简答题
1.
STM32F103
微控制器定时器的类型有哪几种?
STM32F103
微控制器不同类型的定时器有什么区别?
类型 | 编号 | 总线 | 功能 |
高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能 |
通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |
2. STM32F103 微控制器通用定时器的常用工作模式有哪些?
1. 单脉冲模式(One-pulse Mode):定时器在接收到触发事件后,产生一个单脉冲信号,并停止计数。
2. 自由运行模式:定时器持续运行,不受外部事件的影响,周期性地产生中断或更新事件。
3. 输入捕获模式:定时器用于测量输入信号的脉冲宽度或输入信号与定时器时钟之间的时间间隔。
4. 输出比较模式:定时器与一个或多个输出通道配合使用,比较计数器的值与预设的比较值,根据比较结果控制输出信号的状态。
5. PWM 模式:定时器通过设置占空比控制输出信号的脉冲宽度,用于产生 PWM 信号。
3.
简述
STM32
定时器的计数器模式。
• 上升计数模式(Up Counting Mode):计数器从 0 开始递增,直到达到最大值(通常是定时器的自动重装载
值),然后重新从 0 开始计数。这是最常用的计数模式。
• 下降计数模式(Down Counting Mode):计数器从设定的初始值开始递减,直到达到 0,然后重新从初始值开
始计数。
• 中央对齐模式(Center-aligned Mode):计数器在上升和下降之间交替计数,并在达到最大值和最小值时反
向计数。这种模式可以用于产生对称的脉冲信号或实现高级的 PWM 控制。
四、程序设计题
1.使用stm32f103c8t6设计程序,使用定时器在 PA2 端口输出 f=2Hz,占空比 q=2/3 的方波。
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟
TIM_TimeBaseStructure.TIM_Period = 49999; // 设置自动重装载值,频率为2Hz
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 设置预分频值,时钟频率为72MHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 上升计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 配置通道1为PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 33333; // 设置占空比为2/3
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_Cmd(TIM2, ENABLE); // 启动定时器2
TIM_CtrlPWMOutputs(TIM2, ENABLE); // 使能PWM输出
2
设计程序,使用定时器
TIMER2
的通道
CHANNEL_1
实现输入捕获。
TIM_ICInitTypeDef TIM_ICInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟
// 配置TIMER2为输入捕获模式
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; // 上升沿触发
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM2, &TIM_ICInitStructure);
TIM_Cmd(TIM2, ENABLE); // 启动定时器2
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); // 使能通道1的输入捕获中断
3.通过定时器TIM3 完成定时功能使 LED 闪烁间隔为 1s,写出定时器初始化函数和中断函数即可。
// 配置定时器TIM3
TIM_TimeBaseStructure.TIM_Period = 9999;
TIM_TimeBaseStructure.TIM_Prescaler = 7199;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// 定时器TIM3的中断服务程序
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
GPIOC->ODR ^= GPIO_Pin_13; // 翻转LED的状态
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除中断标志位
}
}