3

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

谁能帮我解决这个问题?

谢谢!

4

0 回答 0