你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Dylan疾风闪电 发表于 2015-1-19 12:59$ t9 d7 S I- j8 W h9 \9 b! E! z 貌似72MHz时1us的计数值是9./ ~% |4 R( b, F: S k& }; u //(nus*HCLK/8)&0x00FFFFFF; 9 a8 s+ A- V4 H- G SysTick->LOAD = ((nus*HCLK)&0x07FFFFF8)>>3;
ataudio 发表于 2015-3-9 20:29 1 g% k( |. R) W: F% x# a; B( r, s) @0 |我在F407上使用此函数延时,函数设置为: ' w; H( v- M, Fvoid Delay_us(__IO uint32_t nTime): I: H+ Z4 q5 @& O {
systick时钟默认1/8分频了
load值从0开始计数,给load赋值需要减一。。
while (1)! b b+ l8 t7 y+ H q
{
GPIO_SetBits(GPIOC, GPIO_Pin_15);) Y" r3 w* W$ C# `" Z
Delay_us(200);
GPIO_ResetBits(GPIOC, GPIO_Pin_15);5 W! |" q/ |8 d) d, k
Delay_us(400);/ W' I1 U: m- g$ g+ W; j" }
}
楼主我问一下这个用示波器看的时候高低电平是1:2的关系吗?
void Delay_us(uint32_t nTime)2 J L, r3 y6 N% O3 Z
{4 U9 E0 J# a, F' O' T* u6 ?' z
SysTick->VAL = 0x00;$ `$ p: R# l$ @: ^
SysTick->LOAD = 72*nTime;
SysTick->CTRL = 0x00000005;( ]9 o0 D: ~+ m& s& l* e7 c, Q
while(!(SysTick->CTRL&0x00010000));
SysTick->CTRL = 0x00000004;
}2 [4 R$ f1 [0 s! w" c
以us延时为例,函数调用比宏替换会多出0.25us左右。
) W9 x H; D! _$ p3 Y
以下是代码:
/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */
#define DELAY_US(nTime) {SysTick->LOAD = 72 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}" u, |. i3 x( N( o6 P+ s# q: Z
#define DELAY_MS(nTime) {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}; T9 d# L0 c9 \1 i i5 ?