2016-03-27 6 views
2

Ich verwende HAL-Treiber mit Code von CubeMX generiert. In der Hauptroutine rief ich HAL_UART_Receive_IT() an. Nach dem Übertragen von Daten über UART (das in einer Loopback-Weise verbunden ist) kann ich sehen, dass das Modul ein Byte empfängt und das RXNE-Bit in Registern setzt. Interrupt wird jedoch nicht generiert? Ich kann nicht erklären, warum ... In HAL_UART_Receive_IT() Funktion gibt es Code ermöglicht Interrupts, also was ist los?STM32 HAL UART RXNE Interrupt nicht generiert

+0

Es ist ein wenig schwierig zu erraten, ohne den spezifischen Code, mein Vorschlag wäre, die E/A-Registereinstellungen im Debugger zu sehen, um Kuriositäten in der Initialisierung zu erkennen, und wenn das fehlschlägt, extrahiere einen minimalen Repro-Fall mit direkten Registerschreibvorgängen. Wie auch immer, können Sie näher erläutern, wie Sie wissen, dass der Interrupt nicht ausgegeben wird? Haben Sie überprüft, dass der Interrupt-Vektor richtig geroutet ist und Interrupts nicht global maskiert wurden? – doynax

Antwort

4

Sie geben nicht genug Informationen und Code in Ihrer Frage. Wie auch immer, in Ihrer stm32xx_hal_msp.c Datei initialisieren Sie von der Hardware Sicht Peripherie: sicher sein, Interrupts zu

HAL_NVIC_SetPriority(USART1_IRQn, 0, 1); 
    HAL_NVIC_EnableIRQ(USART1_IRQn); 

Dann

void USART1_IRQHandler(void) 
{ 
    HAL_UART_IRQHandler(&huart1); 
} 

auf Ihre stm32xx_it.c Datei hinzufügen zu aktivieren

Verwandte Themen