MCU 主频设置到240Mhz, 启用定时器,设置1us定时间隔(实际需要到100ns级别),控制IO口,测量输出信号周期,方波信号周期为20us,离实际想要的精度差很多,请问怎么设置,才能到1us级别
不建议设置定于5us的定时值,中断的跳转以及中断函数的执行,本身也会占用时间,会导致结果和预期不符。ns级别的延时只能自己用延时或者空指令来调整实现。另外IO控制如果直接调用GPIO的接口也会导致延时增大,接口本身执行都已经超过延时时间了,可以考虑直接操作寄存器地址来控制IO
。
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();
}
}
ns级别的延时只能自己用延时或者空指令来调整实现,这个需要咋实现啊,优点不理解