使用TI的TM4C123G LaunchPad开发板,USB接口,来对同样的芯片进行烧写。

我们只用烧写那一块功能,不用另外一个芯片的开发功能,需要跳线
 
源码项目:
 
从官方网站TM4C123G,下载这个板的驱动、烧写程序、工程项目
LMFlashProgrammer.msi  装完就有烧写程序、驱动和项目了
SW-TM4C-2.0.1.11577.exe ,TivaWare_C_Series-2.0.1.11577项目,examples\boards\ek-tm4c123gxl为我们使用的芯片项目
 
红外屏原理图,见PDM上的项目
 
 
讨厌的undefined错误,在拿usb-keyb的代码旺CDC代码上移植时。加了以下头文件
#include "usblib/usbhid.h"
#include "usblib/device/usbdhid.h"
#include "usblib/device/usbdhidkeyb.h"
#include "usb_keyb_structs.h"
 
 
以USB转串口为基础来改,先干掉CDC部分
除了main函数那个文件的方法,还有.S文件
 
.S文件中有几个符号导出,已经没有了,以及引用的地方USBUARTIntHandler不再需要,其他2个还是要的,后面移植键盘相关函数,有实现
    EXTERN  SysTickIntHandler
        EXTERN  USBUARTIntHandler
        EXTERN  USB0DeviceIntHandler
 
;        DCD     USB0DeviceIntHandler        ; USB0 等等
 
 
然后又会提示没有实现KeyboardHandler,然后把USB键盘main函数文件那边,相关的一坨全复制过来,编译成功!
 
但运行起来无法识别,用PB0,2,3 IO拉低,定位程序,发现运行正常。知道while(1)都没问题。
原来是while(1)这里还需要写代码才行?或者再.S文件里加点东西?
 
while(1)加了相关代码,还是不行。明天继续试验.S文件
 
把原来USB的CDC中.s文件去掉;EXTERN  USBUARTIntHandler,果然是不行了
 
现在在.s文件加入keyboard的函数,并删除USBUARTIntHandler,OK,成功识别!
 
---------------------------------------------------------------------------------------------------------------
 
改USB鼠标:
usb_xxx_structs的C和H文件,及mian函数要实现的xxxHandler
 
先观察keyboard,bulk,USB串口都有一个usb_bulk_structs这样的文件
1,都有一个字串的数组定义
const uint8_t * const g_ppui8StringDescriptors[] =
{
    g_pui8LangDescriptor,
    g_pui8ManufacturerString,
    g_pui8ProductString,
    g_pui8SerialNumberString,
    g_pui8DataInterfaceString,
    g_pui8ConfigString
};
2,都有设备描述符
tUSBDHIDKeyboardDevice g_sKeyboardDevice =
{
    USB_VID_TI_1CBE,
    USB_PID_KEYBOARD,
    500,
    USB_CONF_ATTR_SELF_PWR | USB_CONF_ATTR_RWAKE,
    KeyboardHandler,
    (void *)&g_sKeyboardDevice,
    g_ppui8StringDescriptors,
    NUM_STRING_DESCRIPTORS
};
对于bulk,多定义了2个buffer
tUSBDBulkDevice g_sBulkDevice =
{
    USB_VID_TI_1CBE,
    USB_PID_BULK,
    500,
    USB_CONF_ATTR_SELF_PWR,
    USBBufferEventCallback,
    (void *)&g_sRxBuffer,
    USBBufferEventCallback,
    (void *)&g_sTxBuffer,
    g_ppui8StringDescriptors,
    NUM_STRING_DESCRIPTORS
};
对于CDC,类似bulk
tUSBDCDCDevice g_sCDCDevice =
{
    USB_VID_TI_1CBE,
    USB_PID_SERIAL,
    0,
    USB_CONF_ATTR_SELF_PWR,
    ControlHandler,
    (void *)&g_sCDCDevice,
    USBBufferEventCallback,
    (void *)&g_sRxBuffer,
    USBBufferEventCallback,
    (void *)&g_sTxBuffer,
    g_ppui8StringDescriptors,
    NUM_STRING_DESCRIPTORS
};
 
tUSBDHIDKeyboardDevice 这个结构都要被usbdhidkeyboard使用。
同理找到找到usbdhidmouse 中使用 tUSBDHIDMouseDevice,tUSBDHIDMouseDevice搜索出定义
tUSBDHIDMouseDevice  g_sMouseDevice

{
    USB_VID_TI_1CBE,
   USB_PID_MOUSE,
    500,
    USB_CONF_ATTR_SELF_PWR | USB_CONF_ATTR_RWAKE,
    KeyboardHandler,
    (void *)&g_sMouseDevice,

    g_ppui8StringDescriptors,
    NUM_STRING_DESCRIPTORS
};
其他几个很容易改,重点是KeyboardHandler 换成是MouseHandler
 
 
分析KeyboardHandler的状态处理,发现都是USB都有的状态,没有什么特别的,可以直接重用:
分析bulk, 就是RxHandler和TxHandler
分析CDC,比较复杂,ControlHandler处理这里常用状态并结合RxHandler,TxHandler
所以Mouse直接用keyboardHanlder就好了
USB_EVENT_CONNECTED
USB_EVENT_DISCONNECTED
USB_EVENT_TX_COMPLETE
USB_EVENT_SUSPEND
USB_EVENT_RESUME
USBD_HID_KEYB_EVENT_SET_LEDS://这个上位机向单片就传送一个LED灯的亮起,键盘才有的事件,鼠标则没有
        {
            //
            // Set the LED to match the current state of the caps lock LED.
            //
            ROM_GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_2,
                             (ui32MsgData & HID_KEYB_CAPS_LOCK) ? GPIO_PIN_2 :
                             0);

break;
        }

 
 
不需要SendString及其依赖的WaitForSendIdle,删除即可,不然调用tUSBDHIDKeyboardDevice 结构造成编译错误
main函数的 USBDHIDKeyboardInit,改为对应的
改完后再次编译,总提示未定义,
D:\ti\TivaWare_C_Series-2.0.1.11577\examples\boards\ek-tm4c123gxl\usb_dev_serial\usb_keyb_structs.h(34): error:  #20: identifier "tUSBDHIDMouseDevice" is undefined
usb_keyb_structs.h(34): error:  #20: identifier "tUSBDHIDMouseDevice" is undefined
 
这条几个小时,最后发现!!!
 #include "usblib/device/usbdhidmouse.h"
#include "usb_keyb_structs.h"//必须放在最后,
因为tUSBDHIDMouseDevice定义在usbdhidmouse.h里,被usb_keyb_structs.h引用,如果先引用,则找不到定义
头文件是有顺序的,坑爹!!!
真是自己作死,无论是usb_keyb_structs.c结构文件,还是mian函数文件,都是要注意顺序,"usb_keyb_structs.h"必须放在最后
 
附资料,extern真是坑人,完全没起作用

extern

在源文件A里定义的函数,在其它源文件里是看不见的(即不能访问)。为了在源文件B里能调用这个函数,应该在B的头部加上一个外部声明:

extern   函数原型;

这样,在源文件B里也可以调用那个函数了

 
 
终于!!!编译成功这次可以识别成功鼠标了。
-------------------------------------------------------------
 
 
 
最后是main函数,键盘是把从IO收到的数据,上传到上位机
鼠标同样也是,因此参考键盘的做法,在while循环中来操作
 

同样的代码,在开发板上正常,可以发送模拟的USB鼠标数据,看到效果

但在目标板上,只能识别USB鼠标,但发送数据不成功。
 
查看IO,似乎是处理Handler里连接的事件没触发
 
目标板加了一个保护ESD什么的,需要和硬件工程师一起来调试。
 
然后,专家辞职跑路。
 

TM4C123G红外触摸屏:开发板好不容易实现了原理,放到专家设计的板子上无法运行,于是专家跑路项目黄了的更多相关文章

  1. 全志A33 lichee 开发板 Linux中断编程原理说明

    开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 本节实验目标实现按键触发中断 ...

  2. 【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔(2019-11-04)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.本次工程延续以往的代码风格,从底层BSP驱动包到应用代码,变量命名,文件 ...

  3. AM57x 多核SoC开发板——GPMC的多通道AD采集综合案例手册(上)

    目 录 1 ----案例功能 2 ----操作说明 2.1 ----硬件连接 2.2 ----案例测试 2.3 ----使用CCS查看信号波形 2.3.1 ----加载Symbols信息表 2.3.2 ...

  4. 开发板A/D转换原理

    A/D转换器(Analog-to-Digital Converter)又叫模/数转换器,即使将模拟信(电压或是电流的形式)转换成数字信号.这种数字信号可让仪表,计算机外设接口或是微处理机来加以操作或是 ...

  5. Web开发人员不要错过的60款用户界面设计工具(上)

    Web开发大师们,干货再次来袭!小编为大家盘点了60款功能丰富类型各异的用户界面设计工具,本系列将以上中下三篇分别为大家呈现.今天盘点的这20款工具囊括了大量界面原型设计工具,有免费的在线原型工具,有 ...

  6. STM32F407Discovery开发板使用环境搭建

    差不多4年前买了STM32F407Discovery这块开发板,也用它作为我的毕业设计的一部分,今晚整理一下东西,觉得这么不错的东西应该再次利用起来,做个智能家居系统的一部分什么的也不错,于是,记录一 ...

  7. AC6102开发板USB3.0测试和使用说明

    AC6102开发板USB3.0测试和使用说明 概述 AC6102上集成了一颗Cypress 推出的高性能USB3.0传输芯片CYUSB3014,Cypress称之为EZ-USBFX3.该芯片性能强劲, ...

  8. RGMII_PHY测试笔记1 基于开发板MiS603-X25

    RGMII_PHY测试笔记1 基于开发板MiS603-X25 作者:汤金元 日期:20150817 公司:南京米联电子科技有限公司 博客:http://blog.chinaaet.com/detail ...

  9. 【基于mini2440开发板的交叉编译环境及内核树配置.

    在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙.高高大大的墙...笔者在初探这一方向时,就在这2个问题上苦恼了很久.查阅无数资料,大多 ...

随机推荐

  1. easy ui 1.4的NumberBox,失去焦点后不能再次输入小数点

    这也是1.4版本的bug,现在1.4.1也发布了,经验证,该问题在新版本中已经解决了 在网上找到的解决办法,地址:http://www.jeasyui.com/forum/index.php?topi ...

  2. [转载]DBA的特质第二部分:性格

    本文转自http://www.searchdatabase.com.cn/showcontent_84382.htm 支持原创.尊重原创,分享知识! 在本系列文章中,笔者将谈一谈数据库管理员(DBA) ...

  3. SQLServer:删除log文件和清空日志的方法

    数据库的性能是DBA都需要重点关注的,日志文件的增多严重影响数据库的性能,本文将为您介绍SQL Server删除日志文件的方法,供您参考,希望对您有所帮助. 数据库在使用过程中会使日志文件不断增加,使 ...

  4. Python基本语法,python入门到精通[二]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]我们已经在自己的windows电脑上搭建好了python的开发环境,这篇博客呢我就开始学习一下Python的基本语法.现 ...

  5. 烂泥:rsync配置文件详解

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 对于rsync服务器来说,最重要和复杂的就是它的配置了.rsync服务器的配置文件为/etc/rsyncd.conf,其控制认证.访问.日志记录等等. ...

  6. android setLayoutParams 问题,出错

    LinearLayout layt = (LinearLayout) rootView.findViewById(R.id.llt_2); FrameLayout.LayoutParams layou ...

  7. Javascript笔记--Objects

     Javascript的简单数据类型包括: 数字,字符串,true/false,null 和undefined. 其他所有值都是对象. 数组是对象,方法也是对象.属性值是除开undefined值以外的 ...

  8. Android常见的按钮监听器实现方式

    为按钮(Button)添加响应事件,需要为其设置监听器(Listener).本文总结了Android中常用的几种Button Listener. 第一种:匿名内部类作为事件监听器类 1 2 3 4 5 ...

  9. 【2016-10-12】【坚持学习】【Day3】【责任链模式】

    今天学习责任链模式 例子: 采购审批系统 采购单需要经过不同人审批 采购价格<500 部门经理审批 采购价格<1000 部门主任审批 采购价格<2000 副总审批 采购价格<5 ...

  10. 《数据结构》之串的模式匹配算法——KMP算法

    //串的模式匹配算法 //KMP算法,时间复杂度为O(n+m) #include <iostream> #include <string> #include <cstri ...