通过TIM驱动DMA读取GPIO输入采样数字信号边缘处异常

你好,

我使用CH32V305FBP6通过TIM驱动DMA读取GPIOB->INDR寄存器并存放于缓冲区中,然后通过USBHS把PB15的数据发送到电脑显示波形。发现在上升沿与下降沿处会在采样频率大概大于1MHz(我只测试了1,2,3MHz频率有问题,低于1MHz的没有问题)的时候出现不正常。但相同的信号(PB15上的信号)我使用示波器与逻辑分析仪(采样500MHz)测量都是很干净的信号。

1728196828638890.png

上图是一个100Hz,50%占空比的信号的其中一个脉冲。所有脉冲都是这个样子。


// 使用PB15作为信号输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOB, &GPIO_InitStructure );


请问是需要特殊设置吗?

把DMA改为正常模式,然后在完成中断中把数据拷贝到缓冲区,其他中断操作缓冲区数据就解决这个问题了。


只有登录才能回复,可以选择微信账号登录