作为串行设备的青少年

问题描述

我正在使用 teensy 3.2 对其 K20 系列微控制器 Mk20DX256 进行编程 我编写了一个简单的 UART 代码,将字符“U”从 teensy 传输到 PC 并在 Docklight 上查看。我已禁用中断和 DMA

我通过网络搜索,发现只有在运行串行类型代码时,Teensy 才充当串行端口 否则充当 USB 端口

我从 arduino 上传了 'hello' 示例到板并选择了 Usb 串口 这会在串行监视器上打印 hello。在硬件管理器的 COM PORT 中检测到设备

但是当我尝试将 keil 生成的十六进制文件编程到板中时 Com 端口选项从硬件管理器中的端口消失 这意味着我的代码不是串行类型

#include "MK20D7.h"

void UARTPutChar(char);

int main()
{
    
    SIM->SCGC4=1UL<<10; //Clock Enable Uart0
    SIM->SCGC5 =1UL<<12;//Enable GPIO PORT A clock
    UART0->C2=0X00;         //disable UART 
    PORTD->PCR[7]=  0x00000300;     //Port pin declare as UART0TX
    UART0->BDH=0x01;    //
    UART0->BDL=0xD4;
    UART0->C1=0X00;
    UART0->C3=0X00; 
    UART0->S2=0X20;
    UART0->S1=0X40;
    UART0->C2=0X08; //Enable UART0
     while(1)    
  {        
       UARTPutChar('U');
   
  }

}

void UARTPutChar(char ch)
{
    if(UART0->S1  == 0X40)
    {
        
        UART0->D=ch;
    }
}

请任何人指导我做错了什么。

解决方法

如果您使用 Arduino 为 Teensy 编译,则构建系统将链接到包含可用 USB 堆栈的 Teensyduino 核心库中。具体来说,默认情况下它会将其配置为 CDC 设备(虚拟串口)。

如果你用 Keil 编译,我假设你需要告诉 IDE 你想在 USB 堆栈中链接以及你想要如何配置