• 已解决 72750 个问题
  • 已帮助 5976 位优秀工程师

STM32F103关于定时器捕获事件触发ADC问题

江湖渔民 2014-07-18 浏览量:13275
本来是用EXTI11事件来触发ADC转换的,但是会有杂波干扰,使AD转换不稳定。所以就想到使用STM32上的定时器通道的数字滤波功能。用STM32的TIM1的数字滤波器来滤波输入触发信号的杂波的,结果TIM1的捕获触发一直不能触发ADC,让我十分郁闷!希望大神们帮着看看是怎么回事。。。(我使用EXTI11线的事件是能触发ADC,ADC也能触发DMA进行正常存储的。)
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:10
  • 我来给你一个详细的回复吧:

    1、首先你对定时器触发ADC的方式理解有误,定时器触发ADC转换是通过比较输出通道不假,但不是输入捕获通道,而是输出比较通道,你现在的配置代码南辕北辙了,所以是无法实现的。

    2、下面给你详细解释一下定时器触发ADC的过程:

    请看这个图:

    这里有6个定时器通道可以触发ADC,你用的是定时器1,CC1通道进行触发,这个要使用比较输出模式。

    再看下面这个图:

    这个是定时器的模块图,左边是作为捕获引脚,输入到定时器,右边才是输出,你用左边的输入通道,信号会进入定时器,不可能到ADC里面。

    你的程序:

    所以这样配置是不行的。需要把TTM_CC1改成比较输出配置才可以。

    当外部触发信号被选为ADC规则或注入转换时,只有它的上升沿可以启动转换。这个很重要。要实现比较通道TIMER_CC1输出一个上升沿,只有把它配置在PWM模式下才有效。

    所以你配置的时候,要采用这样的配置。

    3   在ADC软件代码中,要把ADC 转换模式配置为单次转换模式,这样通过定时时间,定时器产生上升沿来触发ADC。

    官网提供了定时器触发ADC的例程,你可以参考一下看看。


    题外话:看到楼主的代码通篇都是寄存器,你让ST那些辛辛苦苦开发库函数代码的人员情以何堪!。STM32不是51,内部寄存器众多,采用寄存器方式开发代码,工作量大,移植也不方便,对于复杂大型程序(和别人合作更麻烦)。看到你采用了正点原子的架构,可能受到些影响,但长期来看,效果不佳。建议还是用库函数方式开发STM32哦!


  • 这是工程文件。。。折磨我快一个星期了。。。各位大侠行行好!   

    [@小雨儿:10551]

  • T1_TRGO 触发  ADC1 注入转换, 参考一下
    ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_TRGO);

     


  • 嗯,这个检查了一下,我的设置也是没问题的!这个函数就是设置ADC1是由外部T1的TRGO事件触发。

    我的工程中的adc.c文件的第29行 “ADC1->CR2&=~(7<<17);   ”  是同样的效果(不过是选择TIM1_CH1的捕获/比较事件作为触发)

  • 首先你要搞清楚几点:

    1.为什么TIM1的捕获触发一直不能触发ADC ?

    2.你单独调试TIM1捕获触发有什么问题么?

    3.你的ADC采集有什么问题么?能正常采集,正常退出么?


    个人建议:

    1.如果以上都没有问题,那么说明你的程序在整合的时候出了问题,这个就要靠调试了。

    2.可以先设置断点,在你捕获ADC之前和之后都设置一个断点,先全速运行,看看是否可以顺利通过。如果不能说明你的程序死在了某个地方。

    3.如果以上都没有问题,那么就是你的配置问题了。

    以上仅仅是提供了方法,代码没有看。希望对你有帮助

  • 由于这个运行了之后就是靠硬件直接触发了(我构建了一个TIM1_CH1->ADC->DMA->FSMC的硬件触发通道,触发时没有CPU参与),所以在软件上基本仿真不了,我都是下载到板子上看的!(我之前的使用EXTI11作为触发源的程序软件仿真的时候居然连DMA都没有触发,而直接下载到板子上是能正常运行的。所以,软件仿真也是靠不住。。。)

  • 好像不会啊  比如你外部中断出发,你可以用一个导线来短一下 就可以触发啊

  • 太感谢了!!!!!!这么多感叹号只能代表我的心情!

    困扰了我一个星期了,原来基本方向就错了。。。版主辛苦了!

    另外,其实我也是刚开始接触ARM想着先学寄存器版本对cortex-M3架构多些了解,方便以后能对同架构的芯片上手快点。不过现在也觉得后悔的要死,因为基本上没人看我的代码,而且我看别人的代码也要一个函数一个函数的进去看参数设置。。。

    近期也是准备重新开始学习库函数的开发方式!版主就是我的榜样啊!寄存器库函数样样精通~~~

  • 额。。。我点评分点错了!点到自己的回复上了!额度也用完了,嗯嗯,明天帮你补上。。。太感谢了!好人加油!

  • 呵呵,不客气哦,学STM32最好的方法是看 《参考手册》《数据手册》《官方固件库开发指南》及官网发布的代码库。网上大部分开发板及教材都是参考官网的内容修改的。刚接触,最好看原始的东西比较好

STM32F103关于定时器捕获事件触发ADC问题