cxtarm 发表于 2015-1-11 11:16:21

定时到1us没问题,如果你中断处理函数太长可能就有问题

聿怀嘿嘿 发表于 2015-1-11 11:25:20

大秦正声 发表于 2015-1-11 10:59
用的外部晶振?
延时6us呢?

确实是这样、用的内部晶振、从10us到1us中间某一点开始就不正常了

QianFan 发表于 2015-1-11 12:51:28

聿怀嘿嘿 发表于 2015-1-11 10:36
谢谢!不过第二种方法具体要怎样实现呢?是设定好后不断查询?

还是while

xyc2690 发表于 2015-1-11 13:32:23

本帖最后由 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)了。

聿怀嘿嘿 发表于 2015-1-11 17:04:18

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

木易-357428 发表于 2015-1-11 17:32:27

你仿真一下看看tick设置的具体是多少,是不是设置为零了,根本就不会工作的。

xyc2690 发表于 2015-1-11 18:09:51

现在调通过了没?我的板子坏了,没法调试。。。
你用的库函数,延时1us需要用到systic中断,是不是在别的中断里调用这个延时?
试试用查询方式写呢。

聿怀嘿嘿 发表于 2015-1-12 12:07:50

xyc2690 发表于 2015-1-11 18:09
现在调通过了没?我的板子坏了,没法调试。。。
你用的库函数,延时1us需要用到systic中断,是不是在别的中 ...

嗯、这两天考完试我再调一调,

火蒂树 发表于 2015-1-12 14:42:44

1us作为tick可能太短了
中断服务函数一定要尽量短才行
如果要精确延时的话, 还是考虑RTC吧

sourire 发表于 2017-3-8 20:50:01

那个数有上限 只能到10us
页: 1 2 [3] 4
查看完整版本: stm32的systick时钟没法定时到1us?