找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 959|回復: 4
打印 上一主題 下一主題
收起左側(cè)

HC32F460單片機 嘀嗒延時問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424805 發(fā)表于 2024-5-8 14:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
使用庫3.2.0時,自己的延時函數(shù)會造成芯片跑飛,串口漏打印。我測試以前庫1.21時,發(fā)現(xiàn)沒問題,具體原因不知道為什么。庫2.2.0也會造成這樣的問題。下面給出了嘀嗒延時初始化和毫秒延時函數(shù),我在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; // 計數(shù)值清零

    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

                    SysTick_CTRL_TICKINT_Msk |

                    SysTick_CTRL_ENABLE_Msk; // 選擇系統(tǒng)時鐘,使能中斷、時鐘
}

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

    ticks = u32Cnt * (SystemCoreClock / 1000); // 轉(zhuǎn)換成1ms基本單位的節(jié)拍
    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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2024-5-8 15:50 | 只看該作者
阻塞式延時,能少用就不用
回復

使用道具 舉報

板凳
ID:883242 發(fā)表于 2024-5-8 20:51 | 只看該作者
問題出在別的地方,這里沒問題。
回復

使用道具 舉報

地板
ID:424805 發(fā)表于 2024-5-9 17:06 | 只看該作者
Hephaestus 發(fā)表于 2024-5-8 20:51
問題出在別的地方,這里沒問題。

那應該是官方庫哪里影響了,我用官方的延時函數(shù)DDL_DelayMS這個就沒問題。
回復

使用道具 舉報

5#
ID:424805 發(fā)表于 2024-5-9 17:06 | 只看該作者
lkc8210 發(fā)表于 2024-5-8 15:50
阻塞式延時,能少用就不用

想學習這樣的案例,老哥有沒有例子讓我參考參考呀!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表