STM32F051 zvlastne spravanie sa USART FLAGov
Stano
stano.hw na gmail.com
Středa Březen 18 19:05:02 CET 2015
Zdravim konferenci
Narazil som na zvlastne chovanie flagov USARTu ktore si neviem vysvetlit
Ked dam breapoint na zaciatok IRQ rutiny, riadok: void USART1_IRQHandler
(void) {
Tak pri prijati znaku debugger zastavy ako ma ale ked krokujem dalej
alebo dam aj run
status = usart->ISR; uz do premennej nezapise flag RXNE.
Pricom pri sastaveni breakpointu ho vidim nastaveny ale dalsim krokom
debugu sa vymaze.
(v tomto teste poctivo citam data z USART1->RDR registra, error flagy
nenastanu}
Druhy problem ktory myslim ma rovnaku pricinu.
Zmazal som z rutiny dat citanie z USART1->RDR registra s cielom
vygenerovat Overrun error.
Posielam na usarte znaky cca 1 za sekundu a nic, ORE flag nenastava.
Ked som poslal ale 2 s medzerou iba 250ms odrazu sa ORE nastavil.
Ale pri pomalom posielani dat ako keby nieco nulovalo RXNE a tym aj ORE.
Prvy problem moze byt sposobeny tym istym, kedze medzi zastavenim a
spustenim programu,
alebo dalsieho kroku uplynie doba ktora by mohla byt na tento jav
dostatocne dlha.
USART timeout feature mam vypnutu (skusal som aj zapnut, bez zmeny)
Watchdog nieje povoleny, v procesore nebezia ziadne dalsie interrupty a
v main slucke je len
while(1);
Mate niekto aspon tusenie cim to moze byt? V principe to prilis nevadi
kedze v aplikacii nepredpokladam
situaciu ze by boli taketo dlhe casy na spracovanie eventu. Ale
"sprijemnuje" to debugovanie.
SPU STM32F051R8T6
Revizia B
Taktovany na 48MHz z HSE. (default startup kod)
Usart nastaveny na 115200Bd 8N1
Hruba kostra IRQ vektora:
void USART1_IRQHandler (void) {
{
volatile uint32_t status;
uint32_t lastRxError;
status = usart->ISR;
if (status & USART_ISR_RXNE){
}
if (status & USART_ISR_TXE) {
}
if(status & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE |
USART_ISR_ORE)){
// Error flag
}
}
S pozdravom,
Stano
Další informace o konferenci Hw-list