你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Dylan疾风闪电 发表于 2015-1-19 12:59 貌似72MHz时1us的计数值是9. //(nus*HCLK/8)&0x00FFFFFF; SysTick->LOAD = ((nus*HCLK)&0x07FFFFF8)>>3;
ataudio 发表于 2015-3-9 20:29 我在F407上使用此函数延时,函数设置为: void Delay_us(__IO uint32_t nTime) {
systick时钟默认1/8分频了
load值从0开始计数,给load赋值需要减一。。
while (1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_15);
Delay_us(200);
GPIO_ResetBits(GPIOC, GPIO_Pin_15);
Delay_us(400);
}
楼主我问一下这个用示波器看的时候高低电平是1:2的关系吗?
void Delay_us(uint32_t nTime)
{
SysTick->VAL = 0x00;
SysTick->LOAD = 72*nTime;
SysTick->CTRL = 0x00000005;
while(!(SysTick->CTRL&0x00010000));
SysTick->CTRL = 0x00000004;
}
以us延时为例,函数调用比宏替换会多出0.25us左右。
以下是代码:
/* 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;}