//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//**************************************************************************************************
//  Секция include: здесь подключаются заголовочные файлы используемых модулей
//**************************************************************************************************
#include "aplication.h"
//--------------------------------------------------------------------------------------------------
//**************************************************************************************************
//  Секция определения макросов
//**************************************************************************************************

//**************************************************************************************************
//  Секция определения глобальных переменных
//**************************************************************************************************
uint8_t Receive_pack[60];	//Массив приема пакета 50 байт
//**************************************************************************************************
//  Функции библиотеки
//**************************************************************************************************
//#define RS485_USART USART2
volatile uint8_t Receive=0;
//==================================================================================================
int main(){
		Init_Pin_DebugLed();    

        //--------------------------------------------------------------------------------------------------
        //----------------------USART INIT------------------------------------------------------------------
        //--------------------------------------------------------------------------------------------------
		RCC->APB1ENR |=RCC_APB1Periph_USART2;
        //---------------------------------------------------------------------------------------------
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
        RCC->APB2ENR |=RCC_APB2Periph_GPIOA;
        //---------------------------------------------------------------------------------------------
        //---------------------------------------------------------------------------------------------
        GPIO_INIT_PIN(GPIOA,3,GPIO_MODE_INPUT_FLOATING);
        GPIO_INIT_PIN(GPIOA,2,GPIO_MODE_OUTPUT50_ALT_PUSH_PULL);
        //---------------------------------------------------------------------------------------------
		USART2->CR1 = 0;
		USART2->BRR =(CPU_APB1+19200/2)/19200;
		USART2->CR1 = USART_CR1_TE | USART_CR1_RE;        
        //---------------------------------------------------------------------------------------------
        //----------RS485 INIT-------------------------------------------------------------------------
        //---------------------------------------------------------------------------------------------
        RCC->APB2ENR |=RCC_APB2Periph_GPIOA;
        GPIO_INIT_PIN(GPIOA,11,GPIO_MODE_OUTPUT50_PUSH_PULL);
        //-------------------------------------
        RS485_OUT		//настраиваем на выход        
        //---------------------------------------------------------------------------------------------
		//----------DMA INIT---------------------------------------------------------------------------
        //---------------------------------------------------------------------------------------------
		RCC->AHBENR |= RCC_AHBENR_DMA1EN;
        //--------------------------------------------------------------------------------------------------
        //--------------------------------------------------------------------------------------------------
		DMA1_Channel6->CPAR = (uint32_t)(&USART2->DR);		
		NVIC_EnableIRQ(DMA1_Channel6_IRQn);
        //---------------------------------------------------------------------------------------------
		USART2->CR1 |= USART_CR1_UE;            // USart Enable
    //---------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------
	while(1){
        USART2->CR1 &=~USART_CR1_UE;
        USART2->CR1 |= USART_CR1_UE;            // USart Enable
		//-------------------------------------------------------------
		RS485_OUT		//Переключил на выход
		while(!(USART2->SR&USART_SR_TXE)){}		
		USART2->DR=0x11;
		while(!(USART2->SR&USART_SR_TC)){}		
		//-------------------------------------------------------------
		RS485_IN							//настраиваем на выход
		Debug2_1
		Debug2_0          
		//--------------------------------------------------------------
        DMA1_Channel6->CCR=0;
		//---------------------------------------------------------------------------------------
		//------------Прием----------------------------------------------------------------------
		//---------------------------------------------------------------------------------------
        USART2->SR=0;    
        USART2->CR3=USART_CR3_DMAR;
		(void)USART2->DR;
        (void)USART2->DR;
		DMA1_Channel6->CNDTR=sizeof(Resp_pack_t); //Принимать по максимум, сколько есть
		DMA1_Channel6->CMAR = (uint32_t)&Receive_pack[0];
		DMA1_Channel6->CCR=DMA_CCR1_TCIE|DMA_CCR6_MINC|DMA_CCR1_EN;        
		DMA1->IFCR=DMA_IFCR_CGIF6;
		//---------------------------------------------------------------------------------------
        while(Receive==0){}
		Receive=0;
		//while(!(DMA1->ISR & DMA_ISR_TCIF6)){}	
		//while(!(RS485_USART->SR&USART_SR_RXNE)){}
		Debug2_1
		Debug2_0
      //---------------------------------------------------------------------------------------
		if(Receive_pack[0]==0x11){
			if(Receive_pack[49]==0x13){ //пакет принят правильно
				NOP;
                //-----------------------------------------------------------------------
			}
		}else{
          NOP;
        }
	}
}
//==================================================================================================
/*
	* @Описание:	Описание функции.
	* @Параметр:	
	* @Возврат:		Нету
*/
void DMA1_Channel6_IRQHandler(void)
{
  DMA1->IFCR = DMA_IFCR_CGIF6;
  Receive=1;
  //DMA1_Channel6->CCR =DMA_CCR6_MINC;
  USART2->CR3=0;
}






















