蓝桥杯学习笔记十:PWM占空比测量实验

本文详细介绍了如何使用STM32的MX系列定时器配置PWM输出,并通过输入捕获功能测量上升沿和下降沿之间的计数值,进而计算占空比并通过串口显示测量结果。重点讲解了配置步骤和关键代码段,适合嵌入式开发人员学习实践。
摘要由CSDN通过智能技术生成

实验目的:选定一个引脚(PA1)PWM产生,然后用输入捕获查看上升沿和下降沿之间的计数值,然后根据分频数计算占空比,再串口输出测量到的频率和占空比。

配置视频:补充----测量占空比的MX配置_哔哩哔哩_bilibili

 这两个和时钟配置不必说。

 

 

以上是输入捕获配置(注意内部时钟,直接和间接模式,打开中断,一个上升沿,一个下降沿触发中断)

 上图是配置的PWM(不需要开中断)

 上图是串口配置(别忘了开中断)

最后生成代码之后,再在main.c文件中定义函数:

int t=0,t1=0,f=0;
float Kong=0;


void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//一定注意是输入捕获的中断回调函数(之前用错,看了50分钟才发现!)
{
	if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)//如果是CH2(检测上升沿的位置)
	{
		
		t1=HAL_TIM_ReadCapturedValue ( &htim2,TIM_CHANNEL_2 );//闭环之后,先获得一个周期的计数值

		__HAL_TIM_SetCounter(&htim2 ,0);//再把计数值归零
		
	}
	else 
	t=HAL_TIM_ReadCapturedValue ( &htim2,TIM_CHANNEL_1 );//检测到下降沿然后记录计数值
	HAL_TIM_IC_Start_IT (&htim2 ,TIM_CHANNEL_1);//这两行重新打开中断
	HAL_TIM_IC_Start_IT (&htim2 ,TIM_CHANNEL_2);

}

 主函数程序:

int main(void)
{

	char s[20];

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_TIM3_Init();
  MX_USART1_UART_Init();

	HAL_TIM_PWM_Start (&htim3 ,TIM_CHANNEL_2);//开启PWM
	__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, 100);//配置占空比
	HAL_TIM_IC_Start_IT (&htim2, TIM_CHANNEL_2);//首先开启中断
	HAL_TIM_IC_Start_IT (&htim2, TIM_CHANNEL_1);

  while (1)
  {
		f=1000000/t1;//因为计数器是79分频的
		Kong=((float )t/(float )t1)*100;
		sprintf(s,"频率:%d\r\n占空比:%.2f\r\n",f,Kong);
		HAL_UART_Transmit (&huart1 ,(unsigned char*)s,strlen (s),50);//串口打印
		HAL_Delay (500);
  }

}

(连接好PA1和PA7后)串口调试助手显示界面:

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值