| 今天跑一下ADC。方法还是老一套,首先打开上次的工程,我主要想用里边的Printf。 
 然后,加入ADC模块,加完后点ASF EXPLORER 点开快速指导。
 
 
 
 按里边的说明把程序考到自己的工程序里:
 那么快速指导里说的是哪个管脚呢?大家可以查数据手册,我查到是PA02。那么为了方便我直接用一根导线短接地和PA02。
 
 
 然后编译,通过后我本想用串口看一下,发现打断点也可以观察。
 
 以下是我把导线接到GND时的情景:
 
 
 以下是我的导线悬空时的情景
 
 
 可见ACD转换成功。我就不用串口看了。
 
 以下是程序清单,时钟配置没有什么特别的
 
 
 
 /**
 * \file
 *
 * \brief Empty user application template
 *
 */
/**
 * \mainpage User Application template doxygen documentation
 *
 * \par Empty user application template
 *
 * This is a bare minimum user application template.
 *
 * For documentation of the board, go \ref group_common_boards "here" for a link
 * to the board-specific documentation.
 *
 * \par Content
 *
 * -# Include the ASF header files (through asf.h)
 * -# Minimal main function that starts with a call to system_init()
 * -# Basic usage of on-board LED and button
 * -# "Insert application code here" comment
 *
 */
/*
 * Include header files for all drivers that have been imported from
 * Atmel Software Framework (ASF).
 */
#include <asf.h>
#include <stdio_serial.h>
bool volatile callback_status = false;
void configure_usart(void);
void configure_adc(void);
struct usart_module usart_instance;
void configure_usart(void)
{
        struct usart_config config_usart;
        usart_get_config_defaults(&config_usart);
        config_usart.baudrate    = 9600;
        config_usart.mux_setting = EXT3_UART_SERCOM_MUX_SETTING;
        config_usart.pinmux_pad0 = EXT3_UART_SERCOM_PINMUX_PAD0;
        config_usart.pinmux_pad1 = EXT3_UART_SERCOM_PINMUX_PAD1;
        config_usart.pinmux_pad2 = EXT3_UART_SERCOM_PINMUX_PAD2;
        config_usart.pinmux_pad3 = EXT3_UART_SERCOM_PINMUX_PAD3;
        
        while (usart_init(&usart_instance, EXT3_UART_MODULE, &config_usart) != STATUS_OK)
        {    }
        stdio_serial_init(&usart_instance, EXT3_UART_MODULE, &config_usart);
        usart_enable(&usart_instance);
}
struct adc_module adc_instance;
void configure_adc(void)
{
            struct adc_config config_adc;
                adc_get_config_defaults(&config_adc);
                adc_init(&adc_instance, ADC, &config_adc);
                adc_enable(&adc_instance);
}
int main (void)
{
        
        system_init();
        configure_usart();
        configure_adc();
        
        adc_start_conversion(&adc_instance);
        uint16_t result;
        do {        /* Wait for conversion to be done and read out result */    }
                 while (adc_read(&adc_instance, &result) == STATUS_BUSY); 
                printf("the ADC result is %d",result);
          while (true)
          { 
                        ;
     }
}
 |