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

 
 
> STM32F407IG, непонятое поведение бита TC в регистре USART3->SR
sidy
сообщение Jul 26 2012, 09:11
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Здравствуйте уважаемы форумчане, осваиваю STM32F407IG и столкнулся с такой проблемой при первом запуске программы срабатывает прерывание по окончанию передачи, т.е. устанавливается бит TC в регистре USART3->SR, хотя я еще ничего не передавал. Ниже кусок кода:
CODE
//********************************************************************************
//*Настройка прерываний
//********************************************************************************
NVIC_EnableIRQ (USART3_IRQn); //Разрешаем прерывние USART3
USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
//********************************************************************************
//*Разрешаем работу USART3: //********************************************************************************
USART_Cmd(USART3, ENABLE); //Разрешаем работу USART3
USART3->SR&=~USART_SR_TC;
while(1){
data=0;
};
}

void USART3_IRQHandler (void) {
//********************************************************************************
//* RS485 прерывание от приемника
//********************************************************************************
//if ((USART3->SR&USART_SR_RXNE)){
if (USART_GetITStatus(USART3, USART_IT_RXNE)==SET){
RS485_Buffer[RS485_Count]=USART_ReceiveData(USART3);
RS485_Count++;
}
//********************************************************************************
//*RS485 прерывание от передатчика
//********************************************************************************
//if((USART3->SR&USART_SR_TC)){
if (USART_GetITStatus(USART3, USART_IT_TС)==SET){
USART3->SR&=~USART_SR_TC;//Очищаем флаг окончания передачи
USART3->DR=RS485_Buffer[RS485_Count++];
};
}

Когда я смотрю отладчиком бит TC устанавливается после разрешения тактирования переферийного модуля USART3, затем сбрасывается когда разрешаются прерывания USART3: NVIC_EnableIRQ (USART3_IRQn); затем усанавливается, когда разрешается работа модуля USART3: USART_Cmd(USART3, ENABLE).
После этого я сбрасываю этот бит USART3->SR&=~USART_SR_TC;. Затем я ставлю точку останова в функции прерывания после строки if (USART_GetITStatus(USART3, USART_IT_TС)==SET) и при первом же запуске попадаю на эту точку останова. Никак не могу понять с чем это связано, ведь данный бит устанавливается после завершения передачи, а я еще ничего не передавал.

Сообщение отредактировал IgorKossak - Jul 26 2012, 09:45
Причина редактирования: [codebox] для длинного кода
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:16
Рейтинг@Mail.ru


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