新聞中心

STM32 USART中斷小程序

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
盡管網(wǎng)上的例程一堆堆,但還是花了好幾天時(shí)間才跑通了一個(gè)USART通過(guò)中斷方式實(shí)現(xiàn)的小程序。相當(dāng)無(wú)比地郁悶啊。記錄一下遇到的問(wèn)題:

本文引用地址:http://butianyuan.cn/article/201611/317053.htm

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ù)摸索。



關(guān)鍵詞: STM32USART中

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉