完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
1个回答
|
|
|
前言
上一篇,我们介绍了 STM32F4 的通用定时器作为 PWM 输出的使用方法,这一篇,我们将向大家介绍通用定时器作为输入捕获的使用。在本章中,我们将用 TIM5 的通道 1(PA0)来做输入捕获,捕获 PA0 上高电平的脉宽(用 KEY_UP 按键输入高电平),通过串口打印高电平脉宽时间。 一、输入捕获是什么? 输入捕获模式可以用来测量脉冲宽度或者测量频率。(原理方面不做过多讲解,需要则可以查看STM32F4开发指南库函数版本本节知识,我们开始配置) 二、输入捕获实验 1.功能配置 1、根据库函数本实验是以定时器5的CH1为例,在功能选择区选择TIM5。 2、根据库函数配置,选择对应的参数 3、设置串口,接收数据。 4、采用LED0作为实验提示。 2.时钟配置 RCC时钟配置如前文一样(此处一般情况是不变的)。 3.生成代码 1、串口代码中,定义printf和scanf。 2、此处虽然改定时器32位,数据范围比较宽广,但是为了适应更加多的场合,我们采用宁外一种方式,记录溢出中断次数。(请注意溢出中断和捕获中断是两个不同的中断回调函数) uint32_t TIM5CH1_CAPTURE_STA,TIM5CH1_CAPTURE_VAL; uint32_t high_time; HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_1); if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获第一次高电平 { HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9);//获取一次翻转一次LED high_time=TIM5CH1_CAPTURE_STA&0X3F; high_time*=0xFFFFFFFF; //溢出时间总和 high_time+=TIM5CH1_CAPTURE_VAL; //得到总的高电平时间 TIM5CH1_CAPTURE_STA=0; printf(“%d usn”,high_time); } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim-》Instance == TIM5) { if((TIM5CH1_CAPTURE_STA & 0x80) == 0) { if(TIM5CH1_CAPTURE_STA & 0x40) { if((TIM5CH1_CAPTURE_STA & 0x3f) == 0x3f) { TIM5CH1_CAPTURE_STA |= 0x80; TIM5CH1_CAPTURE_VAL = 0XFFFFFFFF; }else TIM5CH1_CAPTURE_STA++; } } } } void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if ( (TIM5CH1_CAPTURE_STA & 0x80) == 0 ) { if (TIM5CH1_CAPTURE_STA & 0x40) { TIM5CH1_CAPTURE_STA |= 0x80; TIM5CH1_CAPTURE_VAL = HAL_TIM_ReadCapturedValue(&htim5, TIM_CHANNEL_1); TIM_RESET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_1); TIM_SET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_1, TIM_ICPOLARITY_RISING); } else { TIM5CH1_CAPTURE_STA = 0; TIM5CH1_CAPTURE_VAL = 0; TIM5CH1_CAPTURE_STA |= 0x40; __HAL_TIM_DISABLE(&htim5); __HAL_TIM_SET_COUNTER(&htim5,0); TIM_RESET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1); TIM_SET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1,TIM_ICPOLARITY_FALLING); __HAL_TIM_ENABLE(&htim5); } } } 代码注释就不写了(太难打了),大家可以对应库函数实验代码进行理解。有问题也可以在评论里提出来。一起解决,如果以上有误请提出来,谢谢 总结 输入捕获就存在两种中断。在定时器中断我们也具体说过两个的不同。 到此为止,我们大概了解了32的一些基本的操作,后面我们将一一推出模块的调试和实验。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4138 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3228 浏览 1 评论
2752 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2181 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14980 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3086浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1896浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2066浏览 3评论
1979浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2168浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 09:45 , Processed in 0.596569 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1342