delay.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "delay.h"
  2. #include "stm32f10x_tim.h"
  3. #include "TypeDefine.h"
  4. //延时nus
  5. //nus为要延时的us数.
  6. //void delay_us(uint16_t nus)
  7. //{
  8. // uint8_t temp=0;
  9. // for(;nus>0;nus--)
  10. // {
  11. // for(temp=0; temp< 100;temp++);
  12. // }
  13. //
  14. //}
  15. //uint8_t hornTXDFlag = 0;
  16. void delay_us(uint16_t nus)
  17. {
  18. //// TIM3_Int_Init(nus-1,8000-1);
  19. // TIM_SetAutoreload(TIM3,nus);
  20. // TIM_ITConfig(TIM3, TIM_FLAG_Update,ENABLE);
  21. // TIM_Cmd(TIM3, ENABLE); //使能TIMx
  22. // while(hornTXDFlag == 0)
  23. // {
  24. //
  25. // }
  26. // hornTXDFlag = 0;
  27. uint16_t counter=nus;
  28. TIM_Cmd(TIM3,ENABLE);
  29. TIM_SetCounter(TIM3,counter); //设置计数值
  30. while(counter>0)
  31. {
  32. counter=TIM_GetCounter(TIM3);
  33. }
  34. TIM_Cmd(TIM3,DISABLE);
  35. }
  36. void TIM3_Int_Init(uint16_t arr,uint16_t psc)
  37. {
  38. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  39. //NVIC_InitTypeDef NVIC_InitStructure;
  40. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  41. RCC_PCLK1Config(RCC_HCLK_Div1);
  42. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
  43. //定时器TIM3初始化
  44. TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  45. TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  46. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  47. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down; //TIM向上计数模式
  48. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
  49. TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  50. TIM_ITConfig(TIM3, TIM_FLAG_Update,ENABLE);
  51. TIM_Cmd(TIM3, ENABLE); //使能TIMx
  52. }
  53. //void TIM3_Int_Init(uint16_t arr,uint16_t psc)
  54. //{
  55. // TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  56. // NVIC_InitTypeDef NVIC_InitStructure;
  57. // RCC_HCLKConfig(RCC_SYSCLK_Div1);
  58. // RCC_PCLK1Config(RCC_HCLK_Div1);
  59. // RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
  60. //
  61. // //定时器TIM3初始化
  62. // TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  63. // TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  64. // TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  65. // TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
  66. // TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
  67. //
  68. // TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
  69. // //中断优先级NVIC设置
  70. // NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
  71. // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
  72. // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
  73. // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  74. // NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
  75. // TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  76. // TIM_Cmd(TIM3, DISABLE); //使能TIMx
  77. //}
  78. ////定时器3中断服务程序
  79. //void TIM3_IRQHandler(void) //TIM3中断
  80. //{
  81. // if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
  82. // {
  83. // TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
  84. // TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  85. // TIM_ITConfig(TIM3, TIM_FLAG_Update,DISABLE);
  86. // TIM_Cmd(TIM3, DISABLE); //使能TIMx
  87. // hornTXDFlag = 1;
  88. //// RLED = !RLED;
  89. // }
  90. //}