我来给你一个详细的回复吧:
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哦!