你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Dylan疾风闪电 发表于 2015-1-19 12:59 / h6 ^4 w* `5 ]/ a1 x; \貌似72MHz时1us的计数值是9. P: Y+ n4 b/ S8 E& d//(nus*HCLK/8)&0x00FFFFFF; 1 ~+ |) C8 Q/ o) Z- O SysTick->LOAD = ((nus*HCLK)&0x07FFFFF8)>>3;
ataudio 发表于 2015-3-9 20:29 . C+ o8 c2 M$ {, z8 _ r. o我在F407上使用此函数延时,函数设置为: 6 r7 K2 f- E$ {" I6 Zvoid Delay_us(__IO uint32_t nTime) 2 V/ M4 J1 R7 W; H P* e$ a% q+ G{
意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。关注该话题即可发布文章!
systick时钟默认1/8分频了
load值从0开始计数,给load赋值需要减一。。
while (1)" s( C0 X- V) `8 {
{6 |$ X4 n; U. \1 v& |! O7 v4 f
GPIO_SetBits(GPIOC, GPIO_Pin_15);
Delay_us(200);
GPIO_ResetBits(GPIOC, GPIO_Pin_15);) m/ o( M7 v) S' @6 e
Delay_us(400);
}& z5 a8 G! N6 t" k% [' x, N
楼主我问一下这个用示波器看的时候高低电平是1:2的关系吗?
void Delay_us(uint32_t nTime)
{
SysTick->VAL = 0x00;1 I9 R7 H) E) q I
SysTick->LOAD = 72*nTime;
SysTick->CTRL = 0x00000005;4 E# [: f4 G; M
while(!(SysTick->CTRL&0x00010000));
SysTick->CTRL = 0x00000004;# ?6 B3 }2 Q7 m& f0 W9 i
}3 z2 K* s6 ?# a6 ~; X
以us延时为例,函数调用比宏替换会多出0.25us左右。$ B5 C: U* X* y0 T
5 ?5 \2 B. k! [" ^" I
以下是代码:
/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */# d) G, f! v, S# N3 z8 B7 K. F& _* ~ s
#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;}: d G6 y# h( q5 x( K4 ~. ^) b