Advertisement
wojiaocbj

delay.c

Jul 3rd, 2022
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.73 KB | None | 0 0
  1. #include "stm32f1xx_hal.h"
  2. #include "delay.h"
  3. static unsigned int fac_us = 0;
  4. void SysTick_Handler(void){
  5.     HAL_IncTick();
  6.     //HAL_SYSTICK_IRQHandler();
  7. }
  8. void delay_init(unsigned int sysclk){
  9.     HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  10.     fac_us = sysclk;
  11.     //NVIC_DisableIRQ(SysTick_IRQn);
  12. }
  13. void delay_us(unsigned int nus){
  14.     unsigned int ticks, told, tnow, tcnt = 0;
  15.     ticks = nus * fac_us;
  16.     told = SysTick->VAL;
  17.     for(;;){
  18.         tnow = SysTick->VAL;
  19.         if(tnow != told){
  20.             if(tnow < told)tcnt += told - tnow;
  21.             else tcnt += ((SysTick->LOAD) - tnow + told);
  22.             told = tnow;
  23.             if(tcnt >= ticks)break;
  24.         }
  25.     }
  26. }
  27. void delay_ms(unsigned short nms){
  28.     unsigned short i;
  29.     for(i = 0;i < nms;i++){
  30.         delay_us(1000);
  31.     }
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement