你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Dylan疾风闪电 发表于 2015-1-19 12:597 h9 {) _$ t) `$ o) N* u# a 貌似72MHz时1us的计数值是9. : J3 |1 {8 t5 b9 p N//(nus*HCLK/8)&0x00FFFFFF; & L: W+ ~8 b* \" Q SysTick->LOAD = ((nus*HCLK)&0x07FFFFF8)>>3;
ataudio 发表于 2015-3-9 20:295 S1 _7 L% A% M* l8 w+ Z 我在F407上使用此函数延时,函数设置为:' U: V: e" v. L6 }9 n X) f% _6 z void Delay_us(__IO uint32_t nTime) 6 t7 f6 E% v' c& P{
systick时钟默认1/8分频了
load值从0开始计数,给load赋值需要减一。。
while (1)* K ?- n& K' U0 }( |9 r9 h6 T$ e
{- x$ Z ]4 Y* `$ I
GPIO_SetBits(GPIOC, GPIO_Pin_15);( l; E- s4 T- V; E( I0 s- x; \
Delay_us(200);8 Z3 c4 g0 i/ Y# U9 g* W: R7 ~
GPIO_ResetBits(GPIOC, GPIO_Pin_15);% X3 i: P1 A8 Y9 M( F2 @3 F
Delay_us(400); Q: y6 B' T3 O+ ^) ]
}0 u, m1 g2 {- }# V; B. T
楼主我问一下这个用示波器看的时候高低电平是1:2的关系吗?
void Delay_us(uint32_t nTime)8 J& e& U3 r1 H6 }" M& N
{
SysTick->VAL = 0x00;: @6 a l" v4 q5 S
SysTick->LOAD = 72*nTime;) I- r+ v5 o9 `% Z
SysTick->CTRL = 0x00000005;6 W- r* Z0 F! n( M7 P5 E; e( n( Y" R
while(!(SysTick->CTRL&0x00010000));5 d) e2 M7 H `; B, t3 D
SysTick->CTRL = 0x00000004;
}/ r. Q% Y# N) t3 u; z: m
以us延时为例,函数调用比宏替换会多出0.25us左右。
以下是代码:& i% q9 T" [. }
/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */# k( u# H0 T4 j" O) L) [8 H/ j! T
#define DELAY_US(nTime) {SysTick->LOAD = 72 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}* R) ]+ y/ N4 `% @1 L+ ^7 S* @% O
#define DELAY_MS(nTime) {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}0 Q0 I0 M' \) u# e9 v, ]