找回密码
 立即注册

QQ登录

只需一步,快速开始

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

HC32F460单片机 嘀嗒延时问题

[复制链接]
跳转到指定楼层
楼主
ID:424805 发表于 2024-5-8 14:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用库3.2.0时,自己的延时函数会造成芯片跑飞,串口漏打印。我测试以前库1.21时,发现没问题,具体原因不知道为什么。库2.2.0也会造成这样的问题。下面给出了嘀嗒延时初始化和毫秒延时函数,我在STM32F1的HAL库使用也没问题。
void delay_init(void)

{

    SysTick->LOAD = (uint32_t)(SystemCoreClock / 1000); // 设置重装载值1ms

    NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); // 设置中断

    SysTick->VAL = 0UL; // 计数值清零

    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

                    SysTick_CTRL_TICKINT_Msk |

                    SysTick_CTRL_ENABLE_Msk; // 选择系统时钟,使能中断、时钟
}

void delay_ms(uint32_t u32Cnt)
{
    uint32_t ticks;
    uint32_t told, tnow, tcnt = 0;
    uint32_t reload = SysTick->LOAD; // 读取重装载值

    ticks = u32Cnt * (SystemCoreClock / 1000); // 转换成1ms基本单位的节拍
    told = SysTick->VAL;
    while (1)
    {
        tnow = SysTick->VAL;
        if (tnow != told)
        {

            if (tnow < told)
                tcnt += told - tnow;
            else
                tcnt += reload - tnow + told;
            told = tnow;
            if(tcnt >1000000)
              {
                continue;
              }
            if (tcnt >= ticks)
                break;
        }
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2024-5-8 15:50 | 只看该作者
阻塞式延时,能少用就不用
回复

使用道具 举报

板凳
ID:883242 发表于 2024-5-8 20:51 | 只看该作者
问题出在别的地方,这里没问题。
回复

使用道具 举报

地板
ID:424805 发表于 2024-5-9 17:06 | 只看该作者
Hephaestus 发表于 2024-5-8 20:51
问题出在别的地方,这里没问题。

那应该是官方库哪里影响了,我用官方的延时函数DDL_DelayMS这个就没问题。
回复

使用道具 举报

5#
ID:424805 发表于 2024-5-9 17:06 | 只看该作者
lkc8210 发表于 2024-5-8 15:50
阻塞式延时,能少用就不用

想学习这样的案例,老哥有没有例子让我参考参考呀!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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