你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
安 发表于 2019-9-8 20:36 for循环或者定时器。
mylovemcu 发表于 2019-9-9 08:02 for循环或者滴答定时器 for循环也可以出500ns 但是容易被其他中断打断 不稳定
STM32隐藏
5.18活动板子会不会是STM32L4呢
STM32 CUBE软件中找不到STM32L4系列单片机
Your UAT Feedback is needed within today.
应用
AAA
tiwen
BBBB
aaa
2222
每次要延时保证从0开始计数,TIMx->CNT =0,使能定时器,
while(TIMx->CNT<4)判断计数值达到4,就是500ns了,再关闭定时器,下次要延时再使能
您好 请问定时器具体怎样能够实现 可以大概跟我说一下么
我用定时器更新中断写过一次 由于进出中断加中断处理程序已经大于500ns 没能成功 请问可以怎样实现呢
下面是我使用中断的代码
定时器初始化为TIM2_Init(42-1,1-1); //500ns
delay使用为delay_x500ns(1);
for循环也可以出500ns 但是容易被其他中断打断 不稳定
配置滴答定时器可以实现ns级延时
void delay_init(u8 SYSCLK) //72
{
SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 STCLK = HCLK/8= 21M/s
fac_us=SYSCLK/8;// SYSCLK为168,所以fac_us为21
fac_ms=(u16)fac_us*1000;
}
//nus最小是50 时钟是21MHz 所以时钟最小分割是47ns
void delay_us(u32 ns)
{
u32 temp;
SysTick->LOAD=ns*fac_us/1000; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
哇~多谢~