你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
QianFan 发表于 2015-1-11 09:40 肯定能延时到1us啊,要么使用定时器延时,要么使用软件延时,但是软件延时不是很精确。 定时器延时有两种方 ...
duanks 发表于 2015-1-11 09:51 你的系统一直在进中断,微妙级的延时用软件延时吧,想精确的话用逻辑分析仪慢慢调 ...
feiante 发表于 2015-1-10 23:19 是不是计数溢出了?
大秦正声 发表于 2015-1-11 10:59 用的外部晶振? 延时6us呢?
聿怀嘿嘿 发表于 2015-1-11 10:36 谢谢!不过第二种方法具体要怎样实现呢?是设定好后不断查询?
xyc2690 发表于 2015-1-11 13:32 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks > SYSTICK_MAXCOUNT) return ( ...
xyc2690 发表于 2015-1-11 18:09 现在调通过了没?我的板子坏了,没法调试。。。 你用的库函数,延时1us需要用到systic中断,是不是在别的中 ...
谢谢!不过第二种方法具体要怎样实现呢?是设定好后不断查询?
这是最后的办法、因为这个要根据不同的时钟频率来调整、我的目的是写一个通用的函数,这样方便一点
应该不会把、10us能正常运行、1us应该不会溢出
延时6us呢?
确实是这样、用的内部晶振、从10us到1us中间某一点开始就不正常了
还是while
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SYSTICK_MAXCOUNT) return (1); /* Reload value impossible */
SysTick->LOAD = (ticks & SYSTICK_MAXCOUNT) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = (0x00); /* Load the SysTick Counter Value */
SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | (1<<SYSTICK_ENABLE) | (1<<SYSTICK_TICKINT); /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}你看看这个,SYSTICK_MAXCOUNT 是多少,超过的话就一直while(1)了。
定时10us,也就是tick=SystemCoreClock / 100000,定时器正常工作、说明SystemCoreClock / 100000《=SYSTICK_MAXCOUNT;那么1us就是tick=SystemCoreClock / 1000000肯定要小于SYSTICK_MAXCOUNT
你用的库函数,延时1us需要用到systic中断,是不是在别的中断里调用这个延时?
试试用查询方式写呢。
嗯、这两天考完试我再调一调,
中断服务函数一定要尽量短才行
如果要精确延时的话, 还是考虑RTC吧