启用系统定时器接口, 定时器精度有误

发布于 2025-09-09 17: 23: 35

MCU 主频设置到 240Mhz, 启用定时器, 设置 1us 定时间隔 (实际需要到 100ns 级别) , 控制 IO 口, 测量输出信号周期, 方波信号周期为 20us, 离实际想要的精度差很多, 请问怎么设置, 才能到 1us 级别
8298decc55305d0dc870f13d8b33a75. png

查看更多

关注者
0
被浏览
117
2 个回答
abcd
abcd 认证专家 3 天前
我只是个路过的老年人~

不建议设置定于 5us 的定时值, 中断的跳转以及中断函数的执行, 本身也会占用时间, 会导致结果和预期不符. ns 级别的延时只能自己用延时或者空指令来调整实现. 另外 IO 控制如果直接调用 GPIO 的接口也会导致延时增大, 接口本身执行都已经超过延时时间了, 可以考虑直接操作寄存器地址来控制 IO
.

isme
isme 认证专家 2 天前
冰镇大西瓜

GPIO 翻转慢问题, 封装一个函数, 通过 bitband 直接操作寄存器.

static void user_bitband_write (enum tls_io_name io,  u8 val) 
{
    if (io   WM_IO_PA_15) {
        tls_bitband_write (HR_GPIOB_DATA,  io - 16,  val) ; 
    }
    else{
        tls_bitband_write (HR_GPIOA_DATA,  io,  val) ; 
    }
}

ns 延时问题, 通过 NOP 指令, 让 CPU 死等.

static void delay_ns (void) 
{
    uint32_t i; 
    for  (i = 0;  i   13;  i++) 
    {
        __NOP () ; 
    }
}

撰写答案

请登录后再发布答案, 点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览