mapp_time.c 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //==================================================================
  2. //
  3. // Filename: mapp_time.c
  4. // Description: External Input driver.
  5. //
  6. //------------------------------------------------------------------
  7. //
  8. // version:
  9. // date: 08:54am, 08.Feb.2023, by dwd
  10. // Description:
  11. //
  12. //------------------------------------------------------------------
  13. //==================================================================
  14. /*------------------------------------------------------------------------------
  15. * I N C L U D E
  16. *------------------------------------------------------------------------------*/
  17. #include "stm32f0xx.h"
  18. #include "general.h"
  19. #include "main.h"
  20. #include "mapp_gpio.h"
  21. #include "mapp_time.h"
  22. #include "mapp_arm.h"
  23. #include "mapp_msg.h"
  24. /*------------------------------------------------------------------------------
  25. * D E F I N E
  26. *------------------------------------------------------------------------------*/
  27. /*------------------------------------------------------------------------------
  28. * S T R U C T
  29. *------------------------------------------------------------------------------*/
  30. /*------------------------------------------------------------------------------
  31. * S T A T I C - V A R I A B L E S
  32. *------------------------------------------------------------------------------*/
  33. /*------------------------------------------------------------------------------
  34. * G L O B A L
  35. *------------------------------------------------------------------------------*/
  36. /*------------------------------------------------------------------------------
  37. * P R O T O T Y P E
  38. *------------------------------------------------------------------------------*/
  39. #define BUS_REV_MAX 6
  40. static unsigned short BUS_Rev_Buf[6][150]={0};
  41. static unsigned char BUS_Rev_ReadIndex=0;
  42. static unsigned char BUS_Rev_WriteIndex=0;
  43. static unsigned char TIM1_cc_flag=0;
  44. static unsigned char TIM1_Rev_Buf[30]={0};
  45. unsigned char gt_busrxflag =0;
  46. int TIM6_init(void)
  47. {
  48. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  49. NVIC_InitTypeDef NVIC_InitStructure;
  50. GPIO_InitTypeDef GPIO_InitStructure;
  51. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
  52. TIM_DeInit(TIM6);
  53. TIM_TimeBaseStructure.TIM_Prescaler = 48 - 1; //48000000/48=1M
  54. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  55. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  56. TIM_TimeBaseStructure.TIM_Period = 100 ; //初始值 F=1M/100=10KHz
  57. TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);
  58. //=========================================================
  59. TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
  60. TIM_ITConfig(TIM6,TIM_IT_Update,DISABLE);
  61. TIM_ClearFlag(TIM6, TIM_FLAG_Update);
  62. NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;
  63. NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
  64. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  65. NVIC_Init(&NVIC_InitStructure);
  66. TIM_Cmd(TIM6, ENABLE);
  67. //=========================================================
  68. return 1;
  69. }
  70. /*----------------------------------------------------------------------
  71. PWM OUT :100K,PA6(TIM3_CH1);
  72. BUSIN: PB1(TIM3_CH4)
  73. TIM3->CCER &=~(1<<0);//关闭PWM输出(TIM3_CH1);OC1禁止输出
  74. ----------------------------------------------------------------------*/
  75. //----------------------------------------------------------------------
  76. void TIM3_PWM_Init(void)
  77. {
  78. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  79. TIM_ICInitTypeDef TIM_ICInitStructure;
  80. TIM_OCInitTypeDef TIM_OCInitStructure;
  81. NVIC_InitTypeDef NVIC_InitStructure;
  82. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  83. TIM_DeInit(TIM3);
  84. //TIM_Prescaler:48,TIM_Period:20000 周期20ms
  85. TIM_TimeBaseInitStructure.TIM_Prescaler = (24-0); //1M 1us加1. 48
  86. TIM_TimeBaseInitStructure.TIM_Period = 17; //设置自动重装载寄存器周期值 9
  87. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
  88. TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //重复计数设置 //重复计数设置
  89. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
  90. TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); //参数初始化
  91. //=================================
  92. NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  93. NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
  94. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  95. NVIC_Init(&NVIC_InitStructure);
  96. //=================================
  97. //=================================
  98. TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; //选择输入端 IC1映射到TI4上
  99. TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //下降沿捕获
  100. TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //通道一一对应
  101. TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
  102. TIM_ICInitStructure.TIM_ICFilter =0; //IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波
  103. TIM_ICInit(TIM3, &TIM_ICInitStructure); //初始化定时器输入捕获通道
  104. /* Select the TIM3 Input Trigger: TIM_TS_TI1FP1 */
  105. TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); //选择输入触发源trgi
  106. /* Select the slave Mode: Reset Mode */
  107. TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
  108. TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);
  109. TIM_ITConfig(TIM3,TIM_IT_CC4,ENABLE);
  110. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //输出PWM
  111. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  112. TIM_OCInitStructure.TIM_Pulse = 8; //预设值
  113. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  114. TIM_OC1Init(TIM3,&TIM_OCInitStructure);
  115. TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
  116. TIM_CtrlPWMOutputs(TIM3, ENABLE);
  117. //使能标志位CC1.CC2.CC3.CC4
  118. TIM_Cmd(TIM3,ENABLE);
  119. TIM3->CCER &=~(1<<0); //默认不输出
  120. }
  121. void TIM1_Init(void)
  122. {
  123. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  124. TIM_ICInitTypeDef TIM_ICInitStructure;
  125. TIM_OCInitTypeDef TIM_OCInitStructure;
  126. NVIC_InitTypeDef NVIC_InitStructure;
  127. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
  128. TIM_DeInit(TIM1);
  129. //TIM_Prescaler:48,TIM_Period:20000 周期20ms
  130. TIM_TimeBaseInitStructure.TIM_Prescaler = (480-1); //480-1预分频器,100K的计数频率,10us加1.
  131. TIM_TimeBaseInitStructure.TIM_Period = 65535; //设置自动重装载寄存器周期值 65535
  132. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
  133. TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //重复计数设置 //重复计数设置
  134. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
  135. TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure); //参数初始化
  136. //=================================
  137. TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1映射到TI4上
  138. TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //下降沿捕获
  139. TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //通道一一对应
  140. TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
  141. TIM_ICInitStructure.TIM_ICFilter =0; //IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波
  142. TIM_ICInit(TIM1, &TIM_ICInitStructure); //初始化定时器输入捕获通道
  143. //=================================
  144. NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
  145. NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
  146. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  147. NVIC_Init(&NVIC_InitStructure);
  148. //=================================
  149. /* Select the TIM3 Input Trigger: TIM_TS_TI1FP1 */
  150. //TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); //选择输入触发源trgi
  151. /* Select the slave Mode: Reset Mode */
  152. // TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
  153. //TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);
  154. TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE);
  155. //TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
  156. //TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
  157. //TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//??????
  158. TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);//??????
  159. TIM_Cmd(TIM1, ENABLE);
  160. }
  161. /*------------------------------- E O F ----------------------------------------*/