// 初始化,将SysTick时钟源设置为SYSTICK的1/8
void bsp_delay_init(void)
{
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);
fac_us = SystemCoreClock/8000000; // 系统时钟1/8 1us所需要的计数
fac_ms = fac_us*1000;
}
void bsp_delay_ms(uint32_t nms)
{
uint32_t temp;
SysTick->LOAD = nms * fac_ms; // 时间加载(SysTick->LOAD为24bit)
SysTick->VAL = 0x00; // 清空计数器
SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk ; // 开始倒数
do
{
temp = SysTick->CTRL;
}
while(temp & 0x01 && !(temp&(1<<16))); // 等待时间到达
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭计数器
}
void bsp_delay_us(uint32_t nus)
{
uint32_t temp;
SysTick->LOAD = nus * fac_us; // 时间加载
SysTick->VAL = 0x00; // 清空计数器
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; // 开始倒数
do
{
temp = SysTick->CTRL;
}
while(temp & 0x01 && !(temp&(1<<16))); // 等待时间到达
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭计数器
SysTick->VAL = 0x00;
}
stm32 SysTick定时器延时函数
最新推荐文章于 2024-12-22 20:48:11 发布