你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Dylan疾风闪电 发表于 2015-1-19 12:59 # K8 l! s1 [0 o3 u6 W5 ~$ |6 R貌似72MHz时1us的计数值是9. / L% m: S+ X" R' M9 Y2 _//(nus*HCLK/8)&0x00FFFFFF; . |/ g' A6 K8 D N SysTick->LOAD = ((nus*HCLK)&0x07FFFFF8)>>3;
ataudio 发表于 2015-3-9 20:29# d, f$ q! M2 w9 w 我在F407上使用此函数延时,函数设置为: 5 v8 _' R0 V; c5 M- b/ J" gvoid Delay_us(__IO uint32_t nTime) , Z+ n1 v0 n0 I{
systick时钟默认1/8分频了
load值从0开始计数,给load赋值需要减一。。
while (1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_15);* `6 p1 @& b- @1 E' m9 i5 G5 V1 p
Delay_us(200);
GPIO_ResetBits(GPIOC, GPIO_Pin_15);- G# e: ^) }: n2 K8 ]: a: G
Delay_us(400);2 c7 V8 L% z6 a- ~: }
}
楼主我问一下这个用示波器看的时候高低电平是1:2的关系吗?
void Delay_us(uint32_t nTime)
{
SysTick->VAL = 0x00;. A. o$ a0 @# \/ U
SysTick->LOAD = 72*nTime;
SysTick->CTRL = 0x00000005;, D, f) {/ U7 ^* I7 \/ |+ }
while(!(SysTick->CTRL&0x00010000));1 ^, @+ }, v! R, P [3 Q+ r& L/ v& U
SysTick->CTRL = 0x00000004; S: `6 f1 u8 Y# J5 N
}2 F$ X3 p, R$ ]) u2 v G+ P6 X% b
以us延时为例,函数调用比宏替换会多出0.25us左右。' Y4 [1 v* Z1 B! y
以下是代码:% ^! q- @3 Y" R; L. t; e! J
/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */
#define DELAY_US(nTime) {SysTick->LOAD = 72 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}
#define DELAY_MS(nTime) {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;} _# ^- J- u% x1 o