Например TDA7294

Форум РадиоКот • Просмотр темы - Не выставляется RXNE флаг и не работают прерывания в USART
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июн 24, 2025 11:17:48

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Не выставляется RXNE флаг и не работают прерывания в USART
СообщениеДобавлено: Вс июн 16, 2024 18:07:47 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 30, 2023 14:12:33
Сообщений: 25
Рейтинг сообщения: 0
Добрый день! Писал на cmsis, не работало, переписал на SPL - не работает опять. TX замкнул на RX, поэтому проблема только в коде. Функция отправки работает нормально, но виснет прием данных. Пытался сделать прерывания по RXNE флагу, также не работает. Подскажите, пожалуйста, что не так?
Код:
   GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_StructInit(&GPIO_InitStructure);

   /* ENABLE GPIOC clock */
   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

   /* ENABLE USART clock */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

   /* Configure GPIOC4, GPIOC5 pins, AF7 */
   GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_7);
   GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_7);

   /* Mode */
   // PС4 -> TX UART
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
   GPIO_Init(GPIOC, &GPIO_InitStructure); //инициализируем

   //PС5  -> RX UART
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
   GPIO_Init(GPIOC, &GPIO_InitStructure);//инициализируем

   /* Configure USART */
   USART_InitTypeDef USART_InitStructure;
   USART_StructInit(&USART_InitStructure);

   /* UART mode (RX, TX) */
   USART_InitStructure.USART_Mode = (USART_Mode_Rx | USART_Mode_Tx);
   USART_InitStructure.USART_BaudRate = 115200;
   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_Init(USART1, &USART_InitStructure);

   //UART_IT_Init();

   /* USART Start */
   USART_Cmd(USART1, ENABLE);

Отправка данных
Код:
void UART_SendStr(USART_TypeDef* USARTx, const uint8_t* s, uint32_t len){
   uint32_t p = 0;
   while (p < len){
      while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
      USART_SendData(USARTx, s[p]);
      p++;
   }
}

Прием данных (тут я уже до максимума упростил; в цикле виснет)
Код:
   while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);
   return USART_ReceiveData(USARTx);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 18:38:08 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23838
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
А где включение разрешений в NVIC?
Да и локальные разрешения я в приведенном коде не обнаружил.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 18:48:29 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 30, 2023 14:12:33
Сообщений: 25
Рейтинг сообщения: 0
Все это делалось в функции UART_IT_Init, которая, как Вы видите, закомментирована. Проблема не в этом


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 18:51:43 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23838
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Все это делалось

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


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 19:43:17 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 30, 2023 14:12:33
Сообщений: 25
Рейтинг сообщения: 0
Извините, не очень понимаю, что должен показать отладчик. Ну, вот, не выставляется флаг/не вызывается прерывание. Вешал прерывание также на RXNE, если я правильно понимаю, если RXNE флага нету, то и прерывания тоже не будет
Код:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
. Так что в таком случае может отладчик показать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 19:50:33 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23838
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Отладчик должен показать ТРИ вещи.
Наличие локального разрешения по ожидаемому флагу, наличие разрешения в NVIC и наличие самого ожидаемого флага.
Вот и все.
При наличии обоих разрешений и отсутствии флага - неверно мапирован пин приемника. То есть тупо нет входного сигнала на USARTе.
При отсутствии любого из разрешений копайте код в месте ожидаемой инициализации этих разрешений.

Добавлено after 2 minutes 15 seconds:
Re: Не выставляется RXNE флаг и не работают прерывания в USART
ЗЫ. Недостаток SPL в неявной инициализации. Думаете, что все сделали, а на самом деле... )))


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 20:12:42 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 30, 2023 14:12:33
Сообщений: 25
Рейтинг сообщения: 0
Ну, справедливости ради, я писал на cmsis, просто решил попытаться, авось заработает) Спасибо большое за наводки, завтра буду пробовать разбираться вновь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 21:20:38 
Прорезались зубы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 22
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 247
Рейтинг сообщения: 0
Ну, вот, не выставляется флаг/не вызывается прерывание. Вешал прерывание также на RXNE, если я правильно понимаю, если RXNE флага нету, то

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Вс июн 16, 2024 21:28:51 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23838
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
обработчик прерывания должен обрабатывать также флаг ORE

Оверран так же должен вызвать прерывание с тем же разрешением, что и прием, а его нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не выставляется RXNE флаг и не работают прерывания в USA
СообщениеДобавлено: Пн июн 17, 2024 18:57:27 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 30, 2023 14:12:33
Сообщений: 25
Рейтинг сообщения: 4
Блин, мужики, я фееричный болван) Функцию инициализации (та, что первая) тупо забыл вызвать :)) Сижу еще, думаю... Всем спасибо за ответы, а мне нужно быть чуточку внимательнее. Вопрос решен


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

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y