使用庫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;
}
}
}
|