Usart Sorunu

Başlatan hasandugan, 10 Şubat 2014, 14:40:07

hasandugan

Merhaba arkadaşlar,benim usart3 dışında farklı bir usarta daha ihtiyacım var fakat bir türlü halledemedim. http://atomsoft.wordpress.com/2012/06/18/configure-usart-2-on-stm32f4/
bu linktekini kullandım ama fayda etmedi,başka sitelere de baktım ama yine de olmadı,usart3 dışında herhangi bir usart kullanan varsa bu konuda bana yardımcı olabilir mi acaba? Şimdiden çok sağolun,iyi günler.

Klein

Diğer USART kanallarının USART3'ten bir farkı yok.  USART3 gördüğün yerleri USART2, USART1 vb. olarak değiştireceksin,  ilgili pinlerin AF ayarlarını yapacaksın.

hasandugan

yaptım ama bir türlü olmadı ne yazık ki,datasheetten baktım teker teker

Klein

void Usart_Config(USART_TypeDef* USARTx, uint32_t BaudRate, uint16_t DataBits, uint16_t Parity, uint16_t StopBits){
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStruct;
uint8_t IRQ_Source;

	if (USARTx == USART1)
	{
		IRQ_Source =  USART1_IRQn;
	}
	else if (USARTx == USART2)
	{
		IRQ_Source =  USART2_IRQn;
	}
	else if (USARTx == USART3)
	{
		IRQ_Source =  USART3_IRQn;
	}
	else return;

  USART_InitStructure.USART_BaudRate = BaudRate;
  USART_InitStructure.USART_WordLength = DataBits;
  USART_InitStructure.USART_StopBits = StopBits;
  USART_InitStructure.USART_Parity = Parity;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USARTx, &USART_InitStructure);

  USART_ITConfig(USARTx,USART_IT_RXNE,ENABLE);
  USART_ITConfig(USARTx,USART_IT_TC,ENABLE);

  NVIC_InitStruct.NVIC_IRQChannel = IRQ_Source;
  NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStruct);

}

void Usart_Open(USART_TypeDef* USARTx)
{
	  USART_Cmd(USARTx,ENABLE);

}

void Usart_Close(USART_TypeDef* USARTx)
{
	  USART_Cmd(USARTx,DISABLE);

}


void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1,USART_IT_TXE)){
		USART_ClearITPendingBit(USART1,USART_IT_TXE);
	}

	if(USART_GetITStatus(USART1,USART_IT_TC)){
		USART_ClearITPendingBit(USART1,USART_IT_TC);
	}

	if(USART_GetITStatus(USART1,USART_IT_RXNE)){
		USART_ClearITPendingBit(USART1,USART_IT_RXNE);
	}

}

void USART2_IRQHandler(void)
{
	if(USART_GetITStatus(USART2,USART_IT_TXE)){
		USART_ClearITPendingBit(USART2,USART_IT_TXE);

	}

	if(USART_GetITStatus(USART2,USART_IT_TC)){
		USART_ClearITPendingBit(USART2,USART_IT_TC);
	}

	if(USART_GetITStatus(USART2,USART_IT_RXNE)){
		USART_ClearITPendingBit(USART2,USART_IT_RXNE);
	}

}

void USART3_IRQHandler(void)
{
	if(USART_GetITStatus(USART3,USART_IT_TXE)){
		USART_ClearITPendingBit(USART3,USART_IT_TXE);

	}

	if(USART_GetITStatus(USART3,USART_IT_TC)){
		USART_ClearITPendingBit(USART3,USART_IT_TC);
	}

	if(USART_GetITStatus(USART3,USART_IT_RXNE)){
		USART_ClearITPendingBit(USART3,USART_IT_RXNE);
	}

}


Usart_Config(USART3,19200,USART_WordLength_8b,USART_Parity_No,USART_StopBits_1);
    Usart_Open(USART3);
	Usart_Config(USART1,19200,USART_WordLength_8b,USART_Parity_No,USART_StopBits_1);
    Usart_Open(USART1);