AnsweredAssumed Answered

UART Windows problem.

Question asked by sokolc.anton on Jan 4, 2012
Latest reply on Jan 5, 2012 by sokolc.anton
Hello. I have a stm32f103vet6. I see that data goes to PC, but I don't see anything on input in PC.My code for stm32:

#include "stm32F10x.h"
u8 SMS[]="Hello, my name is STM32F100RB!";


int main(void)
{
     u32 tmp=0;
     RCC->CR|=RCC_CR_HSEON; // Включить генератор HSE.
     while (!(RCC->CR & RCC_CR_HSERDY)) {} // Ожидание готовности HSE.
     RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1.
     RCC->CFGR |= RCC_CFGR_SW_HSE; // Выбрать HSE для тактирования SW0=1.
     RCC->APB2ENR|= RCC_APB2ENR_IOPAEN; // Разрешить тактирование порта A.
     RCC->APB2ENR|= RCC_APB2ENR_AFIOEN; // Тактирование альтернативных функций GPIO.
     RCC->APB2ENR|= RCC_APB2ENR_USART1EN; // Включение тактирования USART1.
     GPIOA->CRH |= GPIO_CRH_MODE9; // Вывод TX PA.9 - на выход.
     GPIOA->CRH &=~GPIO_CRH_CNF9; GPIOA->CRH |=GPIO_CRH_CNF9_1; // Альтернативный выход.
     USART1->CR1 |=(USART_CR1_RE | USART_CR1_TE); // Разрешить выводы RX, TX - PA10, PA9.
     // Скорость 115.2 kbps. USARTDIV=FSYS/(16*baud) = 8e6/(16*115200) = 4,34.
     USART1->BRR=(4<<4); // Целая часть коэффициента деления USART1.
     USART1->BRR|=5; // Дробная часть*16 = 0,34*16 = 5 (окр).
     USART1->CR1 |=USART_CR1_UE; // Включение USART1.


     while (SMS[tmp]) // Пока не конец строки...
     {
          while (!(USART1->SR & USART_SR_TXE)) {} // Ждать освобождения буфера.
          USART1->DR=SMS[tmp]; tmp++; // Отправить байт.
     }
     int i=0;
     while (1)
     {
          delay(200000);
          while (SMS[tmp]) // Пока не конец строки...
              {
                   while (!(USART1->SR & USART_SR_TXE)) {} // Ждать освобождения буфера.
                   USART1->DR=SMS[tmp]; tmp++; // Отправить байт.
              }
          tmp=0;
     }
}
void delay(__IO uint32_t nCount)
{
  for(; nCount!= 0;nCount--);
}

Outcomes