虽然说单片机开发就是对手册的研究,但是开发过程中,还是要做些笔记的,方便以后注意那些坑.

工作要求所以接触了一下STM328s00f3这个芯片,配置外部中断的时候遇到了一点问题

PS:IAR这个开发软件真不好用.

外部中断:

配置PD口的外部中断是,发现EXTI_CR1寄存器无法写入.于是开始寻找原因.

在配置EXTI_CR1寄存器时看见"

这些位仅在CC寄存器的I1和I0位都为1(级别3)时才可以写入。这些位定义端口D 的
中断触发位

"这句话,但是CC寄存器要如何配置呢?

STM 8s 外部中断寄存器无法写入-LMLPHP

首先来看看这个寄存器的描述,默认值是符合前面的要求的,并且I1 和 I0是rw的,于是尝试写入,但是没有找到地址的相关说明.

STM 8s 外部中断寄存器无法写入-LMLPHP

STM 8s 外部中断寄存器无法写入-LMLPHP

 #ifdef __cplusplus
extern "C"
{
#endif __intrinsic void __enable_interrupt(void); /* RIM */
__intrinsic void __disable_interrupt(void); /* SIM */ __intrinsic __istate_t __get_interrupt_state(void);
__intrinsic void __set_interrupt_state(__istate_t); /* Special instruction intrinsics */
__intrinsic void __no_operation(void); /* NOP */
__intrinsic void __halt(void); /* HALT */
__intrinsic void __trap(void); /* TRAP */
__intrinsic void __wait_for_event(void); /* WFE */
__intrinsic void __wait_for_interrupt(void); /* WFI */ /* Bit manipulation */
__intrinsic void __BCPL(unsigned char __near *, unsigned char);
__intrinsic void __BRES(unsigned char __near *, unsigned char);
__intrinsic void __BSET(unsigned char __near *, unsigned char); #ifdef __cplusplus
}
#endif

后来在库文件中找到了__enable_interrupt(); 只需要在这个函数之前配置外部中断寄存器就好了.

    Fun_HardInit_Hall(); //hall硬件初始化
// 开总中断
__enable_interrupt();

哈哈,有点水哈   没有从寄存器说明真正的原因,以后查到了,再更新吧,IAR也没有寄存查看的功能SWIM的调试调试真的好难用.

05-11 18:10