delay.c 969 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "delay.h"
  2. #include "stm32f10x_it.h"
  3. #if 1
  4. void delay_us(u32 nUs){
  5. uint32_t i=0,j=0;
  6. for(i=0;i<nUs;i++){
  7. for(j=0;j<9;j++){
  8. ;
  9. }
  10. }
  11. }
  12. //简单的延时函数
  13. void delay_ms(u16 nms)
  14. {
  15. delay_us(nms*1000);
  16. }
  17. #endif
  18. #if 0
  19. //仿原子延时,不进入systic中断
  20. void delay_us(u32 nus)
  21. {
  22. u32 temp;
  23. SysTick->LOAD = 9*nus;
  24. SysTick->VAL=0X00;//清空计数器
  25. SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
  26. do
  27. {
  28. temp=SysTick->CTRL;//读取当前倒计数值
  29. }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
  30. SysTick->CTRL=0x00; //关闭计数器
  31. SysTick->VAL =0X00; //清空计数器
  32. }
  33. void delay_ms(u16 nms)
  34. {
  35. u32 temp;
  36. SysTick->LOAD = 9000*nms;
  37. SysTick->VAL=0X00;//清空计数器
  38. SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
  39. do
  40. {
  41. temp=SysTick->CTRL;//读取当前倒计数值
  42. }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
  43. SysTick->CTRL=0x00; //关闭计数器
  44. SysTick->VAL =0X00; //清空计数器
  45. }
  46. #endif