本帖最后由 KCLin 于 2016-2-3 22:32 编辑
最近研讀到串口通訊實驗main() 程式
一開始是做各種初始化
然後while(1){
if(USART_RX_STA&0x8000)
{ ..... }
這段應該是說,有 data 進來
但是,是哪個程式去讀了關於 USART_RX_STA 的變化?
做了 Debug 實在是追不到!
又 在 usart.c 裡面
除了一些串口的初始化之外
還多了
void USART1_IRQHandler(void)
{..........}
我大概知道,這個函數是要告訴系統,如果系統發生中斷,就來 run 這個函數
那麼,又是哪個程式負責呼叫他的?!
是不是這個函數,其中一個參數必須是 *USART1_IRQHandler
也就是傳遞中斷發生時觸發函數的 位置
(所以其實中斷觸發函數的名稱我們也可以隨意設定,只要把要做的函數位置正確傳遞即可?)
而
這是不是跟 USART_RX_STA 的變化有關?
新手,邏輯被搞得有些亂了
請各位前輩高手幫助解惑,感謝
建议你先看看cortex-m3权威指南,还有你所用芯片的手册。楼主用的应该是ST公司的stm32f103吧?那么,
USART_RX_STA 所对应的内存地址应该在stm32f103手册里有说明的,在程序的头文件里面也是可以搜索到的。
至于说中断是调用哪个函数,这个也是芯片预先约定好的,发生中断后,硬件会将对应中断的特定地址的数据复制到程序计数器PC,也就是说程序将跳转到PC处执行。具体到你说的startup_stm32f40_41xxx.s,编译器会将这段程序链接到特定的位置,其中用DCD分配的位置正好就对应了硬件提取的对应中断的地址。如果你将DCD USART1_IRQHandler改为 DCD USARTxxx,那么,你的中断函数名字也必须改为USARTxxx,否则编译器会提示报错说找不到这个函数。
最后,建议楼下还是先去看看cortex-m3权威指南。
以下是"原子探索者" 官方教材 " STM32F4 开发指南(库函数版) " 寫的
",一个接收状态寄存器 USART_RX_STA(此寄存器其实就是一个全局
变量,由作者自行添加。由于它起到类似寄存器的功能,这里暂且称之为寄存器)"
原子官方教材也說明,USART_RX_STA是個 "全局变量" 暂且称之为寄存器
另外,在探索者 F407 對應的STM官方參考手冊 "RM0090 Reference manual" 1010 頁,USART register map
也沒有記載關於 USART_RX_STA
甚至,對RM0090 Reference manual 搜尋,也不會發現 SART_RX_STA
至於頭文件內容是這樣
至於 m3 有沒有,那我就不知道了,畢竟我用的是 F104 不是 103
或許有空我再去找找看
感謝您的參與討論
一周热门 更多>