2013-04-05 107 views
1

我正在学习嵌入式系统。我有一个atmel UC3-L0和指南针传感器。现在我安装AtmelStudio并将一些演示代码下载到主板中。但我不知道演示代码中的“printf”函数在哪里出现数据。我应该怎么做才能获取数据?atmel传感器使用printf

回答

1

printf函数输出到标准输出。

一般与需要定义如何一个字符从一个物理接口(通常是USART,控制台端口,USB端口,4端口LCD接口等)发送或接收无操作系统“裸”处理器。因此,通常您可能需要使用处理器板的USART端口连接到使用串行电缆连接运行Hyperterm,PuTTY或类似设备的PC。

在本质上,你将需要

  • 使用fdev_setup_stream()宏观和
  • 提供指针,告诉printf()功能究竟如何读取和/到流写入功能get()put()创建FILE流(例如,读/写USART,LCD显示器等)。
  • 根据您的硬件,您可能有库(已经包含这些功能(加上正确的端口初始化函数),例如, uart.c/.H,lcd.c/.H等

在stdio.h的文件(如:here)查找以下: printf()fdev_setup_stream()

如果您已经下载Atmel Studio您可以查看stdiodemo.c代码以获取更多信息。

+0

+1,尼斯的答案,也许只是让文件名和FUNC名字看起来像代码? – angelatlarge 2013-04-05 20:40:52

+0

@angelatlarge哉! – MikeD 2013-04-06 10:06:40

3

为了用printf在ATMEL的工作室,你应该检查下列事项:

  1. 添加和应用从项目 - > ASF向导的标准串行I/O模块。
  2. 还要从ASF向导中添加USART模块。
  3. 在主函数之前包含以下代码片段。
static struct usart_module usart_instance; 
     static void configure_console(void) 
    { 
     struct usart_config usart_conf; 
     usart_get_config_defaults(&usart_conf); 
     usart_conf.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING; 
     usart_conf.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0; 
     usart_conf.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1; 
     usart_conf.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2; 
     usart_conf.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3; 
     usart_conf.baudrate = 115200; 

     stdio_serial_init(&usart_instance, EDBG_CDC_MODULE, &usart_conf); 
     usart_enable(&usart_instance); 
    } 
  • 确保调用configure_console从主功能system_init()之后。

  • 现在转到tools-> extension manager。添加终端窗口扩展。

  • 构建并运行你的程序,并从view-> terminal窗口打开终端窗口。将正确的com端口连接到您的设备,并将波特率设置为115200,并在终端窗口中点击连接。
  • 您应该现在看到printf语句。 (Float没有打印在Atmel工作室)
  • 0

    我最近很困惑这个自己。我已经安装了Atmel Studio 7.0,并通过一个项目调用printf的示例项目使用了SAMD21开发板。

    在我看到,有一个结构部分中的示例代码:

    /*! 
    * \brief Initialize USART to communicate with on board EDBG - SERCOM 
    * with the following settings. 
    * - 8-bit asynchronous USART 
    * - No parity 
    * - One stop bit 
    * - 115200 baud 
    */ 
    static void configure_usart(void) 
    { 
        struct usart_config config_usart; 
        // Get the default USART configuration 
        usart_get_config_defaults(&config_usart); 
        // Configure the baudrate 
        config_usart.baudrate = 115200; 
        // Configure the pin multiplexing for USART 
        config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING; 
        config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0; 
        config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1; 
        config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2; 
        config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3; 
        // route the printf output to the USART 
        stdio_serial_init(&usart_instance, EDBG_CDC_MODULE, &config_usart); 
        // enable USART 
        usart_enable(&usart_instance); 
    } 
    

    在Windows设备管理我看到,有一个“Atmel公司EDBG USB端口(COM3)”下的“端口”中所列。然而,此端口的“属性”的一个被列为9600个比特每秒。我将其从9600更改为115200,以与上面的配置部分保持一致。

    最后,我跑PuTTY.exe并设置连接 - >串口设置COM3和115200个波特。然后我去了会话,然后点击串行连接类型,然后点击打开按钮。而且,BAM,通过PuTTY有我的printf输出。