完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在利用“通用定时器”捕获PWM信号的过程中,我们的中断服务函数是设置为如下的哪一种模式呢?模式1和模式2:
模式1: if ( tiM_GetITStatus ( GENERAL_TIM, TIM_IT_Update) != RESET ) { TIM_ICUserValueStructure.Capture_Period ++; TIM_ClearITPendingBit ( GENERAL_TIM, TIM_FLAG_Update ); } // 上升沿捕获中断 if ( TIM_GetITStatus (GENERAL_TIM, GENERAL_TIM_IT_CCx ) != RESET) { // 第一次捕获 if ( TIM_ICUserValueStructure.Capture_StartFlag == 0 ) { // 计数器清0 TIM_SetCounter ( GENERAL_TIM, 0 ); // 自动重装载寄存器更新标志清0 TIM_ICUserValueStructure.Capture_Period = 0; // 存捕获比较寄存器的值的变量的值清0 TIM_ICUserValueStructure.Capture_CcrValue = 0; // 当第一次捕获到上升沿之后,就把捕获边沿配置为下降沿 GENERAL_TIM_OCxPolarityConfig_FUN(GENERAL_TIM, TIM_ICPolarity_Falling); // 开始捕获标准置1 TIM_ICUserValueStructure.Capture_StartFlag = 1; } // 下降沿捕获中断 else // 第二次捕获 { // 获取捕获比较寄存器的值,这个值就是捕获到的高电平的时间的值 TIM_ICUserValueStructure.Capture_CcrValue = GENERAL_TIM_GetCapturex_FUN (GENERAL_TIM); // 当第二次捕获到下降沿之后,就把捕获边沿配置为上升沿,好开启新的一轮捕获 GENERAL_TIM_OCxPolarityConfig_FUN(GENERAL_TIM, TIM_ICPolarity_Rising); // 开始捕获标志清0 TIM_ICUserValueStructure.Capture_StartFlag = 0; // 捕获完成标志置1 TIM_ICUserValueStructure.Capture_FinishFlag = 1; } TIM_ClearITPendingBit (GENERAL_TIM,GENERAL_TIM_IT_CCx); } 模式2: /* 清除中断标志位 */ TIM_ClearITPendingBit(GENERAL_TIM, TIM_IT_CC1); /* 获取输入捕获值 */ IC1Value = TIM_GetCapture1(GENERAL_TIM); IC2Value = TIM_GetCapture2(GENERAL_TIM); // 注意:捕获寄存器CCR1和CCR2的值在计算占空比和频率的时候必须加1 if (IC1Value != 0) { /* 占空比计算 */ DutyCycle = (float)((IC2Value+1) * 100) / (IC1Value+1); /* 频率计算 */ Frequency = (72000000/(ADVANCE_TIM_PSC+1))/(float)(IC1Value+1); printf("占空比:%0.2f%% 频率:%0.2fHzn",DutyCycle,Frequency); } else { DutyCycle = 0; Frequency = 0; } |
|
相关推荐
1个回答
|
|
基于定时器捕获测量脉宽及占空比,你代码里涉及到的两种模式都可以,你根据情况来。具体就是资源及你对两种模式的理解。
第一种模式基于一个通道,中途要做捕获边沿的切换。特点是只需要1个捕获通道,但需做捕获边沿切换 。第二种模式是基于定时器复位从模式,要使用2个捕获通道,分别捕捉上沿和下沿,无须中途做捕获沿的切换。在捕获过程中没有发生计数器溢出的话,捕获值获得简单。 从你给出的代码来看,似乎待测信号宽度不会长于计数周期,即无须统计溢出次数,否则得考虑溢出次数。 另外,若使用模式2的话,在发生通道1捕获事件后就进行频率及占空比计算的话,应该保证通道2已经做过捕获并获得捕获值。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
541浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
514浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 09:01 , Processed in 1.219335 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号