STM 8s 外部中断寄存器无法写入
虽然说单片机开发就是对手册的研究,但是开发过程中,还是要做些笔记的,方便以后注意那些坑.
工作要求所以接触了一下STM328s00f3这个芯片,配置外部中断的时候遇到了一点问题
PS:IAR这个开发软件真不好用.
外部中断:
配置PD口的外部中断是,发现EXTI_CR1寄存器无法写入.于是开始寻找原因.
在配置EXTI_CR1寄存器时看见"
这些位仅在CC寄存器的I1和I0位都为1(级别3)时才可以写入。这些位定义端口D 的 中断触发位 |
"这句话,但是CC寄存器要如何配置呢?
首先来看看这个寄存器的描述,默认值是符合前面的要求的,并且I1 和 I0是rw的,于是尝试写入,但是没有找到地址的相关说明.
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的调试调试真的好难用.
程序员的开发在于积累,从最开始的机器语言汇编到现在的各种高级语言集成库,记录开发点点滴滴,菜鸟也可以有高度.