本帖最后由 ckjjj 于 2020-9-7 14:22 编辑
我是想实现多路脉冲+编码器接收功能。因为是小白,之前经过了很多考虑,包括IO翻转,或者定时器比较输出,都考虑过,但存在频繁中断的情况,或者不能单独改变每一路的频率,于是用DMA+PWM的方式发脉冲。主任务1ms会发一个脉冲数的数据,所以我需要在1ms内把脉冲发完才行。于是我就用DMA+PWM来。我的理解上,DMA用来控制脉冲个数,TIM负责发送PWM,于是脉冲个数就是DMA长度,这样,当DMA传数据直到DMA长度为0,产生中断把TIM-CCRx设置为0,停止定时器的发PWM,然后清除DMA中断标志。现在呢,因为需要1ms就要把脉冲发完,并且占空比设置为50%,所以,我在每次发送脉冲之前,分别设置TIM的PSC,ARR,和CCR,通过关系得到PSC,通过关系,算出ARR,然后知道ARR后就能知道设置比较值CCR,然后我设置好DMA长度后就开启DMA,这样就开始传数据。 然后呢,里面有几个函数可能没说清。TIMx_Dma_Pwm_Output_Init用来初始化PWM功能;TIMx_Dma_Pwm_Output用来输出PWM;Axis_Pwm_Mode_Cfg因为是用脉冲+方向的方式控制,所以用来配置脉冲的高或者低电平有效,以及方向高低电平有效;最主要就是初始化和输出PWM这两个函数,所以模式可以不用太注意。
|