定时到1us没问题,如果你中断处理函数太长可能就有问题
大秦正声 发表于 2015-1-11 10:59
用的外部晶振?
延时6us呢?
确实是这样、用的内部晶振、从10us到1us中间某一点开始就不正常了
聿怀嘿嘿 发表于 2015-1-11 10:36
谢谢!不过第二种方法具体要怎样实现呢?是设定好后不断查询?
还是while
本帖最后由 xyc2690 于 2015-1-11 13:33 编辑
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)了。
xyc2690 发表于 2015-1-11 13:32
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SYSTICK_MAXCOUNT)return ( ...
定时10us,也就是tick=SystemCoreClock / 100000,定时器正常工作、说明SystemCoreClock / 100000《=SYSTICK_MAXCOUNT;那么1us就是tick=SystemCoreClock / 1000000肯定要小于SYSTICK_MAXCOUNT
你仿真一下看看tick设置的具体是多少,是不是设置为零了,根本就不会工作的。
现在调通过了没?我的板子坏了,没法调试。。。
你用的库函数,延时1us需要用到systic中断,是不是在别的中断里调用这个延时?
试试用查询方式写呢。
xyc2690 发表于 2015-1-11 18:09
现在调通过了没?我的板子坏了,没法调试。。。
你用的库函数,延时1us需要用到systic中断,是不是在别的中 ...
嗯、这两天考完试我再调一调,
1us作为tick可能太短了
中断服务函数一定要尽量短才行
如果要精确延时的话, 还是考虑RTC吧
那个数有上限 只能到10us