USART Framing error[STM32F103]

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Foxek
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб дек 28, 2013 20:31:22

USART Framing error[STM32F103]

Сообщение 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)
	{
	
	}

}

Фото с логического анализатора прикреплено ниже!
Вложения
csKfrSZ5WC4.jpg
(47.14 КБ) 576 скачиваний
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: USART Framing error[STM32F103]

Сообщение dosikus »

Научиться делать скриншоты и пользоваться лог. анализатором ...
Реклама
Foxek
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб дек 28, 2013 20:31:22

Re: USART Framing error[STM32F103]

Сообщение Foxek »

ой тыж гений какой. А по умнее что либо сказать?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: USART Framing error[STM32F103]

Сообщение 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 переведен из режима "команд" в режим "данные" ?
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «ARM»