123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #include "tim2.h"
- #include "modbus.h"
- #include "All_define.h"
- void BSP_TIM2_Init(u16 T35_50us)
- {
- timer_parameter_struct timer_initpara;
- rcu_periph_clock_enable(RCU_TIMER1); /* 使能 TIMx 时钟 */
- timer_struct_para_init(&timer_initpara);
- timer_deinit(TIMER1); /* 重置 TIMx 定时器 */
- /* 初始化定时器参数 */
- timer_initpara.prescaler = 119;
- timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
- timer_initpara.counterdirection = TIMER_COUNTER_UP;
- timer_initpara.period = T35_50us;
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
- timer_init(TIMER1, &timer_initpara);
- /* 自动重装载缓冲使能 */
- timer_auto_reload_shadow_enable(TIMER1);
- /* 使能 TIMx 定时器 */
-
-
- nvic_irq_enable(TIMER1_IRQn, 6, 0);
-
- timer_interrupt_flag_clear (TIMER1, TIMER_INT_FLAG_UP);
- timer_interrupt_enable (TIMER1, TIMER_INT_UP);
- //timer_internal_trigger_as_external_clock_config(TIMER1, TIMER_SMCFG_TRGSEL_ITI0);
- //timer_master_slave_mode_config(TIMER1,TIMER_MASTER_SLAVE_MODE_DISABLE);
-
- timer_enable(TIMER1);
-
- // TIM_TimeBaseInitTypeDef TIM_TimerBaseInitStructure;
- // NVIC_InitTypeDef NVIC_InitStructure;
- // RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- //TIM_TimeBaseStructInit(&TIM_TimerBaseInitStructure);
- //TIM_TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- //TIM_TimerBaseInitStructure.TIM_Prescaler = 35;
- // TIM_TimerBaseInitStructure.TIM_Period = 100 * T35_50us;
- // TIM_TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- // TIM_TimeBaseInit(TIM2, &TIM_TimerBaseInitStructure);
- // NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- /// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =6;
- // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- // NVIC_Init(&NVIC_InitStructure);
- //TIM_ClearFlag(TIM2, TIM_FLAG_Update);
- //TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
- // TIM_InternalClockConfig(TIM2);
- // TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Disable);
- // TIM_Cmd(TIM2, ENABLE);
- }
- void vMBPortTimersEnable( )
- {
- //TIM_SetCounter(TIM2, 0);
- //TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- //TIM_Cmd(TIM2, ENABLE);
- timer_counter_value_config(TIMER1,0);
- timer_interrupt_flag_clear(TIMER1,TIMER_INT_FLAG_UP);
- timer_enable(TIMER1);
- }
- void vMBPortTimersDisable( )
- {
- //TIM_SetCounter(TIM2, 0);
- // TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- // TIM_Cmd(TIM2, DISABLE);
- timer_counter_value_config(TIMER1,0);
- timer_interrupt_flag_clear(TIMER1,TIMER_INT_FLAG_UP);
- timer_disable(TIMER1);
- }
- void prvvTIMERExpiredISR( void )
- {
- UART_msg ptrmsg;
- BaseType_t xSwitchRequired1 = pdFALSE;
- switch ( eRcvState )
- {
- case STATE_RX_INIT:
- vMBPortTimersDisable( );
- break;
- case STATE_RX_RCV:
- // printf("232232\r\n");
- for(u8 i = 0;i < usRcvBufferPos;i++)
- {
- //printf(" data= 0x%x/ \n ",ptrmsg.data[i]);
- ptrmsg.data[i] = ucRTUBuf[i];
- }
- ptrmsg.len = usRcvBufferPos;
- vMBPortTimersDisable( );
- eRcvState = STATE_RX_IDLE;
- xQueueSendFromISR(MB_RTU_Rx_Queue,&ptrmsg,&xSwitchRequired1);
- break;
- case STATE_RX_ERROR:
- break;
- default:
- break;
- }
- eRcvState = STATE_RX_IDLE;
- portYIELD_FROM_ISR(xSwitchRequired1);
- }
|