目标:对2个源信号分别进行2种采样率的采样,一个96k,另一个6.4k采样率;
单片机型号:STM32F103C8,48脚,内部主时钟64M(8M倍频获得).
说明:采样由一个外部方波信号触发(周期20ms),即每个20ms有一个外部方波信号到来触发采样。
实现考虑:如96k采样率的通道,即20ms内要采样1920点,若采用定时器中断采样的方式,则20ms内要产生1920次中断,虽然每次定时中断进入只是采样,清中断等几条语句,需要几个cycle就可完成,但20ms内也要消耗5000多个
cycles,我希望能把这5000个cycles节省下来用于其它的计算,在硬汉的建议下参考了V4的示波器采集部分代码,但实现一直有问题;另一种方案就是传统的定时器中断采样方式,这个已实现,前几天遇到的问题:有一个外脉冲触发,LED就一直交替点亮,这个问题已解决,原因是外中断函数中没有及时清外中断。
问题描述:我考虑了二种方案,但第一种一直有问题,可能对定时器的PWM方式理解不深,这个请硬汉能不是仔细讲解下,CC3输出会自动触发A/D采样?那CC2是否也可以?遇到的问题如下:
1、
用这条语句时,LED不会交替点亮,[img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\2769266387\QQ\WinTemp\RichOle\J)[XC3WG1[G`_CO@``CPWLY.png[/img][img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\2769266387\QQ\WinTemp\RichOle\J)[XC3WG1[G`_CO@``CPWLY.png[/img][img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\2769266387\QQ\WinTemp\RichOle\J)[XC3WG1[G`_CO@``CPWLY.png[/img][img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\2769266387\QQ\WinTemp\RichOle\J)[XC3WG1[G`_CO@``CPWLY.png[/img][img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\2769266387\QQ\WinTemp\RichOle\J)[XC3WG1[G`_CO@``CPWLY.png[/img][img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\2769266387\QQ\WinTemp\RichOle\J)[XC3WG1[G`_CO@``CPWLY.png[/img][img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\2769266387\QQ\WinTemp\RichOle\J)[XC3WG1[G`_CO@``CPWLY.png[/img]当设定为DMA_Mode_Circular模式时会交替点亮?这是怎么回事,和你的不一样?
2、你的定时器是自动触发采样并送往DMA中吗?
3、你这种采样方式必须用PWM方式吗?
4、CC3输出触发A/D采样,那么选用CC2或cc1是否同样可以?
另一种方案已实现。
谢谢!主要我对定时器的高级应用不是太了解,前几天看了些,由于现在项目比较急,用了方案2采集方式,但还是想把第1中方案实现了,请指点,现把程序代码附上,能不能帮我看看问题在哪?