新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2019-6-16
- 在线时间
- 4 小时
|
1金钱
本帖最后由 xiaohuangyi 于 2019-7-3 00:11 编辑
delay.c 也移植了,在task 里面while(1) delay_us(100) 后,port 反转一下,软件仿真看,真实delay只有67us 这个样子,感觉差了三分之二,大概会是什么原因造成的呢?
- while(1){
- delay_us(100);
- MOTOR_IN0=~MOTOR_IN0;
- }
复制代码- void delay_us(u32 nus)
- {
- u32 ticks;
- u32 told,tnow,tcnt=0;
- u32 reload=SysTick->LOAD; //LOAD的值
- ticks=nus*fac_us; //需要的节拍数
- //ticks=nus*100; //需要的节拍数
- told=SysTick->VAL; //刚进入时的计数器值
- while(1)
- {
- tnow=SysTick->VAL;
- if(tnow!=told)
- {
- if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了.
- else tcnt+=reload-tnow+told;
- told=tnow;
- if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出.
- }
- };
- }
复制代码
|
|