我目前遇到STM USB库的一个奇怪问题。我能够成功地将固件加载到STM32L152D-EVAL板(使用STM32L152ZD)上,但是,我无法修改相同的代码以使用我的外形板,后者使用上述STM32L151CC。
在使用调试器(ULINK2,使用KEIL uVision4 IDE)逐步执行代码后,我注意到在函数USB_SIL_Init()
中设置中断掩码时代码会崩溃
uint32_t USB_SIL_Init(void)
{
/* USB interrupts initialization */
/* clear pending interrupts */
_SetISTR(0);
wInterrupt_Mask = IMR_MSK;
/* set interrupts mask */
_SetCNTR(wInterrupt_Mask);
return 0;
}
更具体地说,_SetCNTR(wInterrupt_Mask);
是给我错误的原因。我没有更改任何一块板之间IMR_MSK
的值。它的值是
#define IMR_MSK (CNTR_CTRM | CNTR_WKUPM | CNTR_SUSPM | CNTR_ERRM | CNTR_SOFM \
| CNTR_ESOFM | CNTR_RESETM )
是0xBF00
_SetCNTR
定义如下
#define _SetCNTR(wRegValue) (*CNTR = (uint16_t)wRegValue)
将CNTR
定义为
/* Control register */
#define CNTR ((__IO unsigned *)(RegBase + 0x40))
RegBase
是
#define RegBase (0x40005C00L) /* USB_IP Peripheral Registers base address */
我目前正在查看STM的文档,但我似乎无法找到与两个不同芯片的默认状态有关的任何内容。我猜它与基地址有关,但数据表显示这是正确的地址。
任何人都可以帮我解决这个问题吗?
谢谢!