摘要
本文章基于国信长天M4开发板,讲述了STM32G4 定时器TIM输入捕获频率测量的应用,祝各位学生蓝桥杯比赛取得好成绩!
M4开发板 频率发生器部分原理图
由上图可以看出,开发板上配置了两个555作为频率发生器,通过可调电阻R39,R40可调节输出频率,两个输出引脚分别连接在PA15和PB4引脚上。查阅芯片资料,可以得知这两个引脚可用作以下定时器的输入捕获:
PA15 --> TIM2_CH1(AF1)
PB4 --> TIM3_CH1(AF2)
TIM 输入捕获 使用步骤
下文将以赛方提供的示例代码HAL_06_LCD
为基础,为大家讲解ADC的使用步骤,赛方提供的示例代码可以加入我们的备赛交流QQ群(482754201),在群里下载:
① 将 PA15
,PB4
初始化为定时器输入通道模式
双击工程目录下的HAL_06_LCD.ioc
,使用STM32CubeMX软件打开工程配置。
点击PA15
和PB4
,分别将其设为TIM2_CH1
和TIM3_CH1
。并且点击左边的Timer
,将TIM2
的Channel 1
设为Input Capture direct mode
,下面的Parameter Setting
中将Prescaler
设为79
,Counter Period
设为65535
。
然后点击NVIC Setting
,选中下图所示的复选框:
如果要使用PB4
引脚进行输入捕获,那么TIM3
也要进行上图所示的设置,设置完成后点击右上角的GENERATE CODE
生成代码。
② 启动定时器中断
使用Keil打开刚刚生成的代码,打开main.c
文件,找到MX_TIM2_Init()
函数,在该函数末尾处/* USER CODE BEGIN TIM2_Init 2 */
和 /* USER CODE END TIM2_Init 2 */
之间添加如下代码,用来启动定时器2通道1的输入捕获。
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
如果在代码中使用的定时器3,那么同样也需要在MX_TIM3_Init()
中添加类似代码。
③ 编写定时器中断函数
使用Keil打开刚刚生成的代码,将下列代码粘贴到main.c
的/* USER CODE BEGIN 0 */
和/* USER CODE END 0 */
之间。
uint32_t f39 = 0, f40 = 0; //分别用来存储TIM2_CH1和TIM3_CH1的捕获频率
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
uint32_t cc1_value = 0;
cc1_value = __HAL_TIM_GET_COUNTER(htim);
__HAL_TIM_SetCounter(htim,0);
if(htim == &htim2) //定时器2,对应的是PA15引脚,R40
{
f40 = 1000000/cc1_value;
}
if(htim == &htim3) //定时器3,对应的是PB4引脚,R39
{
f39 = 1000000/cc1_value;
}
}
上述代码同学们需要牢记,甚至背诵
。
④ 获取捕获的频率
在main()
的while()
中插入如下代码:
char buf[64] = {0};
sprintf(buf , "TIM2(R40): %d Hz ", f40);
LCD_DisplayStringLine(Line8, (uint8_t *)buf);
sprintf(buf , "TIM3(R39): %dHz ", f39);
LCD_DisplayStringLine(Line9, (uint8_t *)buf);
HAL_Delay(100);
⑤ 运行效果图
总结
TIM 定时器输入捕获 使用步骤总结如下:
- 配置引脚PA15 PB4微定时器模式,并配置定时器参数
- 编写定时器中断函数,用于计算输入捕获的频率
- 捕获的频率值存放在变量
f39
和f40
中
如果此文章对你有帮助,欢迎点赞
关注
收藏
转发
.
学习过程中遇到问题可以在评论区留言,或者加入我们的QQ群(482754201),在群里讨论。