本篇文章是在蓝桥杯嵌入式-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
网硕互联帮助中心





评论前必须登录!
注册