Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » STM32: USART, I2C, USB » UART


UART

Сообщений 61 страница 63 из 63

61

HHIMERA написал(а):

Как по мне... ничего простого... и ничего естественного... даже наоборот... какое-то горе от ума...

Тогда я сформулирую ещё более ужасную сентенцию )
IMHO, всё что может быть сделано программно, следует и делать программно, и только то, что невозможно сделать программно, следует делать аппаратно

62

vt340 написал(а):

IMHO, всё что может быть сделано программно, следует и делать программно, и только то, что невозможно сделать программно, следует делать аппаратно

Мое IMHO полностью обратное))

63

Решил попробовать DMA на USART как прием,так и передачу. Очень интересно,но столько телодвижений :) Да когда много информации.
Сделал по прерываниям окончания передачи и приема DMA. Кажется это оптимально или как ваше мнение?

Код:
void init_usart1(void)
{
	RCC->APB2ENR|=RCC_APB2ENR_AFIOEN; // tatirovanie alternativ
	RCC->APB2ENR|=RCC_APB2ENR_IOPBEN;
	RCC->AHBENR |= RCC_AHBENR_DMA1EN;
	// taktir usart in APB2= 72 Mhz
	RCC->APB2ENR|= RCC_APB2ENR_USART1EN; // tatirovanie usart1
	// remap usart1 na PB6-TX PB7-RX
	AFIO->MAPR |= AFIO_MAPR_USART1_REMAP ;
	
	// output TX- altern push-pull   RX- input float
	GPIOB->CRL&=~GPIO_CRL_MODE7;  // input  00 - input
	GPIOB->CRL&=~GPIO_CRL_CNF7;     
	GPIOB->CRL|=GPIO_CRL_CNF7_0;  // 01- input float
	
	GPIOB->CRL&=~GPIO_CRL_MODE6;  // output  mode=10- max speed 2mhz
	GPIOB->CRL|=GPIO_CRL_MODE6_1;
	GPIOB->CRL&=~GPIO_CRL_CNF6;     
	GPIOB->CRL|=GPIO_CRL_CNF6_1;  // 10-alter push-pull 10= cnf
	
//    // TX-PA9  RX-PA10  
//	
//	
//    GPIOA->CRH&= ~(GPIO_CRH_MODE9);
//    GPIOA->CRH|=GPIO_CRH_MODE9_0|GPIO_CRH_MODE9_1;
//    GPIOA->CRH&= ~(GPIO_CRH_CNF9);
//    GPIOA->CRH|= GPIO_CRH_CNF9_0|GPIO_CRH_CNF9_1;
    
	USART1->BRR = (APBCLK+BAUDRATE/2)/BAUDRATE;
	USART1->CR1 |= USART_CR1_RE|USART_CR1_TE;
	//////////////////////////////////////////////////////////////////////////
	// DMA1 4-TX  5-RX
	// DMA1 4-TX   peredscha i priem po 8 bit
	DMA1_Channel4->CPAR = (uint32_t) &(USART1->DR) ;
	DMA1_Channel4->CMAR = (uint32_t) &tx ;
	DMA1_Channel4->CNDTR = 8;
	DMA1_Channel4->CCR = 0;
	DMA1_Channel4->CCR |= DMA_CCR4_MINC | DMA_CCR4_DIR | DMA_CCR4_TCIE ;
//      //  zapuck kanala
//    DMA1_Channel4->CCR |= DMA_CCR4_EN ;
//	  USART1->CR3 |= USART_CR3_DMAT ;
//    USART1->DR = *tx;
//-----------------------------------------------------
//      // po prerivanie dma1
// pered usart1 tx
//void DMA1_Channel4_IRQHandler(void)
//{
//	if( DMA1->ISR & DMA_ISR_TCIF4)
//	{
//    DMA1->IFCR |= DMA_IFCR_CTCIF4;
//    flag_tx=1;
//	}
//}
//---------------------------------------------------
//    // off channel4 dma1 tx
//    DMA1_Channel4->CCR &= ~DMA_CCR4_EN ;
//	  USART1->CR3 &= ~USART_CR3_DMAT ;
	//---------------------------------------------------------------------------
	// DMA 5-RX  
	// Po DMA TCIF flag end peredchi
	DMA1_Channel5->CPAR = (uint32_t) &(USART1->DR) ;
	DMA1_Channel5->CMAR = (uint32_t) &rx ;
	DMA1_Channel5->CNDTR = 8;
	DMA1_Channel5->CCR = 0;
	DMA1_Channel5->CCR |= DMA_CCR4_MINC|DMA_CCR5_TCIE ;
	//   zapusk kanala
	//-----------------------------------------------------------
    	// on channel5 dma rx
	//	DMA1_Channel5->CCR |= DMA_CCR5_EN ;
	//  USART1->CR3 |= USART_CR3_DMAR ;
	//------------------------------------------------------
	// prerivanie po priemy  DMA1_Channel5->CNDTR = 8;  8 bit
	// priem usart1 rx
	//void DMA1_Channel5_IRQHandler(void)
	//{
	//	if( DMA1->ISR & DMA_ISR_TCIF5)
	//	{
	//    DMA1->IFCR |= DMA_IFCR_CTCIF5;
	//    flag_rx=1;
	//	}
	//}
	//-------------------------------------------------------
        	// off channel5 dma rx
	//    	DMA1_Channel5->CCR &= ~DMA_CCR5_EN ;
	//    	USART1->CR3 &= ~USART_CR3_DMAR ;
	
	
	NVIC_SetPriority(DMA1_Channel4_IRQn ,0);
	NVIC_EnableIRQ(DMA1_Channel4_IRQn);
	
	NVIC_SetPriority(DMA1_Channel5_IRQn ,0);
	NVIC_EnableIRQ(DMA1_Channel5_IRQn);
	
	USART1->CR1 |= USART_CR1_UE ;
}

Вы здесь » Микроконтроллеры » STM32: USART, I2C, USB » UART