SysTick时钟做延时
在用SysTick时钟做延时程序时,我在F103的板子是用SysTick_Config()没问题,但是在L151的板子上发现堵这个函数这里了,但是我看了这个函数里面也没有while,怎么就阻塞了,SysTick时钟是Cortex-M3都有的吧?然后我在SysTick_Config()里面定位,发现是堵在这一步了SysTick->CTRL= SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk |SysTick_CTRL_ENABLE_Msk;
不懂为什么这一步不能执行,如果说没有这个寄存器的话,上面的SysTick->LOAD= ticks - 1; 是可以执行的,问题到底出在哪里?
附上程序图:
用HAL_Delay(0.1)试下 发现问题了,是SysTick->LOAD 的值设置的太小了,我改成64(SysTick_Config(64))就可以了,现在是2us中断一次,SysTick->LOAD还有最小值??? 本帖最后由 zjczm 于 2019-1-8 12:05 编辑
那就是你中断太快了。太快的话,别的事情没法干了。
微秒的延时,不如单独搞个定时器来实现吧。
systick主要是用来做时间基准的,一般就是1ms延时一次。尽管可以配置。也是建议你用专门的定时器,算一下你一个任务到底要多久。感觉32MHz要定us定时,其实处理不了啥任务。 STM32有很多定时器,建议用外设定时器做timerx。 systic 通常做系统节拍用的,功能也比较单一,一般都不建议用户用来定时。 另外你的定时频率快,考虑用定时器的某些硬件功能。 否则中断进出消耗时间,再加上代码执行时间,根本做不了多少事情,甚至会影响其他代码执行的。 外设定时器在函数库中有很多例程,照着用也不复杂的:) zjczm 发表于 2019-1-8 12:03
那就是你中断太快了。太快的话,别的事情没法干了。
微秒的延时,不如单独搞个定时器来实现吧。
我搞了个定时器,没法微秒定时啊,只能搞成毫秒,不然一直进定时器中断 watershade 发表于 2019-1-8 12:15
systick主要是用来做时间基准的,一般就是1ms延时一次。尽管可以配置。也是建议你用专门的定时器,算一下你 ...
我只是为了写个能进行微秒延时的函数,不关系其他的任务 butterflyspring 发表于 2019-1-8 12:24
STM32有很多定时器,建议用外设定时器做timerx。 systic 通常做系统节拍用的,功能也比较单一,一般都不建 ...
定时器能进行微秒计时吗,怎么做,我配置的只能最小是毫秒 五哥1 发表于 2019-1-8 19:21
用HAL_Delay(0.1)试下
你如果愿意回答请好好回答。不要通过灌水的方式来赚积分。谢谢
HAL_Delay的函数原型是:void HAL_Delay (__IO uint32_t Delay)
页:
[1]
2