本帖最后由 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主机: 它连接到USB和USART板连接器。 将USART外设连接到板的USART接口。 将应用程式连接至USB主机(例如个人电脑) 带有迷你b(嵌入式端)到a (PC主机端)电缆。 应用程序将作为一个虚拟COM运行(参见Windows设备管理器)。 在COM端口(RS232和虚拟COM)上打开一个超级终端选择相同的配置为两个COM端口高达115200波特。 在一个超级终端中键入一个字符,它将在另一个超级终端中产生回音。
- int main(void)
- {
- irq_initialize_vectors();
- cpu_irq_enable();
- sleepmgr_init();
- #if !SAMD21
- sysclk_init();
- board_init();
- #else
- system_init();
- #endif
- ui_init();
- ui_powerdown();
- //启动USB堆栈
- udc_start();
- // 主循环只管理电源模式 因为USB管理是通过中断来完成的
- while (true) {
- sleepmgr_enter_sleep();
- }
- }
- void main_suspend_action(void)
- {
- ui_powerdown();
- }
- void main_resume_action(void)
- {
- ui_wakeup();
- }
- void main_sof_action(void)
- {
- if (!main_b_cdc_enable)
- return;
- ui_process(udd_get_frame_number());
- }
- #ifdef USB_DEVICE_LPM_SUPPORT
- void main_suspend_lpm_action(void)
- {
- ui_powerdown();
- }
- void main_remotewakeup_lpm_disable(void)
- {
- ui_wakeup_disable();
- }
- void main_remotewakeup_lpm_enable(void)
- {
- ui_wakeup_enable();
- }
- #endif
- bool main_cdc_enable(uint8_t port)
- {
- main_b_cdc_enable = true;
- //开放式交流
- uart_open(port);
- return true;
- }
- void main_cdc_disable(uint8_t port)
- {
- main_b_cdc_enable = false;
- //近距离通信
- uart_close(port);
- }
- void main_cdc_set_dtr(uint8_t port, bool b_enable)
- {
- if (b_enable) {
- // 主机终端有开COM
- ui_com_open(port);
- }else{
- //主机终端有关闭COM
- ui_com_close(port);
- }
- }
复制代码
|