我目前遇到 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 的相关文档,但我似乎找不到与两种不同芯片的默认状态相关的任何具体内容。我猜它与基地址有关,但是数据表显示这是正确的地址。
谁能帮我解决这个问题?
谢谢!