本帖最后由 code 于 2013-9-6 12:41 编辑
我是使用ST官方的USB例子
编译能通过,下载到板上,电脑能找到USB鼠标
int main(void)
{
Set_System();
USB_Interrupts_Config();
Set_USBClock();
USB_Init(); // 运行了这条语句就不能使用串口1了
// 没有运行了这条语句,就能使用串口1
// 串口初始化是没有问题的
uart_initial();
xa=(volatile unsigned int *)0x40005C40;
// 指向 USB控制寄存器(USB_CNTR)指向CNTR寄存器
// 地址偏移:0x40
// 复位值:0x0003
// 绝对地址 0x40005C40
*xa=0; //查找了很长时间,最终是这个寄存器的中断在作怪
// 如果执行这条语句把所有的USB中断都屏蔽掉
// 那么就可以使用串口了
while(1)
{
p_time++;
p_time&=0x3ffff;
if(p_time==0)
{
USART_SendData(USART1,0xa5); //不能安放送数据了
}
if (bDeviceState == CONFIGURED)
{
if ((JoyState() != 0) && (PrevXferComplete))
{
Joystick_Send(JoyState());
}
}
}
}
另外
先设置好 BOOT0 BOOT1
选择好从用户程序运行, 程序是在运行USB_Init(); 且不屏蔽CNTR寄存器的中断情况之下
使用ST ISP下栽软件
把程序download到芯片 勾选 Jump to user program
然后运行到用户程序,也是可以使用串口的
再然后设置好 BOOT0 BOOT1
选择好从用户程序运行,按下复位
却不能使用串口了
(概括来说就是
同样的程序,在烧机之后,自动就运行到用户程序就能使用串口
复位重启,运行到用户程序就不能使用串口
)
高分求答案 非常感谢!!!!!!!!!!!!!!!!!
|