Перейти к содержанию
    

STM32F USART

Доброго времени суток!

Не так давно решил перейти с XMEGA на STM32 и встретил ряд проблем связаных с изучением нового микроконтроллера,

а именно с проблемой приема данных по USART, причем передача работает нормально. Я предполагаю что проблема в инициализации самого порта,

но все же как решить эту проблему я никак не пойму. Если кто знает помогите.

 

Вот моя инициализация:

USART_InitTypeDef USART_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;   
    
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

  
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_7);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_7);

      
    USART_StructInit(&USART_InitStructure);
    USART_InitStructure.USART_BaudRate = 4800;
    USART_Init(USART3, &USART_InitStructure);

    USART_Cmd(USART3, ENABLE);

 

 

Среда EWARM.

Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читаем Datasheet, User manual, AN ... с примерами иницилизации USART. Причем внимательно! ... не отвлекаясь на то как в XMEGA. И все получиться. И EWARM надеюсь соответствующей версии с поддержкой этого проца. И ... на ките это или на своей плате? И еще посмотрите с кем пересекается ваш USART3, и что на тех пинах еще сидит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нога RXD должна быть входом, TXD - выходом. А у Вас они сразу обе как выходы конфигурируются:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал TXD как вход:

USART_InitTypeDef USART_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
    
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
  
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_7);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_7);


      
    USART_StructInit(&USART_InitStructure);
    USART_InitStructure.USART_BaudRate = 4800;
    USART_Init(USART3, &USART_InitStructure);

    USART_Cmd(USART3, ENABLE);

но все же оно не работает. Подскажите как правильно инициализировать данный пин на вход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал другие USARTы и выяснилось что USART2 принимает но не передает, и не срабатывает RXNE при заверении приема. С чем это может быть связано?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал другие USARTы и выяснилось что USART2 принимает но не передает, и не срабатывает RXNE при заверении приема. С чем это может быть связано?

Покажите код связанный с прерыванием на приём.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал TXD как вход...

 

Это такая шутка или очепятка?

 

ведь выше ясно сказали

 

"Нога RXD должна быть входом, TXD - выходом."

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на 303-м и выше не нужно для AF переферии заботиться про вход/выход , просто AF и open-drain или push-pull mode.

правильно у него в первом варианте было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

 

AFIO тоже включать надо

 

 

Пробовал другие USARTы и выяснилось что USART2 принимает но не передает, и не срабатывает RXNE при заверении приема. С чем это может быть связано?

наиболее вероятно - код поддержки. нужно смотреть код, которым выполняется приём и передача данных посредство USART.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...