Skocz do zawartości

Przerwanie od IDLE UART STM32F030F4


Daniel_1995

Pomocna odpowiedź

Cześć, Czy korzystał ktoś z przerwania od IDLE do komunikacji UART na STM32F030? Poniżej zamieszczam kod. Niestety procesor cały czas wykonuje przerwanie o IDLE. Nie wiem w czym leży problem. Na STM32f407VGT6 działa bez problemu.

char bufchar[10]; //bufor

static void COM_ReadFromHost(void){

	if(bufchar[0]==1){
		// obsługiwany kod 
	}

	DMA1_Channel3 -> CCR &= ~DMA_CCR_EN; //wyłaczenie DMA	
	DMA1-> IFCR |= DMA_IFCR_CTCIF3;		//Flaga
	DMA1_Channel3 -> CCR |= DMA_CCR_EN; //włączenie DMA
}

void COM_Conf (void){

    RCC->AHBENR|=RCC_AHBENR_DMA1EN; //Zegar DMA
	RCC->AHBENR|=RCC_AHBENR_GPIOAEN; //Zegar PORT A
	RCC->APB2ENR|=RCC_APB2ENR_USART1EN; //Zegar USART
  
	DMA1_Channel3 ->CPAR = (uint32_t)(&(USART1 -> RDR));
	DMA1_Channel3 ->CMAR = (uint32_t)(bufchar);
	DMA1_Channel3 ->CNDTR = (uint16_t)10;
	DMA1_Channel3 ->CCR|= DMA_CCR_PL | DMA_CCR_MINC | DMA_CCR_EN | DMA_CCR_CIRC;
  	// Konfiguracja DMA odczyt z USART1, zapis do bufchar, ilość danych, priorytet maksymalny, inkramentacja pamięci, włączenie DMA i tryb kołowy
  
	GPIOA->MODER |= GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1;
	GPIOA->PUPDR |= GPIO_PUPDR_PUPDR2_0 | GPIO_PUPDR_PUPDR3_0;
	GPIOA->AFR[0]  |=  0x00001100;
  
  	// Konfiguraja nóżek do wspołpracy z USART1
	USART1-> BRR=8000000/9600;	// Baudrate
	USART1-> CR3 |= USART_CR3_DMAR | USART_CR3_DMAT;	// Wykorzystanie DMA do odbioru i nadawania
	USART1-> CR1 |=  USART_CR1_RE | USART_CR1_UE | USART_CR1_IDLEIE; //Włączenie odbioru, włączenie USART1, włączenie przerwania od IDLE
	NVIC_EnableIRQ(USART1_IRQn);	//Aktywacja przerwania USART1
}

//Przerwanie

void USART1_IRQHandler(void){

	if((USART1->ISR & USART_ISR_IDLE ) != RESET)
	{ 
		COM_ReadFromHost();
	}
}

int main(void)
{

COM_Conf();

  while (1)
  {

  }
  
}

 

Link do komentarza
Share on other sites

(edytowany)

Faktycznie, zapomniałem wyczyszczenie maski załatwiło sprawę, dzięki. Ponadto w STM32F407VGT6 jest chyba tak, że podczas odczytu maski następuje jej wyczyszczenie? Jeżeli jestem w będzie niech ktoś mnie poprawi.

USART1->ICR |= USART_ICR_IDLECF;

 

Edytowano przez Daniel_1995
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.