[Atmel] SAML21走起25:USART换口通讯

[复制链接]
1091|0
 楼主| ddllxxrr 发表于 2015-9-18 16:09 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2015-9-19 08:12 编辑

有的盆友不想用U口即EDBG口进行通讯,那么换一个行不行呢?答案是一定的。

打开saml21_xplained_pro.h

里边有:

#define EXT3_UART_MODULE              SERCOM1
#define EXT3_UART_SERCOM_MUX_SETTING  USART_RX_3_TX_2_XCK_3
#define EXT3_UART_SERCOM_PINMUX_PAD0  PINMUX_UNUSED
#define EXT3_UART_SERCOM_PINMUX_PAD1  PINMUX_UNUSED
#define EXT3_UART_SERCOM_PINMUX_PAD2  PINMUX_PA18C_SERCOM1_PAD2
#define EXT3_UART_SERCOM_PINMUX_PAD3  PINMUX_PA19C_SERCOM1_PAD3
#define EXT3_UART_SERCOM_DMAC_ID_TX   SERCOM1_DMAC_ID_TX
#define EXT3_UART_SERCOM_DMAC_ID_RX   SERCOM1_DMAC_ID_RX



那么,我们就用SERCOM1了。

由于在.h中各个管脚的重映射已经搞好,我只要改个速率及SERCOM1就行了。其余代码不变。

我用另一个U转串线加到PA18,PA19则输出结果如下:

程序如下:
  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,
  14.         EDBG_CDC_MODULE, &config_usart) != STATUS_OK) {
  15.         }
  16.         usart_enable(&usart_instance);
  17. }

  18. void configure_usart2(void)
  19. {
  20.         struct usart_config config_usart;
  21.         usart_get_config_defaults(&config_usart);
  22.         config_usart.baudrate    = 115200;
  23.         config_usart.mux_setting = EXT3_UART_SERCOM_MUX_SETTING;
  24.         config_usart.pinmux_pad0 = EXT3_UART_SERCOM_PINMUX_PAD0;
  25.         config_usart.pinmux_pad1 = EXT3_UART_SERCOM_PINMUX_PAD1;
  26.         config_usart.pinmux_pad2 = EXT3_UART_SERCOM_PINMUX_PAD2;
  27.         config_usart.pinmux_pad3 = EXT3_UART_SERCOM_PINMUX_PAD3;
  28.         while (usart_init(&usart_instance,
  29.         EXT3_UART_MODULE, &config_usart) != STATUS_OK) {
  30.         }
  31.         usart_enable(&usart_instance);
  32. }


  33. int main (void)
  34. {
  35.         
  36.           system_init();
  37.           configure_usart();
  38.           uint8_t string[] = "Hello World!\r\n";
  39.           usart_write_buffer_wait(&usart_instance, string, sizeof(string));
  40.           usart_disable(&usart_instance);
  41.           configure_usart2();
  42.           usart_write_buffer_wait(&usart_instance, string, sizeof(string));
  43.           uint16_t temp;
  44.           while (true) {
  45.                   if (usart_read_wait(&usart_instance, &temp) == STATUS_OK) {
  46.                           while (usart_write_wait(&usart_instance, temp) != STATUS_OK) {
  47.                           }
  48.                   }
  49.           }
  50. }
注意,本程序的截图是在115200波特率的截图,证明管脚已经换成功,另外,注意的是,两个初始化之间一定要先停一下USART。
usart_disable(&usart_instance);

否则不好用。





本帖子中包含更多资源

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

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

本版积分规则

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

2404

主题

7001

帖子

68

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