Страница 1 из 1

USART Framing error[STM32F103]

Добавлено: Вс окт 05, 2014 14:17:45
Foxek
Добрый день. Писал программу для пересылки через USART в терминал. Во прекрасно работает. В терминал шлется и символ и строка, но когда я проверяю тот же код логическим анализатором, он выдает ошибку Framing error, причем отмечает крестиком именно последний стоповый бит... Помогите разобраться в чем причина.
Собственно код:

Код: Выделить всё

void GPIO_Configuration(void)
{
	RCC->APB2ENR|= (RCC_APB2ENR_IOPAEN|RCC_APB2ENR_AFIOEN);

	//USART1_TX(PA9)
	GPIOA->CRH |= (GPIO_CRH_CNF9_1|GPIO_CRH_MODE9_0);

	//USART1_RX(PA10)
	GPIOA->CRH |=GPIO_CRH_CNF10_0;
	GPIOA->CRH &= ~GPIO_CRH_CNF10_1;
	GPIOA->CRH &= ~GPIO_CRH_MODE10;
}

void USART_Configuration(void)
{
	RCC->APB2ENR|= RCC_APB2ENR_USART1EN;

	USART1->CR1 = 0x0000;
	USART1->CR1 |= (USART_CR1_UE|USART_CR1_RE|USART_CR1_TE);
	USART1->BRR = 0xB65;
}

/*char data[128];
uint32_t count=0,j=0;

void USART_Send_Symbol(uint8_t data)
{
	while(!(USART1->SR & USART_SR_TC));
	USART1->DR=data;
}

void USART_Send_String(char *data, uint8_t terminate)
{

	uint8_t i = 0;
	while(data[i])
	{
		USART_Send_Symbol(data[i++]);
	}
	if(terminate)
	{
		USART_Send_Symbol('\r');
		USART_Send_Symbol('\n');
	}
}*/

int main(void)
{
	SYSCLK_Configuration();
	GPIO_Configuration();
	USART_Configuration();	
	while(!(USART1->SR & USART_SR_TC));
	USART1->DR='H';	
while(1)
	{
	
	}

}

Фото с логического анализатора прикреплено ниже!

Re: USART Framing error[STM32F103]

Добавлено: Вс окт 05, 2014 16:38:17
dosikus
Научиться делать скриншоты и пользоваться лог. анализатором ...

Re: USART Framing error[STM32F103]

Добавлено: Вс окт 05, 2014 17:12:25
Foxek
ой тыж гений какой. А по умнее что либо сказать?

Re: USART Framing error[STM32F103]

Добавлено: Вт окт 07, 2014 09:44:11
dosikus
Foxek писал(а): А по умнее что либо сказать?
По умней что? Ляпнуть по умней высера - "ой тыж гений какой" ???? :)))
Легко

Код: Выделить всё

#define USARTCLK 72000000UL
#define BAUDRATE 115200UL

Код: Выделить всё

 
 void USART1_IRQHandler (void)
 {
 
   if(USART1->SR & USART_SR_RXNE)
   {
     UsartBuf =USART1->DR;
    
   }
   
 }



 void UsartInit(void)
 {
   RCC->APB2ENR |=RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPAEN;
    
    GPIOA->CRH &=~ (GPIO_CRH_CNF10 |GPIO_CRH_CNF9|GPIO_CRH_MODE10);
    GPIOA->CRH |= GPIO_CRH_CNF10_0 |GPIO_CRH_CNF9_1 | GPIO_CRH_MODE9;
    
    USART1->CR1 |= USART_CR1_TE |USART_CR1_RE |USART_CR1_RXNEIE;
    USART1->BRR =(USARTCLK+BAUDRATE/2)/BAUDRATE;
    USART1->CR1 |=USART_CR1_UE;
    
    NVIC_SetPriority(USART1_IRQn,15);
    NVIC_EnableIRQ(USART1_IRQn);
   
   
 }

void USART_write (char data)
  {
    while(!(USART1->SR & USART_SR_TXE));
    USART1->DR=data;
  }
void  USART_WR_String(const char *s)
{
        char c;
        while ((c = *s++)) {
                USART_write(c);
        }
}





Код: Выделить всё

 int main (void)
	{
		  UsartBuf=0;
 SysTick_Config(SystemCoreClock /1000);  
 UsartInit(); 
   
  Delay_mS(100); 
  while(1)
  {
  if(UsartBuf=='h')
  { 
   UsartBuf =0; 
   
   USART_WR_String("Hello world\r\n");
  }
  Delay_mS(100);
  }    
		return 0;
	}

Изображение
Изображение
Изображение



И вопрос к страждущему - модуль HC переведен из режима "команд" в режим "данные" ?