• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

定时器能否用DMA方式控制任意GPIO输出PWM?

FEItwo 2019-05-15 浏览量:1435
用定时器2的通道1的PWM功能,但不产生CH1的实际输出。而是在定时器2的更新回调函数和比较回调函数里分别置高/置低指定的GPIO引脚。
后来发现,有can接收中断时,输出的pwm波形有断续,造成外接的无源蜂鸣器响声断续。
想把定时器2的抢占中断优先级调到最高,但又担心影响can数据接收。

有没有办法通过DMA方式在任意GPIO引脚产生PWM波?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:5
  • 如果你的主控是STM32或者LPC系列的话不行,他们的定时器PWM只能用包含定时器通道的管脚输出PWM。如果你用PIC24 70MHz的,或者PIC32是可以的,他们的PWM输出可以重映射到绝大多数GPIO.

  • stm32的pwm不是所有io都可以映射的,如果用定时中断肯定会收到影响,不过你可以把dma绑定can是可以的,这样不影响接收,接收完了会有dma中断通知你

  • 只有定时器可以配置成PWM,或是使用GPIO的方式,但是DMA只是用于数据传输的,所以,不可以控制GPIO的

  • 1、CAN数据接收后直接放在数组中,然后退出中断,主函数再处理,快进快出

    2、TIM2产生DMA传输指令,然后将数据更新到输出寄存器(这样做没有意义,传输受CAN中断影响)

    3、解决方法就是,降低TIM2中断执行时间,调至最高优先级,快进快出不影响CAN中断执行

  • CAN接收中断应该在很短的时间内能退出,将CAN中断里面的业务尽可能减少试一下

    然后这个任意GPIO是实现不了的,只有硬件上与定时器有关联的才行

相关问题

问题达人换一批

定时器能否用DMA方式控制任意GPIO输出PWM?