新聞中心

STM32 USART中斷小程序

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

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

1. 配置RCC的時機(jī)

在主程序中通過查詢方式收發(fā)數(shù)據(jù)時,結(jié)果并不穩(wěn)定。對比了ST提供的例程中的設(shè)置,將RCC配置提到了所有配置的最前面后,功能實現(xiàn)。結(jié)論:應(yīng)先配置RCC,再初始化其他外設(shè)。

2. RAM下調(diào)試遇到的問題

在上述查詢方式的基礎(chǔ)上,增加對NVIC的配置,USART的中斷設(shè)置,以及ISR中的處理過程,放到RAM下調(diào)試,無法進(jìn)入ISR。有以下兩個測試結(jié)果:1)在主程序while中調(diào)用USART_GetITStatus,判斷USART中斷事件是否發(fā)生及中斷是否使能,結(jié)果為SET。2)在調(diào)試時看NVIC的寄存器,USART1已經(jīng)enable了,說明寄存器已經(jīng)寫入。上述兩點結(jié)果下,程序從理論上應(yīng)該進(jìn)入中斷。百思不得其解之下,鬼使神差地把程序放到flash下,一切問題煙消云散,程序跑通,在ISR中處理了收發(fā)事件。

flash和ram下程序的不同動作,原因未知,做了如下一些對比(心疼我的flash啊):

T表示只設(shè)置了USART發(fā)送中斷,R表示只設(shè)置了USART接收中斷??梢钥闯?,不是在FLASH的程序中是否設(shè)置過NVIC的問題。導(dǎo)致錯誤的原因可能是flash下和ram下程序的固件庫版本不同。當(dāng)程序加載到flash或ram中后,系統(tǒng)是如何運行程序的?兩者之間是否有干擾和影響?這點需要進(jìn)一步學(xué)習(xí)。

3. 其他問題

在做2中的試驗時,希望在flash內(nèi)無程序時,在RAM中調(diào)試看結(jié)構(gòu)。但用J-Flash ARM V4.08l擦除flash后,keil中無法調(diào)試,顯示core is locked up, cpu halted。網(wǎng)上搜到說在J-Flash ARM V4.08l中target->unsecure chip->重新上電,就可以解鎖。如法炮制,失敗。因此在2中的試驗中只能在flash中燒入空程序。解決方法需要繼續(xù)摸索。



關(guān)鍵詞: STM32USART中

評論


技術(shù)專區(qū)

關(guān)閉