你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Dylan疾风闪电 发表于 2015-1-19 12:59 ; ?( y! {* A0 S/ k6 e: M5 e貌似72MHz时1us的计数值是9.' v: f" E! z* Q% K0 t9 I! U //(nus*HCLK/8)&0x00FFFFFF; 5 l! l' \; G& n2 z SysTick->LOAD = ((nus*HCLK)&0x07FFFFF8)>>3;
ataudio 发表于 2015-3-9 20:29 * ]5 J u- J; p我在F407上使用此函数延时,函数设置为: + I, X2 D8 Y2 Tvoid Delay_us(__IO uint32_t nTime) ' n4 [0 Y. M+ b9 L# M$ K( C# t{
意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。关注该话题即可发布文章!
systick时钟默认1/8分频了
load值从0开始计数,给load赋值需要减一。。
while (1)9 W5 \/ ` P8 U- S$ T7 K! c
{
GPIO_SetBits(GPIOC, GPIO_Pin_15);
Delay_us(200);2 i; A1 o- @ C8 h U
GPIO_ResetBits(GPIOC, GPIO_Pin_15);
Delay_us(400);+ r' C6 C1 k$ M& f
}
楼主我问一下这个用示波器看的时候高低电平是1:2的关系吗?
void Delay_us(uint32_t nTime)1 t; i4 {3 W" g
{
SysTick->VAL = 0x00;
SysTick->LOAD = 72*nTime;
SysTick->CTRL = 0x00000005;+ }' G9 Y0 o R7 ]; V. r
while(!(SysTick->CTRL&0x00010000));
SysTick->CTRL = 0x00000004;
}
以us延时为例,函数调用比宏替换会多出0.25us左右。
0 i( \: B( j: I
以下是代码:' b0 j a- K0 h' z2 W7 t
/* 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;}, F8 v# a% t( K9 M' K