Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F USART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Vadim.Dyachuk
Доброго времени суток!
Не так давно решил перейти с 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.
Заранее спасибо!
Aner
ну а какой F1xx .... F4xx? По разному у них ...
Vadim.Dyachuk
STM32F303VC. Использую STM32F3-Discovery
Aner
Читаем Datasheet, User manual, AN ... с примерами иницилизации USART. Причем внимательно! ... не отвлекаясь на то как в XMEGA. И все получиться. И EWARM надеюсь соответствующей версии с поддержкой этого проца. И ... на ките это или на своей плате? И еще посмотрите с кем пересекается ваш USART3, и что на тех пинах еще сидит.
Vadim.Dyachuk
В Datasheet на STM32F3xx примеров нет... Если бы так я бы помощи не просил!
SSerge
Нога RXD должна быть входом, TXD - выходом. А у Вас они сразу обе как выходы конфигурируются:
Код
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
Vadim.Dyachuk
Сделал 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);

но все же оно не работает. Подскажите как правильно инициализировать данный пин на вход.
Vadim.Dyachuk
Пробовал другие USARTы и выяснилось что USART2 принимает но не передает, и не срабатывает RXNE при заверении приема. С чем это может быть связано?
Timma
Цитата(Vadim.Dyachuk @ Nov 20 2013, 13:41) *
Пробовал другие USARTы и выяснилось что USART2 принимает но не передает, и не срабатывает RXNE при заверении приема. С чем это может быть связано?

Покажите код связанный с прерыванием на приём.
kolobok0
Цитата(Vadim.Dyachuk @ Nov 20 2013, 11:18) *
Сделал TXD как вход...


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

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

"Нога RXD должна быть входом, TXD - выходом."
Aner
... а может он еще Rx на Rx, а Tx на Tx соединяет? Попадались мне такие.
AndrejM
на 303-м и выше не нужно для AF переферии заботиться про вход/выход , просто AF и open-drain или push-pull mode.
правильно у него в первом варианте было.
smalcom
Цитата
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);


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


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

наиболее вероятно - код поддержки. нужно смотреть код, которым выполняется приём и передача данных посредство USART.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.