蓝桥杯嵌入式组 学习笔记(HAL库学习)__ 七、输入捕获

原理:f=1/t=1/10ms=100hz

需求:

1、测频率

2、测占空比(上升沿周期/周期)              

一、cubeMX

配置

需要测占空比则再打开通道二配置channel->input capture indirect mode  

再进行以下配置

二、Keil

main.c
void key_proc(void)  //界面切换按钮
{
	if(key[0].single_flag==1)
	{
		view=!view;		
		key[0].single_flag=0;
		LCD_Clear(Black);
	}
	if(key[1].single_flag==1)//增加占空比
	{
		pa6_duty+=10;
		if(pa6_duty>=100)pa6_duty=10;
		__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);
		key[1].single_flag=0;
		LCD_Clear(Black);
	}
	if(key[2].single_flag==1)
	{
		pa7_duty+=10;
		if(pa7_duty>=100)pa7_duty=10;
		__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);
		key[2].single_flag=0;
		LCD_Clear(Black);
	}

}
void disp_proc(void)  //界面切换
{
	if(view==0)
	{
	    char text[30];
//	    uint i=2;
	    sprintf(text,"      IC      ");
	    LCD_DisplayStringLine(Line1, (unsigned char *)text);
		sprintf(text,"    FRQ1:%d      ",frq1);
	    LCD_DisplayStringLine(Line3, (unsigned char *)text);
		sprintf(text,"    FRQ2:%d      ",frq2);
	    LCD_DisplayStringLine(Line5, (unsigned char *)text);
	}
	if(view==1)
	{
		char text[30];
//	    uint i=20;
	    sprintf(text,"      Para      ");
	    LCD_DisplayStringLine(Line1, (unsigned char *)text);
		sprintf(text,"    PA6:%d      ",pa6_duty);
	    LCD_DisplayStringLine(Line3, (unsigned char *)text);
		sprintf(text,"    PA7:%d      ",pa7_duty);
	    LCD_DisplayStringLine(Line5, (unsigned char *)text);
	}
	
}
interrutp.c

uint16_t ccr1_val=0,ccr2_val=0;
uint8_t frq1=0,frq2=0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{
		ccr1_val=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
		__HAL_TIM_SetCounter(htim,0);
		frq1=(8000000/80)/ccr1_val;
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
	if(htim->Instance==TIM3)
	{
		ccr2_val=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
		__HAL_TIM_SetCounter(htim,0);
		frq2=(8000000/80)/ccr1_val;
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值