标题: 32f407单片机滴答定时器精准延时,延时0ms [打印本页]

作者: luzhenwei    时间: 2024-12-19 21:48
标题: 32f407单片机滴答定时器精准延时,延时0ms
32f407单片机滴答定时器精准延时,延时0ms,写进去后,芯片一通电就发热,热到一定程度就崩溃了,复位也没用,

int main()
{
Delay_ms(0);
GPIO_ToggleBits(GPIOF,GPIO_Pin_10);
}

void Delay_ms(uint32_t nTime)
{
       uint_t delay_ms=21000;
       SysTick->LOAD = nTime*delay_ms ;   //重装载寄存器,最大计数值
        SysTick->VAL = 0x00        ;                                //清空计数值
        SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; // 开启倒数
        
        do
        {
                temp=SysTick->CTRL;
               
        }while((temp&0x01)&& !(temp & (1<<16))); //等待倒数到0为止
        
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk ; // 关闭计数器
        SysTick->VAL = 0x00        ;        //清空计数值
        
}




作者: zpwgf    时间: 2024-12-20 09:23
int main() {
    // 假设你不需要延时
    GPIO_ToggleBits(GPIOF, GPIO_Pin_10);
    while (1) {
        // 主循环
    }
}

void Delay_ms(uint32_t nTime) {
    if (nTime == 0) return; // 直接返回,不执行任何延时

    uint32_t delay_ms = 21000; // 确保这个值适合你的系统时钟
    SysTick->LOAD = nTime * delay_ms;   // 重装载寄存器
    SysTick->VAL = 0x00;               // 清空计数值
    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; // 开启倒数

    // 等待SysTick计数器达到零
    while ((SysTick->CTRL & SysTick_CTRL_ENABLE_Msk) && !(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));

    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭计数器
    SysTick->VAL = 0x00;                       // 清空计数值
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1