select326 发表于 2019-1-8 18:10:42

wenyangzeng 发表于 2019-1-8 16:39
让CUBEMX自动生成即可:




CubeMX不会写US延时,一直不敢用

select326 发表于 2019-1-8 18:11:17

安 发表于 2019-1-8 17:22
楼主先确定一下SetSysClock配置是否成功。

这个要怎么确定呢??指点下

wenyangzeng 发表于 2019-1-8 18:50:21

本帖最后由 wenyangzeng 于 2019-1-8 18:51 编辑

select326 发表于 2019-1-8 18:10
CubeMX不会写US延时,一直不敢用
1毫秒用HAL_Delay(1);
微秒级用__nop();

select326 发表于 2019-1-8 22:39:27

wenyangzeng 发表于 2019-1-8 18:50
1毫秒用HAL_Delay(1);
微秒级用__nop();

用了CubeMX后,确实能解决时钟配置的问题。一个NOP 延时是多少US呀?
另外,如果 想要超频,这在CubeMX是无法实现的吧?

发表于 2019-1-9 08:12:21

就按1个机器周期算就行。先算机器周期时间,延时需要多少个机器周期。

select326 发表于 2019-1-9 09:34:45

本帖最后由 select326 于 2019-1-9 09:40 编辑

安 发表于 2019-1-9 08:12
就按1个机器周期算就行。先算机器周期时间,延时需要多少个机器周期。
我查了下资料,说是一个nop 的时间就是: 1/系统时钟
照这样计算,STM32F030K6 配置时钟48M,一个nop 就是1/48000000
1秒=1000MS = 1000000 us
想要延时1US,就需要执行 48次 nop
这样计算对吗?

但是,nop 本身也是函数调用,会不会占用系统周期?或者说,这个在编译时就解决了,?

发表于 2019-1-9 09:56:43

在比较大的计时中可以忽略,但是越小越需要考虑代码所执行的周期。比如FOR循环执行需要多少个机器周期。

qiangtech 发表于 2019-1-9 10:42:09

FOR和NOP延时用在要求不高的地方还可以,如果要求高一点还是用SYSTICK和TIMER来延时比较好。还有就是下次换个频率的芯片,FOR和NOP又要重新调试。

select326 发表于 2019-1-9 18:17:22

这个迁时肯定是要精确的,不是大约。这个NOP 方案只怕还是不行。还是得考虑下使用HAL库 如何做US延时

芯领神会 发表于 2019-1-9 21:23:34

我最近也遇到了这个类似的问题,不过我是使用的LL库,使用CubeMx生成的,使用的额内部晶振,主要造成这个的原因是生成的代码里面有一个内部晶振校准的代码,屏蔽掉就好了,我是用的stm32L051的代码。你可以看看是不是有可能是相同的问题。
页: 1 [2] 3
查看完整版本: STM32F030K6T6时钟配置和延时不正确,请求帮助