找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 809|回复: 1
打印 上一主题 下一主题
收起左侧

32f407单片机滴答定时器精准延时,延时0ms

[复制链接]
跳转到指定楼层
楼主
ID:1140540 发表于 2024-12-19 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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        ;        //清空计数值
        
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:583948 发表于 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;                       // 清空计数值
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表