本帖最后由 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权威指南。
一周热门 更多>