返回列表 发新帖

SAM4E-EK开发板代码解读14——USB CDC

[复制链接]

28

主题

45

帖子

1万

积分

允许发帖

积分
10186
发表于 2020-5-14 17:08:51 | 显示全部楼层 | 阅读模式
本帖最后由 Mcuzone_TKN 于 2020-5-14 17:17 编辑

关键词:
Microchip Atmel  SAM4E SAM4E-EK  SAM4E16E 芯片 USB CDC



概述:这个例子展示了如何实现一个USB设备CDC

通信设备类(CDC)是一种通用的方式来启用所有通用串行总线(USB)上的通信类型。
这个类使得连接通信设备成为可能数字电话或模拟调制解调器,以及网络设备
例如ADSL或有线调制解调器。虽然CDC设备可以实现相当复杂的设备,它也可以作为一个非常简单的方法在USB上通信。
例如,一个CDC设备可以作为一个虚拟COM端口出现,这大大简化主机端的应用程序开发。


在本例中,我们将使用PC作为USB主机:
它连接到USBUSART板连接器。
USART外设连接到板的USART接口。
将应用程式连接至USB主机(例如个人电脑)
带有迷你b(嵌入式端)a (PC主机端)电缆。
应用程序将作为一个虚拟COM运行(参见Windows设备管理器)
COM端口(RS232和虚拟COM)上打开一个超级终端选择相同的配置为两个COM端口高达115200波特。
在一个超级终端中键入一个字符,它将在另一个超级终端中产生回音。



  1. int main(void)
  2. {

  3.         irq_initialize_vectors();
  4.         cpu_irq_enable();
  5.         sleepmgr_init();

  6. #if !SAMD21
  7.         sysclk_init();
  8.         board_init();
  9. #else
  10.         system_init();
  11. #endif
  12.         ui_init();
  13.         ui_powerdown();

  14.         //启动USB堆栈
  15.         udc_start();

  16.         // 主循环只管理电源模式 因为USB管理是通过中断来完成的
  17.         while (true) {
  18.                 sleepmgr_enter_sleep();
  19.         }
  20. }

  21. void main_suspend_action(void)
  22. {
  23.         ui_powerdown();
  24. }

  25. void main_resume_action(void)
  26. {
  27.         ui_wakeup();
  28. }

  29. void main_sof_action(void)
  30. {
  31.         if (!main_b_cdc_enable)
  32.                 return;
  33.         ui_process(udd_get_frame_number());
  34. }

  35. #ifdef USB_DEVICE_LPM_SUPPORT
  36. void main_suspend_lpm_action(void)
  37. {
  38.         ui_powerdown();
  39. }

  40. void main_remotewakeup_lpm_disable(void)
  41. {
  42.         ui_wakeup_disable();
  43. }

  44. void main_remotewakeup_lpm_enable(void)
  45. {
  46.         ui_wakeup_enable();
  47. }
  48. #endif

  49. bool main_cdc_enable(uint8_t port)
  50. {
  51.         main_b_cdc_enable = true;
  52.         //开放式交流
  53.         uart_open(port);
  54.         return true;
  55. }

  56. void main_cdc_disable(uint8_t port)
  57. {
  58.         main_b_cdc_enable = false;
  59.         //近距离通信
  60.         uart_close(port);
  61. }

  62. void main_cdc_set_dtr(uint8_t port, bool b_enable)
  63. {
  64.         if (b_enable) {
  65.                 // 主机终端有开COM
  66.                 ui_com_open(port);
  67.         }else{
  68.                 //主机终端有关闭COM
  69.                 ui_com_close(port);
  70.         }
  71. }
复制代码







虚拟COM端口.png
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表