ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
298456
sinsay (11.01.2012 20:01, просмотров: 2489)
Пытаюсь поймать сигнал break на stm32 ловлю его на флажок FE: Framing error, на atmege получалось и на LPC тоже. Пример кода для stm32 не пойму почему не попадаю под этот IF --> if(USART_GetITStatus(USART1, USART_IT_FE ) > 0)  void USART1_IRQHandler(void) {//0 if(USART_GetITStatus(USART1, USART_IT_RXNE) > 0) {//1 USART_ClearITPendingBit(USART1, USART_IT_RXNE); // Clear bit USART_IT_RXNE in status register intoccursuart=1; if(USART_GetITStatus(USART1, USART_IT_FE ) > 0) // framing error !!!!!Под IF никогда не попадаю {//2 fe_flag=1; k=0; badbyte = USART_ReceiveData(USART1); }//2 else {//2 usart_array[k] = USART_ReceiveData(USART1); k++; }//2 Для атмеге все работает нормально код if (checkbit(UCSRA,RXC)>0) // проверка прихода байта {//1 intoccursuart=1; if (checkbit(UCSRA,FE)>0) {//2 проверка сигнала break fe_flag=1; badbyte=UDR; }//2 else {//2 curbyte=UDR; }//2 }//1 для LPC тоже работает тут я флаг BI проверяю Break interrupt , с флагом FE тоже пробовал --> работает __ramfunc void UART0Interrupt(void) { unsigned char temp; temp=0; if (checkbit(U0IIR,1)>0) setbit(temp,0); else clearbit(temp,0); if (checkbit(U0IIR,2)>0) setbit(temp,1); else clearbit(temp,1); if (checkbit(U0IIR,3)>0) setbit(temp,2); else clearbit(temp,2); switch (temp) {//switch case 2: //010 Receive data Available {//case 2 intoccursuart=1; if(U0LSR_bit.BI > 0) //Yes--> Break interrupt // if(U0LSR_bit.FE > 0) {//2 fe_flag=1; badbyte=U0RBR; }//2 else {//2 // curbyte=UDR; curbyte=U0RBR; }//2 break; }//case 2 //---------- case 3: //011 Receive Line status {//1 break; }//1 //----------- }//switch VICVectAddr = 0; } не пойму что не так?