реклама на сайте
подробности

 
 
> недогоняю про UART STM32 103, прерывания уарта
Tanker
сообщение Jul 13 2009, 18:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Здравствуйте!
побаловался с Primer2 (в основном с экранчиком), и решил сделать первый реальный продакт на кортексе от STM, выбрал 103-й, вот он запаян на первой итерации девайса, и я уже моргаю светками по прерываниям таймера (прогу заливаю по UART1 флэшером от STM), следующй шаг - связь, пытаюсь, чтобы понять основы, сделать - ЭХО, т.е. отправляю ему байтик, он мне его же обратно отсылает.
пишу следующий обработчик прерывания:
Код
void USART1_IRQHandler(void)
{
  vu16 Echo;
  static vu8 i = 0;
  
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    USART_ClearITPendingBit(USART1, USART_IT_RXNE | USART_IT_TXE);//почистил все битики прерываний от уарта
    Echo = USART_ReceiveData(USART1);//получил пришедшие данные
    USART_SendData(USART1, Echo);//и отправляю их обратно
  }
  if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
  {  
    USART_ClearITPendingBit(USART1, USART_IT_TXE | USART_IT_TC);//попав в прерывания по ТХ, просто чищу битики, чтобы более сюда не заходить
  }
//контроль захода в прерывание
  if (i == 0) {
    GPIO_WriteBit(GPIOB, GPIO_Pin_6 , Bit_SET);
    i = 1;
  }
  else {
    GPIO_WriteBit(GPIOB, GPIO_Pin_6 , Bit_RESET);
    i = 0;
  }
}


выяснил, что проц выполняет заход в прерывание юарта сразу после ребута, хотя в инициализации я зачищаю все источники прерывания по уарту
Код
USART_ClearITPendingBit(USART1, USART_IT_RXNE | USART_IT_TXE);
  /* Enable USART1 Receive and Transmit interrupts */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);


а самое прикольное, что написанный выше обработчик прерывания вызывает зависание проца ! какой-то флажок - инициатор прерывания не сбрасывается, и интерраптица постоянно...

ЭХО (1 раз) я получал, но для этого я (как в многочисленных примерах) запрещал прерывания по RX когда отправляю байтик, и запрещал прерывания по TX перед приёмом байтика, далее все прерывания оказывались заблокированными и эхо больше не появлялось

все экзамплы пересмотрел и док вроде перекурил, я конечно делаю по своему, но не с понталыку (и на LPC у меня есть 2 проекта, где обмен по всем 4-м уартам чуть ли не основная функция девайсов)
в общем чо не так делаю? ткните пальцем.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01337 секунд с 7
ELECTRONIX ©2004-2016