打印

求助各位大神 有关ucgui 跟usb的难题

[复制链接]
1390|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kkkazaf|  楼主 | 2014-3-31 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前阵子刚接触stm32单片机,需要绘图跟usb通讯。不知道是不是我还太新手的关系,还研究不了怎么实现。希望各位大神帮个忙,指导一下小弟。

-----------------------------
我用是STM32 MINI 开发板,STM32F103RBT6单片机,试过合并卖家提供的ucgui+ucos 例程跟 usb hid 例程,但都失败了。出现了” error: l6235e: more than one section matches selector - cannot all be first/last”,似乎是ucgui的startup.s 跟usb hid 的 vector.s 有冲到,但我看不懂这部份的代码,跟提示做import 都失败了(说是bad symbol ‘xxx’, not defined or external)。
--------------------------
其实是我走错方向还是怎的,快昏了,求各位大神指点迷津。
沙发
kkkazaf|  楼主 | 2014-3-31 15:52 | 只看该作者
本帖最后由 kkkazaf 于 2014-3-31 16:17 编辑

现在似乎弄好了section 的问题,但下载代码到开发板运行后 计算机没有提示找到硬件,用串口调试助手也找不到开发板(我用usb hid例程却没有问题啊)。
其实我进入除错模式看到它卡在PowerOn()的函数,可我用step进入这个函数,直到跑完都没事,就只有step over 才有卡住。 (抱歉有这么多问题)
  Main调用USB_Init(),再调用 pProperty->Init() ,跳到CustomHID_init()


请问有大神知道代码哪有问题,导致计算机检测不了?

----------以下是main 的代码----------
void MainTask(void) {
        /* Initialization */
        RCC_Configuration();
        NVIC_Configuration();
        Set_System();

        RCC->APB2ENR |= (1 << 5);                 // enable clock for GPIOD  
    GPIOD->CRL &= ~0x00000F00;                // clear port PD2  
    GPIOD->CRL |=  0x00000700;                // PD2 General purpose output open-drain, max speed 50 MHz  
    GPIOD->BRR  = 0x0004;                     // reset PD2  (set to low)

        USB_Interrupts_Config();
    Set_USBClock();   
    USB_Init();
    USB_Receive标志寄存器 = FALSE;

        /* Task */        
        while(1){
                if (TimeCount && USB_Receive标志寄存器 == TRUE) //收到后上位机的数据后,将1S发送一次数据给PC
         {
             USB_SendString("Hi,PC! I'm STM32-ARM");
             TimeCount = 0x00;
         }
     }
}
-------其他部份------------
void CustomHID_init(void)
{
  /* Update theserial number string descriptor with the data from the unique
  ID*/
    Get_SerialNum();
    pInformation->Current_Configuration = 0;
  /* Connectthe device */
    PowerOn();
  /* USBinterrupts initialization */
    _SetISTR(0);               /*clear pending interrupts */
    wInterrupt_Mask = IMR_MSK;
   _SetCNTR(wInterrupt_Mask); /* set interrupts mask */

    bDeviceState = UNCONNECTED;
}

RESULT PowerOn(void)
{
  u16wRegVal;

  /*** cableplugged-in ? ***/
USB_Cable_Config(ENABLE);

  /***CNTR_PWDN = 0 ***/ //USB 彶楷啭窒统桽苌揤
  wRegVal =CNTR_FRES;
_SetCNTR(wRegVal);

  /***CNTR_FRES = 0 ***/
wInterrupt_Mask = 0;
_SetCNTR(wInterrupt_Mask);
  /*** Clearpending interrupts ***/
_SetISTR(0);
  /*** Setinterrupt mask ***/
wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
_SetCNTR(wInterrupt_Mask);

  returnUSB_SUCCESS;
}

使用特权

评论回复
板凳
huangxz| | 2014-3-31 22:29 | 只看该作者
楼主应该先了解一下usb协议。

使用特权

评论回复
地板
kkkazaf|  楼主 | 2014-4-1 01:14 | 只看该作者
huangxz 发表于 2014-3-31 22:29
楼主应该先了解一下usb协议。

感谢您的提醒,近来引用library都忘了这些概念。
刚看了些数据,也算是大概明白usb协议是怎一回事,可我在编码上还是一头雾水(感觉是我硬件代码太弱的关系),朋友说也许是函数在存取共享资源时发生冲突。
处理这个问题我还是很混乱,不知道大神您可否给多一点建议让我研究?

使用特权

评论回复
5
kkkazaf|  楼主 | 2014-4-2 18:06 | 只看该作者
您好,现在我已经把两边的合并到同一个工程里,但发现按钮都无法使用。在除错模式中,找到button 里的GUI_GetKey() 函数不能读取按钮。

请问有谁知道是甚么原因导致这发生吗?
或是有甚么方法去研究解决?

使用特权

评论回复
6
zhangmangui| | 2014-4-2 23:07 | 只看该作者
帮忙顶顶

使用特权

评论回复
7
kkkazaf|  楼主 | 2014-4-5 15:44 | 只看该作者
研究后,发现好像是忘了调用触屏任务GUI_TOUCH_Exec() ,但在利用OSTaskCreate() 或 OSTaskCreateExt() 都调用触屏跟图任务都似乎没有在调用。

请问这可能是甚么原因导致的? 我在网上找过好像也找不到什么…

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝