Forum Replies Created
-
AuthorPosts
-
Carmine NovielloKeymaster
Allora mi sa che l’origine dei tuoi problemi sono stato io. In pratica, su github il file main-ex1.c conteneva il codice di main-ex2.c e viceversa. Erano stati invertiti gli esempi. Comunque, il problema di UART1 era sempre che mancava l’ISR.
Ho sistemato tutto su github. Grazie per avermi fatto notare la cosa (mi meraviglio che nessuno ad oggi me l’aveva detto).
Carmine NovielloKeymasterSvelato l’arcano. È si mio codice (anche se non è fedele al testo del libro e devo cambiarlo), ma il file stm32f4xx_it.c non è quello dei miei esempi, dove l’ISR è definita. Perciò con i progetti originali del libro va.
Carmine NovielloKeymasterAllora, UART_Polling funziona e quindi non mi sono applicato.
UART1 ha un problema: attivi l’IRQ ma non definisci l’ISR:
1234void USART2_IRQHandler() {HAL_UART_IRQHandler(&huart2);}Quindi ti va nel Default_Handler definito nel vettore di interrupt. Ti basta mettere il debug in pausa e ti accorgi di dove è finito il PC.
Ma sei sicuro che sia fedelmente codice mio? Perché mixa polling mode ed IT mode, e se non ricordo male io le due cose le tenevo separate.Carmine NovielloKeymasterComunque, se puoi mettimi questo progetto da qualche parte e mandami il link
Carmine NovielloKeymasterElimina solo la macro OS_USE_SEMIHOSTING e lascia tutto il resto invariato.
Carmine NovielloKeymasterFai anche una prova: prova a chiudere Eclipse quando ti connetti con Putty. Non vorrei che c’è qualche problema con il plug-in di RXTX che blocca la porta.
Carmine NovielloKeymasterSi, disabilita il semihosting.
Carmine NovielloKeymasterSe nell’elenco delle periferiche ti appare la VCP e non ci sono segnalazioni strane, allora fai sta prova. Gira la Nucleo e fai corto fra i pad RST e SB11, come mostrato sotto:
Una volta finita l’enumerazione, stacca la USB, riattacala, collegati con l’emulatore da terminale e premi il pulsante di RESET.
Carmine NovielloKeymasterDovresti vedere la console creata con il primo esercizio del capitolo 8:
1234567Welcome to the Nucleo management consoleSelect the option you are interested in:1. Toggle LD2 LED2. Read USER BUTTON status3. Clear screen and print this message> 2Hai una F401RE, giusto?
A questo punto c’è un problema di driver. Se il FW della ST-LINK e 2.24MJ11 o superiore (i precedenti hanno un bug alla VCP), allora c’è un problema di driver. Forse è connesso con il problema iniziale che avesti.
Carmine NovielloKeymasterAndiamo per gradi, o non ne usciamo.
Scaricati questi binari e caricali con l’ST-LINK Utility. La UART è configurata come 8N1 38400.
http://www.carminenoviello.com/stm32-nucleof401-uart.zip
Vedi qualcosa?
Carmine NovielloKeymasterNo, il semihosting non serve e anzi è meglio tenerlo disabilitato, altrimenti se non sei in una sessione di debug il processore va in stallo (perché prima dell’esecuzione del main, vengono stampati i registri Cortex sullo STDOUT).
Carmine NovielloKeymasterPurtroppo da qua è difficile capire. Gli esempi del libro relativi alla UART funzionano? Mi riferisco proprio a se importi quei progetti in Eclipse e li compili.
La VCP della ST-LINK è riconosciuta da Windows?
Carmine NovielloKeymasterCiao,
è sbagliato l’indirizzo di partenza della FLASH nel file mem.ld, che deve essere uguale a 0x08000000 e non 0x00000000.Carmine NovielloKeymasterSi hai ragione, anche quello è un errore. Purtroppo all’epoca ci fu un problema con i sorgenti degli esempi (gli esempi nel testo del libro sono generati automaticamente dagli esempi, non sto qui a spiegare come….). Nella prossima release si sistemerà tutto.
Venendo alla tua domanda, ci sono due motivi per cui ciò succede:
- Tutti i più recenti STM32 hanno un forte indirizzo verso il “low-power”, anche quelli non della serie “L”. Le resistenze di pull-up/down interne sono molto alte, per ridurre i leak, e quindi gli I/O sono “poco tirati” (lasciami passare il termine) verso massa/VDD e basta poco per far “fluttuare” lo stato logico della porta.
- Il codice non applica alcuna politica di debouncing, e quindi una transitoria fluttuazione dell’I/O (indotta dal fatto che ti basta toccare il pin) non viene adeguatamente gestita e “ignorata”. Ci sono vari modi per fare questo: o tramite hardware (un trigger di schmitt in genere fa il suo lavoro) o software (ad esempio, usando come pin di input un canale di un timer in modalità input capture sui cui è stato anche definito un filtro adeguato (vedi capitolo 11).
Carmine NovielloKeymasterYou can download this file:
Place it in the same folder where you fine the startup_stm32f030xb.S and delete the startup_stm32f030xb.S. Don’t forget to rename the filename from startup_stm32f030xb.s to startup_stm32f030xb.S
-
AuthorPosts