CH565 的TMR2发单个PWM脉冲的问题

在CH565使用时,需要一个IO在收到信号上升沿后中断,然后立刻用TMR2发一个PWM脉冲,

但是发现TMR2的输出有很大的延迟,测试代码如下

    //使能PB3 TMR2 LDON 配置
    GPIOPinRemap(ENABLE,RB_PIN_TMR2);  //使能TMR2重映射功能 PB3
    GPIOB_ResetBits(GPIO_Pin_3);
    GPIOB_ModeCfg(GPIO_Pin_3,GPIO_Slowascent_PP_8mA);
    while(1)
    {
        GPIOA_InverseBits(GPIO_Pin_9); // IO反转,用于模拟显示启动信号
        TMR2_PWMInit( high_on_low , PWM_Times_1 );
        TMR2_PWMCycleCfg(12000); // PWM周期 12000/120M = 100us
        TMR2_PWMActDataWidth(12000); // PWM占空比 100%
        TMR2_PWMActDataWidth(0); // 只发一个脉冲
        mDelaymS(1); // 测试间隔1ms
    }

示波器显示如下

IMG_20230610_154754.jpg


为什么TMR2的输出信号会滞后PA9那么大?试过多个周期数值,滞后正好是一个TMR2周期。

代码里没有任何延迟语句,这个延迟太大了,如何消除这个延迟



可以使用定时器功能,在IO中断服务中直接拉高输出引脚,然后启动定时器,定时时长为脉宽,在定时器中断服务中拉低这个引脚。


需求是在IO上升沿来时,发一个指定宽度的脉冲即可,

这个脉冲高电平的宽度有可能会很小,甚至小到10ns,

如果用定时器延时来停止脉冲,定时器计数值刚开始就会中断停止,

请问有没有其他方法避开这个延迟的问题?例如TMR2初始化时有没有什么办法



您好

您看可不可以在120M主频下,检测到IO上升沿时,这样翻转IO可以到12ns宽度。中间增加一个__NOP();会大约增加8ns的高电平宽度。

image.png


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