完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试使用定时器触发 STM32F103C8T6 上的 ADC1。ADC 使用 DMA,转换完成后,我尝试通过 USB(虚拟 COM 端口)将缓冲区发送到我的计算机。我使用 HAL 在 STM32CubeIDE 中工作。
我使用 tiM4 及其第 4 个通道作为触发器。我需要生成 500 kHz,我设法做到了。我用示波器测试了它,如果我使用“PWM Generation CH4”选项,我可以获得 500 kHz 方波。
我将我的代码分成两个较小的代码以查看可能出现的问题。我测试了我在 while(1) 中启动的另外两个单脉冲定时器是否正常工作。是的,他们有。然后我在没有这些定时器的情况下为 ADC 编写了相同的代码,它似乎也可以工作(ADC 由 TIM4 CH4 触发)。我用电位计测试了它,ADC 将预期数据发送到我 PC 上的终端。 但是,当我将这两个代码结合起来时,似乎有些东西不起作用。我还尝试在 ADC 的回调中放置一个标志,并在 while(1) 中进行 USB 传输,然后重置标志,但它也不起作用。我还尝试在 ADC 的回调中停止 ADC 和 TIM4,并在 USB 传输后重新启动它,但没有帮助。我的电脑上仍然显示零。 如果有人有任何想法,我将不胜感激!谢谢! |
|
相关推荐
1个回答
|
|
ADC 配置中存在一个错误:连续与周期性 ADC 转换(触发模式)之间的混淆:
(不禁止配置,但不符合典型用例)。 => 你必须设置:hadc1.Init.ContinuousConvMode = DISABLE; 那么你的应用程序应该基本上可以工作了。 您不必在每次传输时停止 ADC 或使用棘手的定时器启动:仅 ADC 启动,然后定时器启动,仅此而已。 如果是 STM32F1 FW 包,有一个演示 ADC+DMA+timer 的例子: ...FirmwareProjectsSTM3210C_EVALExamplesADCADC_Regular_injected_groups (它可以很容易地移植到你的目标STM32F103) 一些改进建议: 你应该一半一半地管理数据缓冲区(当一半由ADC+DMA填充时,另一半由USB传输) 可以使用回调函数来完成: - HAL_ADC_ConvHalfCpltCallback() - HAL_ADC_ConvCpltCallback() 它还需要在每次传输后更新 USB 缓冲区(hcdc->TxBuffer、hcdc->TxLength)。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2635 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3610 浏览 6 评论
5988 浏览 21 评论
939浏览 4评论
1316浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
584浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1303浏览 3评论
1359浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 04:16 , Processed in 1.207933 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号