云计算百科
云计算领域专业知识百科平台

蓝桥杯嵌入式-脉冲捕获(频率)

本篇文章是在蓝桥杯嵌入式-LCD完整的项目下补充完成的。如果需要代码,直接看第四部分的下载链接。

一、STM32CubMX配置

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

二、代码方面

2.1 main.c

2.1.1 修改位置

在这里插入图片描述

2.1.2 对应代码

HAL_TIM_IC_Start_DMA(&htim3,TIM_CHANNEL_1,tim_ic_buffer[0],64); //R39-pwm输入捕获(频率)
HAL_TIM_IC_Start_DMA(&htim8,TIM_CHANNEL_1,tim_ic_buffer[1],64); //R40-pwm输入捕获(频率)

2.2 task.c

2.2.1 修改位置

在这里插入图片描述 在这里插入图片描述

2.2.2 对应代码

uint32_t tim_ic_buffer[2][64];
uint32_t tim_ic_temp[2];
uint32_t tim_ic_val[2];

void ic_proc()
{
tim_ic_temp[0] = tim_ic_temp[1] = 0;
for (uint8_t i = 0; i < 64; i++)
{
tim_ic_temp[0] += tim_ic_buffer[0][i];
tim_ic_temp[1] += tim_ic_buffer[1][i];
}

tim_ic_temp[0] /= 64;
tim_ic_temp[1] /= 64;

tim_ic_val[0] = (int)(1000000.0f / (float)(tim_ic_temp[0]));
tim_ic_val[1] = (int)(1000000.0f / (float)(tim_ic_temp[1]));
}

void lcd_proc()
{
lcddisplay(Line1, " R39:%d R40:%d ", tim_ic_val[0], tim_ic_val[1]); //R39、R40的捕获频率值显示
}

task_t scheduler_t[] =
{
{lcd_proc,100, 0},
{ic_proc, 100, 0}
};

2.3 task.h

2.3.1 修改位置

在这里插入图片描述

2.3.2 对应代码

extern uint32_t tim_ic_buffer[2][64];

三、其他

3.1 单脉冲捕获代码(下载资料含例程)

STM32CubMX只用配置需要使用的(R39/R40),代码的位置与本文第二部分内容相同。例程为R40。

main.c

/*如果使用R39,只需要将这个函数的htim8改为htim3即可,task.c、task.h不用修改任何东西*/
HAL_TIM_IC_Start_DMA(&htim8,TIM_CHANNEL_1,tim_ic_buffer,64); //R40-PA15

/*R39使用以下函数(STM32CubMX配置参考本文第一部分,只配置R39相关即可)*/
//HAL_TIM_IC_Start_DMA(&htim3,TIM_CHANNEL_1,tim_ic_buffer[0],64); //R39-PB4

task.c

uint32_t tim_ic_buffer[64];
uint32_t tim_ic_temp;
uint32_t tim_ic_val;

void ic_proc()
{
tim_ic_temp = 0;
for (uint8_t i = 0; i < 64; i++)
{
tim_ic_temp += tim_ic_buffer[i];
}

tim_ic_temp /= 64;

tim_ic_val = (int)(1000000.0f / (float)(tim_ic_temp));
}

void lcd_proc()
{
lcddisplay(Line1, " R40:%d ", tim_ic_val); 值显示
}

task_t scheduler_t[] =
{
{lcd_proc,100, 0},
{ic_proc, 100, 0}

};

task.h

extern uint32_t tim_ic_buffer[64];

3.2 完整代码下载

资料下载:https://pan.quark.cn/s/08f8e6116512

赞(0)
未经允许不得转载:网硕互联帮助中心 » 蓝桥杯嵌入式-脉冲捕获(频率)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!