完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
看起来后面那三个脉冲速度太快了,软件还没来得及读就把后面两个上升沿捕获进来了。要不试试把捕获值用DMA的方式保存起来,这样每次启动捕获后,只取第一个DMA保存的值用。看看能不能实现。
|
|
|
|
要在STM32F103上使用输入捕获测量2个脉冲上升沿间隔,可以按照以下步骤进行操作:
1. 连接脉冲信号到STM32F103的一个GPIO引脚。 2. 配置GPIO引脚为输入模式。 3. 配置输入捕获模块。 4. 启用输入捕获中断。 5. 在输入捕获中断处理函数中,获取脉冲的时间间隔。 下面是一个示例代码,演示了如何配置STM32F103的输入捕获模块来测量两个脉冲上升沿之间的时间间隔: ```c #include "stm32f10x.h" volatile uint32_t pulse1_time = 0; volatile uint32_t pulse2_time = 0; volatile uint8_t pulse_count = 0; void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) { if (pulse_count == 0) { pulse1_time = TIM_GetCapture1(TIM2); pulse_count++; } else if (pulse_count == 1) { pulse2_time = TIM_GetCapture1(TIM2); pulse_count = 0; } TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); } } int main(void) { // 启用TIM2时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 启用GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置GPIOA的Pin0为输入模式 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置TIM2为输入捕获模式 TIM_ICInitTypeDef TIM_ICInitStructure; TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_ICInit(TIM2, &TIM_ICInitStructure); // 启用输入捕获中断 TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); // 配置NVIC并启用中断 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 启动TIM2计数器 TIM_Cmd(TIM2, ENABLE); while (1) { // 在这里可以使用pulse1_time和pulse2_time计算脉冲间隔 } } ``` 在上面的示例代码中,我们使用了TIM2和GPIOA的Pin0来输入脉冲信号。输入捕获模块配置为在上升沿触发,并设置为直接输入,不经过滤波器。 在TIM2的输入捕获中断处理函数中,我们通过判断`pulse_count`的值来区分两个脉冲。第一个脉冲的时间戳记录在`pulse1_time`中,第二个脉冲的时间戳记录在`pulse2_time`中。 最后,在主循环中,可以使用`pulse1_time`和`pulse2_time`来计算脉冲间隔。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1535 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1484 浏览 1 评论
905 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
651 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1530 浏览 2 评论
1841浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
590浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
491浏览 3评论
492浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
472浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 01:21 , Processed in 0.687363 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号