Easyelectronics.ru

Электроника для всех
Текущее время: 28 сен 2020, 03:36

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: UART5 издевается.
СообщениеДобавлено: 02 июн 2012, 22:52 
Только пришел

Зарегистрирован: 02 июн 2012, 22:49
Сообщения: 5
Чип stm32f205vgt6. По задаче надо задействовать 5 UART портов.
Не ловит на прием.

Вот код инициализации UART5:

Код:
   USART_InitTypeDef USART_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;
   GPIO_InitTypeDef GPIO_config;
   
   USART_DeInit(UART5);
       
   USART_InitStructure.USART_BaudRate = 9600;
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
     USART_InitStructure.USART_StopBits = USART_StopBits_1;
   USART_InitStructure.USART_Parity = USART_Parity_No;
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);

   // Configure TX pin on PC12
   GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5);
   GPIO_StructInit(&GPIO_config);
   GPIO_config.GPIO_Pin = GPIO_Pin_12;
   GPIO_config.GPIO_Mode = GPIO_Mode_AF;
   GPIO_config.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_config.GPIO_OType = GPIO_OType_PP;
   GPIO_Init(GPIOC, &GPIO_config);

   // Configure RX pin on PD2

   GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5);
   GPIO_StructInit(&GPIO_config);
   GPIO_config.GPIO_Pin = GPIO_Pin_2;
   GPIO_config.GPIO_Mode = GPIO_Mode_AF;
   GPIO_config.GPIO_PuPd = GPIO_PuPd_UP;
   GPIO_Init(GPIOD, &GPIO_config);

   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;

   NVIC_Init(&NVIC_InitStructure);
   
   USART_ITConfig(UART5, USART_IT_TXE, DISABLE);
   USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);
   USART_StructInit(&USART_InitStructure);
   USART_Init(UART5, &USART_InitStructure);
   USART_Cmd(UART5, ENABLE);


Функция прерывания:
Код:
void UART5_IRQHandler(void)
{
    uint8_t ch;
    if (USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)
    {
        ch=(uint8_t)USART_ReceiveData(UART5);
        //put char to the buffer
        BufferPut(&URx[4], ch);
        USART_ClearITPendingBit(UART5, USART_IT_RXNE);// Снимаем флаг прерывания
    }
    if (USART_GetITStatus(UART5, USART_IT_TXE) != RESET)
    {
            if (BufferGet(&UTx[4], &ch) == SUCCESS)//if buffer read
            {
                USART_SendData(UART5, ch);
                while (USART_GetFlagStatus(UART5, USART_FLAG_TXE) == RESET);
            }else{//if buffer empty
                USART_ITConfig(UART5, USART_IT_TXE, DISABLE);
            }
            USART_ClearITPendingBit(UART5, USART_IT_TXE);
    }
}


Отправка байта данных:
Код:
BufferPut(&UTx[4], ch);
USART_ITConfig(UART5, USART_IT_TXE, ENABLE);


Порты с 1 по 4 все работают на ура.Отличие инциализации только в ногах контроллера.

Осцилографом даже проверили. До ноги PD2 осмысленный ответ от устройства и на частоте 9600 доходит.
А вот код не ловит прерывания на прием. На отправку все работает отлично.
Я даже прерывание отменял, пробовал в цикле порт опрашивать. И тишинааааа.
МОжет кто сталкивался, голову уже поломал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART5 издевается.
СообщениеДобавлено: 03 июн 2012, 01:22 
Заглядывает иногда

Зарегистрирован: 26 янв 2010, 23:31
Сообщения: 105
Откуда: Тольятти
HerrJohan писал(а):
Осцилографом даже проверили. До ноги PD2 осмысленный ответ от устройства и на частоте 9600 доходит.
А вот код не ловит прерывания на прием. На отправку все работает отлично.
Я даже прерывание отменял, пробовал в цикле порт опрашивать. И тишинааааа.
МОжет кто сталкивался, голову уже поломал.

Попробуйте PD2 сконфигурировать просто "плавающим" входом, без подтяжек и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART5 издевается.
СообщениеДобавлено: 03 июн 2012, 01:48 
Только пришел

Зарегистрирован: 02 июн 2012, 22:49
Сообщения: 5
himera писал(а):
HerrJohan писал(а):
Осцилографом даже проверили. До ноги PD2 осмысленный ответ от устройства и на частоте 9600 доходит.
А вот код не ловит прерывания на прием. На отправку все работает отлично.
Я даже прерывание отменял, пробовал в цикле порт опрашивать. И тишинааааа.
МОжет кто сталкивался, голову уже поломал.

Попробуйте PD2 сконфигурировать просто "плавающим" входом, без подтяжек и т.д.

Только что.
Пробовал и GPIO_PuPd_DOWN и GPIO_PuPd_NIPULL. Не реагирует


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART5 издевается.
СообщениеДобавлено: 03 июн 2012, 14:20 
Только пришел

Зарегистрирован: 02 июн 2012, 22:49
Сообщения: 5
Сюжет получил развитие. Устройство (SIM900) перепаяли вместо UART5 на USART1. И там все работает. Мистика...

Мысль была такова, что SIM900 ответ отдает на 2.8 вольта.
Кристаллу по идее надо 3.3, но понимает вплоть до 2.4
Суть такова что может кристаллу было мало. Но на 1 порту заработало...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART5 издевается.
СообщениеДобавлено: 03 июн 2012, 17:59 
Старожил

Зарегистрирован: 25 апр 2010, 10:13
Сообщения: 1927
Откуда: Томск
А пробовал ремапить на другие ноги(лучше если есть ремап на другой порт)?

_________________
Какое небо голубое....(с) лиса Алиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART5 издевается.
СообщениеДобавлено: 03 июн 2012, 22:56 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 июл 2010, 21:24
Сообщения: 164
Откуда: СПб
HerrJohan писал(а):
Сюжет получил развитие. Устройство (SIM900) перепаяли вместо UART5 на USART1. И там все работает. Мистика...

Мысль была такова, что SIM900 ответ отдает на 2.8 вольта.
Кристаллу по идее надо 3.3, но понимает вплоть до 2.4
Суть такова что может кристаллу было мало. Но на 1 порту заработало...

Попробуйте запитать МК тем же напряжением, что и SIM900, т.е. 2.8В

Ремарка, не гуд на SIM900 на пины подавать напряжение более 3В

_________________
Для связи email: info собака qbit.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART5 издевается.
СообщениеДобавлено: 04 июн 2012, 13:28 
Только пришел

Зарегистрирован: 02 июн 2012, 22:49
Сообщения: 5
hardegor писал(а):
А пробовал ремапить на другие ноги(лучше если есть ремап на другой порт)?
Так о том и писал. На 1 и 4 порту, когда перекинули просто соплями, все прекрасно работает. Чипы были из первой партии. Видимо поэтому. Есть подозрение что 5 и 6 вообще не работают.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB