STM32 USART中斷小程序
1. 配置RCC的時(shí)機(jī)
在主程序中通過(guò)查詢(xún)方式收發(fā)數(shù)據(jù)時(shí),結(jié)果并不穩(wěn)定。對(duì)比了ST提供的例程中的設(shè)置,將RCC配置提到了所有配置的最前面后,功能實(shí)現(xiàn)。結(jié)論:應(yīng)先配置RCC,再初始化其他外設(shè)。
2. RAM下調(diào)試遇到的問(wèn)題
在上述查詢(xún)方式的基礎(chǔ)上,增加對(duì)NVIC的配置,USART的中斷設(shè)置,以及ISR中的處理過(guò)程,放到RAM下調(diào)試,無(wú)法進(jìn)入ISR。有以下兩個(gè)測(cè)試結(jié)果:1)在主程序while中調(diào)用USART_GetITStatus,判斷USART中斷事件是否發(fā)生及中斷是否使能,結(jié)果為SET。2)在調(diào)試時(shí)看NVIC的寄存器,USART1已經(jīng)enable了,說(shuō)明寄存器已經(jīng)寫(xiě)入。上述兩點(diǎn)結(jié)果下,程序從理論上應(yīng)該進(jìn)入中斷。百思不得其解之下,鬼使神差地把程序放到flash下,一切問(wèn)題煙消云散,程序跑通,在ISR中處理了收發(fā)事件。
flash和ram下程序的不同動(dòng)作,原因未知,做了如下一些對(duì)比(心疼我的flash啊):
T表示只設(shè)置了USART發(fā)送中斷,R表示只設(shè)置了USART接收中斷??梢钥闯觯皇窃贔LASH的程序中是否設(shè)置過(guò)NVIC的問(wèn)題。導(dǎo)致錯(cuò)誤的原因可能是flash下和ram下程序的固件庫(kù)版本不同。當(dāng)程序加載到flash或ram中后,系統(tǒng)是如何運(yùn)行程序的??jī)烧咧g是否有干擾和影響?這點(diǎn)需要進(jìn)一步學(xué)習(xí)。
3. 其他問(wèn)題
在做2中的試驗(yàn)時(shí),希望在flash內(nèi)無(wú)程序時(shí),在RAM中調(diào)試看結(jié)構(gòu)。但用J-Flash ARM V4.08l擦除flash后,keil中無(wú)法調(diào)試,顯示core is locked up, cpu halted。網(wǎng)上搜到說(shuō)在J-Flash ARM V4.08l中target->unsecure chip->重新上電,就可以解鎖。如法炮制,失敗。因此在2中的試驗(yàn)中只能在flash中燒入空程序。解決方法需要繼續(xù)摸索。
評(píng)論