雖說單片機開發就是對手冊的研究,可是開發過程當中,仍是要作些筆記的,方便之後注意那些坑.函數
工做要求因此接觸了一下STM328s00f3這個芯片,配置外部中斷的時候遇到了一點問題spa
PS:IAR這個開發軟件真很差用.調試
外部中斷:code
配置PD口的外部中斷是,發現EXTI_CR1寄存器沒法寫入.因而開始尋找緣由.orm
在配置EXTI_CR1寄存器時看見"blog
這些位僅在CC寄存器的I1和I0位都爲1(級別3)時才能夠寫入。這些位定義端口D 的 中斷觸發位 |
"這句話,可是CC寄存器要如何配置呢?ip
首先來看看這個寄存器的描述,默認值是符合前面的要求的,而且I1 和 I0是rw的,因而嘗試寫入,可是沒有找到地址的相關說明.ci
1 #ifdef __cplusplus 2 extern "C" 3 { 4 #endif 5 6 __intrinsic void __enable_interrupt(void); /* RIM */ 7 __intrinsic void __disable_interrupt(void); /* SIM */ 8 9 __intrinsic __istate_t __get_interrupt_state(void); 10 __intrinsic void __set_interrupt_state(__istate_t); 11 12 /* Special instruction intrinsics */ 13 __intrinsic void __no_operation(void); /* NOP */ 14 __intrinsic void __halt(void); /* HALT */ 15 __intrinsic void __trap(void); /* TRAP */ 16 __intrinsic void __wait_for_event(void); /* WFE */ 17 __intrinsic void __wait_for_interrupt(void); /* WFI */ 18 19 /* Bit manipulation */ 20 __intrinsic void __BCPL(unsigned char __near *, unsigned char); 21 __intrinsic void __BRES(unsigned char __near *, unsigned char); 22 __intrinsic void __BSET(unsigned char __near *, unsigned char); 23 24 #ifdef __cplusplus 25 } 26 #endif
後來在庫文件中找到了__enable_interrupt(); 只須要在這個函數以前配置外部中斷寄存器就行了.開發
Fun_HardInit_Hall(); //hall硬件初始化 // 開總中斷 __enable_interrupt();
哈哈,有點水哈 沒有從寄存器說明真正的緣由,之後查到了,再更新吧,IAR也沒有寄存查看的功能SWIM的調試調試真的好難用.get