[Atmel] SAML21走起24:USART基础

[复制链接]
1209|0
 楼主| ddllxxrr 发表于 2015-9-17 22:25 | 显示全部楼层 |阅读模式
首先,在以前的工程中,通过ASF wizard 加入USART模块,再在ASF EXPLORER中打开API说明。
如下图所示:

然后按照指导形成程序:

最后编译通过,以下是执行结果


需要注意的是所有的管脚都在宏定义中定义:
所以要复管脚到别的引脚也得遵循这个宏定义:

/* ========== PORT definition for SERCOM3 peripheral ========== */
#define PIN_PA16D_SERCOM3_PAD0            16L  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */
#define MUX_PA16D_SERCOM3_PAD0             3L
#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)
#define PORT_PA16D_SERCOM3_PAD0    (1ul << 16)
#define PIN_PA22C_SERCOM3_PAD0            22L  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */
#define MUX_PA22C_SERCOM3_PAD0             2L
#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)
#define PORT_PA22C_SERCOM3_PAD0    (1ul << 22)
#define PIN_PA27F_SERCOM3_PAD0            27L  /**< \brief SERCOM3 signal: PAD0 on PA27 mux F */
#define MUX_PA27F_SERCOM3_PAD0             5L
#define PINMUX_PA27F_SERCOM3_PAD0  ((PIN_PA27F_SERCOM3_PAD0 << 16) | MUX_PA27F_SERCOM3_PAD0)
#define PORT_PA27F_SERCOM3_PAD0    (1ul << 27)
#define PIN_PA17D_SERCOM3_PAD1            17L  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */
#define MUX_PA17D_SERCOM3_PAD1             3L
#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)
#define PORT_PA17D_SERCOM3_PAD1    (1ul << 17)
#define PIN_PA23C_SERCOM3_PAD1            23L  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */
#define MUX_PA23C_SERCOM3_PAD1             2L
#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)
#define PORT_PA23C_SERCOM3_PAD1    (1ul << 23)
#define PIN_PA18D_SERCOM3_PAD2            18L  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */
#define MUX_PA18D_SERCOM3_PAD2             3L
#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)
#define PORT_PA18D_SERCOM3_PAD2    (1ul << 18)
#define PIN_PA24C_SERCOM3_PAD2            24L  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */
#define MUX_PA24C_SERCOM3_PAD2             2L
#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)
#define PORT_PA24C_SERCOM3_PAD2    (1ul << 24)
#define PIN_PA19D_SERCOM3_PAD3            19L  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */
#define MUX_PA19D_SERCOM3_PAD3             3L
#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)
#define PORT_PA19D_SERCOM3_PAD3    (1ul << 19)
#define PIN_PA25C_SERCOM3_PAD3            25L  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */
#define MUX_PA25C_SERCOM3_PAD3             2L
#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)
#define PORT_PA25C_SERCOM3_PAD3    (1ul << 25)


以下是程序:

  1. #include <asf.h>
  2. struct usart_module usart_instance;
  3. void configure_usart(void)
  4. {
  5.             struct usart_config config_usart;
  6.                 usart_get_config_defaults(&config_usart);
  7.                 config_usart.baudrate    = 9600;
  8.                 config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING;
  9.                 config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0;
  10.                 config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1;
  11.                 config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2;
  12.                 config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3;
  13.                 while (usart_init(&usart_instance,            EDBG_CDC_MODULE, &config_usart) != STATUS_OK)
  14.                  {    }
  15.                 usart_enable(&usart_instance);
  16. }
  17.                
  18. int main (void)
  19. {
  20.        
  21.           
  22.           /* Initialize the system and console*/
  23.           system_init();
  24.           configure_usart();
  25.          uint8_t string[] = "Hello World!\r\n";
  26.          usart_write_buffer_wait(&usart_instance, string, sizeof(string));
  27.          uint16_t temp;
  28.          while (true)
  29.          {
  30.                          if (usart_read_wait(&usart_instance, &temp) == STATUS_OK)
  31.                                   {
  32.                                                       while (usart_write_wait(&usart_instance, temp) != STATUS_OK) {            }        }    }
  33.        
  34. }




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7001

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部