完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,我正在使用 Carmine Noviello 编写的《精通 STM32》一书中的示例。
例子是第 11 章的第 6 章,是关于 Input capture mode 的。 我有一块核板 STM32F401RE,我正在使用 STM32CUBEIDE 工具构建示例。 我配置了两个定时器: 我在 DMA 循环模式下使用 tiM1 使 LED PA5 闪烁,每 50khz 高一次。 我想通过在输入捕获模式下将 LED 连接到 TIM3 的通道 1 来检测此频率。 TIM3时钟通过MCO引脚连接到LSE,运行频率为32768hz。 我在 DMA 循环模式下配置了 TIM3,这样当 LED 为高电平时,CCR 的内容被传输到一个包含两个元素的 16 位捕获数组 (Captures[2])。 由于 CCR1 是 16 位寄存器,因此 DMA 传输是半字大小。 全局变量 captureDone 由 HAL_TIM_IC_CaptureCallback() 回调函数设置为 1,该回调函数在捕获过程结束时调用。 当发生这种情况时,使用以下等式计算样本信号的频率: 如果(捕获完成!= 0){ 如果(捕获[1]>=捕获[0]){ diffCapture = (captures[1] - captures[0]); }别的{ diffCapture = (htim3.Instance->ARR - 捕获[0]) + 捕获[1]; } 频率 = LSE_VALUE/ (htim3.Instance->PSC + 1); 频率=(浮动)频率/ diffCapture; sprintf(msg, "输入频率: %.3frn", 频率); HAL_UART_Transmit(&huart2, (uint8_t*) msg, strlen(msg), HAL_MAX_DELAY); 同时(1); } 问题是,即使从调试中我读到 captures[1] 的值大于 captures[0],也会执行 ELSE 语句。 你能帮忙做这个练习吗? |
|
相关推荐
1个回答
|
|
> 使 LED PA5 闪烁,每 50khz 变高一次。
> TIM3 时钟通过 MCO 引脚连接到 LSE,运行频率为 32768 赫兹。 您是否尝试使用以 32kHz 运行的定时器测量 50kHz 信号? > 我在 DMA 循环模式下配置了 TIM3 您想捕获两个值,所以不要将 DMA 设置为循环模式,而是设置为非循环模式。 否则,除非您停止测量的脉冲源(也许在这种特殊情况下您可以使用 TIM1 的相应 DBGMCU 冻结寄存器位来做到这一点),否则 DMA 会继续运行并一遍又一遍地覆盖 captures[] 数组。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2629 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1782 浏览 1 评论
3607 浏览 6 评论
5987 浏览 21 评论
938浏览 4评论
1314浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
582浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1302浏览 3评论
1356浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 00:34 , Processed in 1.113320 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号