CH32V203F6 通過Systick生成dealy_ms延時,當(dāng)使用HSI作為時鐘源時,HCLK設(shè)置為96M或144M時,延時誤差相差達(dá)到數(shù)倍。

請問如何設(shè)置能夠消除誤差?延時函數(shù)使用的是EVT中的示例:

void Delay_Ms(uint32_t n)

{

? ? uint32_t i;

? ? SysTick->SR &= ~(1 << 0);

? ? i = (uint32_t)n * p_ms;


? ? SysTick->CMP = i;

? ? SysTick->CTLR |= (1 << 4);

? ? SysTick->CTLR |= (1 << 5) | (1 << 0);


? ? while((SysTick->SR & (1 << 0)) != (1 << 0));

? ? SysTick->CTLR &= ~(1 << 0);

}



熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

您好,關(guān)于延時函數(shù)的初始化,如下圖1,配置是根據(jù)系統(tǒng)主頻不同進(jìn)行調(diào)整的,使延時的大小不會因主頻的變化而改動。正常不會有太大誤差的,我這邊基于EVT例程測試基本也是沒有問題的,請問一下你那邊所描述的延時誤差相差數(shù)倍具體是多少,若方便可使用EVT例程直接測試一下,可直接通過修改宏定義修改主頻,如下圖2。后續(xù)若有問題,可郵箱(lzs@wch.cn)和我進(jìn)行溝通。

image.png

圖1

image.png

圖2


#define SYSCLK_FREQ_96MHz_HSI? 96000000

int main(void)

{

? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

? ? SystemCoreClockUpdate();

? ? Delay_Init();

? ? GPIO_INIT();

? ? while(1){

? ? ? ? GPIO_SetBits(GPIOD, GPIO_Pin_0);

? ? ? ? GPIO_ResetBits(GPIOD, GPIO_Pin_1);

? ? ? ? Delay_Ms(100);

? ? ? ? GPIO_SetBits(GPIOD, GPIO_Pin_1);

? ? ? ? GPIO_ResetBits(GPIOD, GPIO_Pin_0);

? ? ? ? Delay_Ms(100);

? ? }

以上代碼是基于EVT改的,延時函數(shù)采用EVT中的沒改動。

用邏輯分析儀抓取PD0引腳波形如下:

PixPin_2024-11-28_15-44-32.jpg


您好,PD0和PD1作為晶振引腳,作為普通IO使用時,注意開啟復(fù)用時鐘和GPIO復(fù)用,此外可關(guān)閉外部晶振試一下。附件是我的測試?yán)?,測試是沒有問題的,可以參考一下,如下圖。你可以直接使用附件例程測試一下

icon_rar.gifCH32V203 PD0_1.zipimage.png


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频