tim2.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "tim2.h"
  2. #include "modbus.h"
  3. #include "All_define.h"
  4. void BSP_TIM2_Init(u16 T35_50us)
  5. {
  6. timer_parameter_struct timer_initpara;
  7. rcu_periph_clock_enable(RCU_TIMER1); /* 使能 TIMx 时钟 */
  8. timer_struct_para_init(&timer_initpara);
  9. timer_deinit(TIMER1); /* 重置 TIMx 定时器 */
  10. /* 初始化定时器参数 */
  11. timer_initpara.prescaler = 119;
  12. timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
  13. timer_initpara.counterdirection = TIMER_COUNTER_UP;
  14. timer_initpara.period = T35_50us;
  15. timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
  16. timer_init(TIMER1, &timer_initpara);
  17. /* 自动重装载缓冲使能 */
  18. timer_auto_reload_shadow_enable(TIMER1);
  19. /* 使能 TIMx 定时器 */
  20. nvic_irq_enable(TIMER1_IRQn, 6, 0);
  21. timer_interrupt_flag_clear (TIMER1, TIMER_INT_FLAG_UP);
  22. timer_interrupt_enable (TIMER1, TIMER_INT_UP);
  23. //timer_internal_trigger_as_external_clock_config(TIMER1, TIMER_SMCFG_TRGSEL_ITI0);
  24. //timer_master_slave_mode_config(TIMER1,TIMER_MASTER_SLAVE_MODE_DISABLE);
  25. timer_enable(TIMER1);
  26. // TIM_TimeBaseInitTypeDef TIM_TimerBaseInitStructure;
  27. // NVIC_InitTypeDef NVIC_InitStructure;
  28. // RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  29. //TIM_TimeBaseStructInit(&TIM_TimerBaseInitStructure);
  30. //TIM_TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  31. //TIM_TimerBaseInitStructure.TIM_Prescaler = 35;
  32. // TIM_TimerBaseInitStructure.TIM_Period = 100 * T35_50us;
  33. // TIM_TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  34. // TIM_TimeBaseInit(TIM2, &TIM_TimerBaseInitStructure);
  35. // NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  36. /// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =6;
  37. // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  38. // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  39. // NVIC_Init(&NVIC_InitStructure);
  40. //TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  41. //TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  42. // TIM_InternalClockConfig(TIM2);
  43. // TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Disable);
  44. // TIM_Cmd(TIM2, ENABLE);
  45. }
  46. void vMBPortTimersEnable( )
  47. {
  48. //TIM_SetCounter(TIM2, 0);
  49. //TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  50. //TIM_Cmd(TIM2, ENABLE);
  51. timer_counter_value_config(TIMER1,0);
  52. timer_interrupt_flag_clear(TIMER1,TIMER_INT_FLAG_UP);
  53. timer_enable(TIMER1);
  54. }
  55. void vMBPortTimersDisable( )
  56. {
  57. //TIM_SetCounter(TIM2, 0);
  58. // TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  59. // TIM_Cmd(TIM2, DISABLE);
  60. timer_counter_value_config(TIMER1,0);
  61. timer_interrupt_flag_clear(TIMER1,TIMER_INT_FLAG_UP);
  62. timer_disable(TIMER1);
  63. }
  64. void prvvTIMERExpiredISR( void )
  65. {
  66. UART_msg ptrmsg;
  67. BaseType_t xSwitchRequired1 = pdFALSE;
  68. switch ( eRcvState )
  69. {
  70. case STATE_RX_INIT:
  71. vMBPortTimersDisable( );
  72. break;
  73. case STATE_RX_RCV:
  74. // printf("232232\r\n");
  75. for(u8 i = 0;i < usRcvBufferPos;i++)
  76. {
  77. //printf(" data= 0x%x/ \n ",ptrmsg.data[i]);
  78. ptrmsg.data[i] = ucRTUBuf[i];
  79. }
  80. ptrmsg.len = usRcvBufferPos;
  81. vMBPortTimersDisable( );
  82. eRcvState = STATE_RX_IDLE;
  83. xQueueSendFromISR(MB_RTU_Rx_Queue,&ptrmsg,&xSwitchRequired1);
  84. break;
  85. case STATE_RX_ERROR:
  86. break;
  87. default:
  88. break;
  89. }
  90. eRcvState = STATE_RX_IDLE;
  91. portYIELD_FROM_ISR(xSwitchRequired1);
  92. }