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

 
 
> STM32F100 USART1 виснет в прерывании. Что делаю не так?, Не получается заставить работать USART1 на прерываниях.
NeoMage
сообщение Jun 11 2012, 19:15
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 5-06-12
Пользователь №: 72 183



STM32F100 UART1 когда уходит на прерывание - зависает. Точку останова на прерывании не
ставиться (IAR 6.21).
Если обработчик прерывания оставляю пустым (оставляю только сброс прерывания)- тоже
виснет.
Причем программа работает, а как только от компьютера отправляю байт контроллеру - он
виснет, даже если функция по приему прерывания пустая.
Может неправильно биты прерывания сбрасываю и он в цикл уходит?
Полная программа во вложении. Помогите пожалуйста.
.... инициализация ....
.....
USART1->CR1 |= USART_CR1_TE;
USART1->CR1 |= USART_CR1_RE;
USART1->CR1 |= USART_CR1_RXNEIE;
.....
Обработчик прерывания (отправляет/принемает в буфер)
....
void USART1_IRQHandler(void)
{
if((USART1->SR & USART_SR_RXNE)) //Если прием
{
USART1->SR &= ~USART_SR_RXNE; //сброс флага
rx1_buffer[rx1w] = USART1->DR ; // сохраняем байт в буфер
if(rx1w >= (RX1_BUFFER_SIZE - 1)) //
{
rx1w = 0; //
} else {
rx1w++; //
};
};
if((USART1->SR & USART_SR_TXE)) //по опустошению
{
USART1->SR &= ~USART_SR_TXE; //сброс флага
USART1->DR = tx1_buffer[tx1r];
if(tx1r >= (TX1_BUFFER_SIZE - 1)) //
{
tx1r = 0; //
} else {
tx1r++; //
};
tx1_count++;
if(tx1_count == TX1_BUFFER_SIZE) USART1->CR1 &= ~USART_CR1_TXEIE; //Если все отправили -
выключаем прерывание на отправку
}
}
Прикрепленные файлы
Прикрепленный файл  USART1.ZIP ( 92.34 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post



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

 


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


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