在用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的函数原型是:void HAL_Delay (__IO uint32_t Delay)
我尝试过用HAL_Delay(0.15)来代替正点原子程序里Delay(150us)的延时,并且成功把标准库的程序改成了HAL库的程序,你有测试过吗?你如何确定这个是灌水?别死搬教条,实践是检验真理的唯一标准。
点评
兄弟,首先我道个歉。应该和你联系一下,先讨论一下再说你是不是灌水。Whatever,咱就说说这是不是死板和教条。如果你非要用HAL_Delay,那最好的办法是你再重写这个函数,否则按照C语言语法和编译原则你输入的Doubl或float类型回被强制转换成整形。0.15会变成0.但是如果你非要争论会不会产生延时。我想会的。毕竟你执行了几句话,但是延时不可能太大的。而且也不是你想要的150us延时。(实际上这里你写的0.15默认是double类型)
否则按照函数的内容,怎么可能实现?
不知道你有没有WT588D的语音模块,给你个程序来测下。
咱们讨论的是这个funtion,怎么扯到模块上了?