-
Debug 那块设置错了,设置成 Simulator 了,改 JLINK 之后 USB 设备找到了。
-
我刚才跟进去 debug, 看到 RCC-CR 寄存器的值是 0x00010001
从手册上来看,这表示 HSI 和 HSE 都使能了,但是都没有就绪。
这正常吗?
-
不是外部晶振坏了。刚才烧进去一个我以前做的程序,从串口吐数,正常的。烧进去那个程序,就没用 STM 的主程序结构,晶振压跟就没配。这次是要学习 STM32 的 USB 转串口,所以全都用的 STM 的 DEMO。结果运行两步就不行了,邪门。
原帖由 江陵龙少 于 2011-7-28 22:27 发表
是不是外部晶体坏了?
-
又有新问题。
调了几天,USB to UART 和 UART to USB 都差不多了。
但是,串口发数据给 USB 的时候,串口自己会原样收一份,这是怎么回事?
谢谢!
-
en,
已经找到问题了。
我用的是网上一个网友准备的代码,UART 部分比较干净,但是包含的 startup.s 有问题,没包含合适的终端入口。其结果是:link 的时候,中断服务程序由于没有引用源,就被干掉了。
我今天用 STM 的 0402 给出的代码,删了一些和开发板有关的东西,已经能够完成 USB 设备发现了。
目前的情况是 USB -> 232 正常,反过来不正常。
不过已经可以继续调试了。
谢谢大家!!
-
问题比较奇怪,我再描述一下:
主程序:main.c
Set_System();
Set_USBClock();
USB_Interrupts_Config();
USB_Init();
其中,有时候死在 USB_Interrupts_Config(); 有时候死在 USB_Init();
死在 USB_Interrupts_Config() 的时候,是在设定完中断之后死。
死在 USB_Init(); 的时候,是在这里:
/*******************************************************************************
* Function Name : Virtual_Com_Port_init.
* Description : Virtual COM Port Mouse init routine.
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void Virtual_Com_Port_init(void)
{
pInformation->Current_Configuration = 0;
/* Connect the device */
PowerOn();
/* USB interrupts initialization */
/* clear pending interrupts */
_SetISTR(0);
wInterrupt_Mask = IMR_MSK;
/* set interrupts mask */
_SetCNTR(wInterrupt_Mask);
pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7];
/* configure the USART 1 to the default settings */
USART_Config_Default();
/* Wait until device is configured */
while (pInformation->Current_Configuration == 0)
{
NOP_Process();
}
bDeviceState = CONFIGURED;
}
这个 while while (pInformation->Current_Configuration == 0)
会一直出不来。应该是 USB 设备总不能被配置完毕。
我的这块开发板并不是用 GPIO 设定 D- 的那个 1.5k 电阻,而使用跳线。
也就是说,我感觉有两种可能:
一种是,我跳线没插上,于是这个 while 一直在等着配置-- 肯定等不到嘛。
另一种是,我跳线插上了,但是 PC 的配置过程有数据到 MCU 里面,这时候一打开中断就不知道怎么处理了,于是硬件错误。
另外,请问这个 USB 涉及到的中断在哪定义啊?
是这个函数吗 void USB_Istr(void)
为什么我在这里面没法设断点啊?
是不是根本就没 link 进去?
会不会是我的 USB 中断服务程序没链接进去?
-
是这句:
NVIC_Init(&NVIC_InitStructure);
单步运行到这,就下不去了。
肯定是进中断了。
我去找找这个中断在哪定义的。
-
呵呵,我也去了,领了一套,挺好玩的。
那个光纤传感器,好像不总好使。
-
只有 CPU 卡才有 ATR,这个你了解吧。
如果是 CPU 卡,直接用 UART 就能工作了。
RESET 接到一个 GPIO 上,把 UART 的收发接到一起,与智能卡的 IO 脚连起来。
加个上拉,波特率调整到 9600-8n2。
给 RESET 之后,应该能收到 ATR 了。
-
感谢!!