stm32 SysTick定时器延时函数

//	初始化,将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;   
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值