[Atmel] SAML21走起2:查询方式UART

[复制链接]
3235|16
 楼主| ddllxxrr 发表于 2015-7-6 14:16 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2015-7-6 14:18 编辑

接着上次的工程,加入一个USART模块,在加的时候提示要带中断的还是查询的,我这次选查询的:


然后选ASF EXPLORER 则出现如下画面:

再点Quick start guide ,然后出现如下:附链接:http://asf.atmel.com/docs/3.24.2/saml21/html/asfdoc_sam0_sercom_usart_basic_use_case.html


按照提示,完成代码,以下是输出结果:


以下是代码:

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

  33.         
  34. }



本帖子中包含更多资源

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

×
电子write_cai 发表于 2016-2-2 16:08 | 显示全部楼层
你好,版主,我在弄这个串口的问题,虽然我的是ATSAML22,但兼容的,我在你的代码中 添加了
  
  1. printf("Usart data is %d",usart_instance->hw.usart->DATA.reg); 但是首先提示我一个错误就是 usart_instance have “struct_module”
  2. 其次就是这个printf函数也不能正常使用
 楼主| ddllxxrr 发表于 2016-2-2 19:06 | 显示全部楼层
电子write_cai 发表于 2016-2-2 16:08
你好,版主,我在弄这个串口的问题,虽然我的是ATSAML22,但兼容的,我在你的代码中 添加了
    ...

你的工程缺少应包含的模块
电子write_cai 发表于 2016-2-3 09:54 | 显示全部楼层
  1. /**
  2. * \file
  3. *
  4. * \brief Empty user application template
  5. *
  6. */

  7. /**
  8. * \mainpage User Application template doxygen documentation
  9. *
  10. * \par Empty user application template
  11. *
  12. * Bare minimum empty user application template
  13. *
  14. * \par Content
  15. *
  16. * -# Include the ASF header files (through asf.h)
  17. * -# Minimal main function that starts with a call to system_init()
  18. * -# "Insert application code here" comment
  19. *
  20. */

  21. /*
  22. * Include header files for all drivers that have been imported from
  23. * Atmel Software Framework (ASF).
  24. */
  25. /*
  26. * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
  27. */


  28. #include <asf.h>
  29. #include <stdio.h>

  30. //#include <NskBMD.h>
  31. #define LED 91 //定义LED所使用的IO口为 PC27
  32. #define KEY 65 //定义KEY所使用的IO口为 PC01
  33. void port_init(void);
  34. void configure_usart(void);
  35. //! [setup_config]
  36. struct usart_module usart_instance;
  37. //! [setup_config]

  38. /***********************************************/
  39. //串口初始化
  40. /**********************************************/

  41. void configure_usart(void)
  42. {
  43.          
  44.         //! [setup_config]
  45.         struct usart_config config_usart;
  46.         //! [setup_config]
  47.        
  48.         //! [setup_config_defaults]
  49.         usart_get_config_defaults(&config_usart);
  50.         //! [setup_config_defaults]

  51.         //! [setup_change_config]
  52.         //USART  PORT  PA12 PA13.
  53.         config_usart.baudrate    = 9600;
  54.         config_usart.mux_setting = USART_RX_3_TX_2_XCK_3;
  55.         config_usart.pinmux_pad0 = PINMUX_UNUSED;//PINMUX_PA12D_SERCOM3_PAD0;
  56.         config_usart.pinmux_pad1 = PINMUX_UNUSED;//PINMUX_PA13D_SERCOM3_PAD1;
  57.         config_usart.pinmux_pad2 = PINMUX_PC24D_SERCOM4_PAD2;//PINMUX_UNUSED;
  58.         config_usart.pinmux_pad3 = PINMUX_PC25D_SERCOM4_PAD3;//PINMUX_UNUSED;
  59.         //! [setup_change_config]

  60.         //! [setup_set_config]
  61.         while (usart_init(&usart_instance,
  62.         SERCOM4, &config_usart) != STATUS_OK) {
  63.                
  64.         }
  65.         //! [setup_set_config]

  66.         //! [setup_enable]
  67.         usart_enable(&usart_instance);
  68.         //! [setup_enable]
  69. }




  70. /******************************************************/
  71. // # IO口初始化
  72. /******************************************************/
  73. void port_init(void)
  74. {
  75.         struct port_config config_port_pin;
  76.         port_get_config_defaults(&config_port_pin);
  77.        
  78.         config_port_pin.direction = PORT_PIN_DIR_OUTPUT; //配置IO口为输出模式;
  79.         port_pin_set_config(LED,&config_port_pin); //初始化LED对应的IO口;
  80.        
  81.         config_port_pin.direction = PORT_PIN_DIR_INPUT; //配置IO口为输入模式;
  82.         config_port_pin.input_pull = PORT_PIN_PULL_UP; //配置IO口为PULL 上拉;
  83.         port_pin_set_config(KEY,&config_port_pin);       
  84. }

  85. int main(void)
  86. {
  87.         system_init();
  88.     port_init(); //端口初始化;
  89.        
  90.         //! [setup_init]
  91.         configure_usart();
  92.         //! [setup_init]
  93.        
  94.         //! [main_send_string]
  95.         uint8_t string[] = "Hello World!\r\n";
  96.         usart_write_buffer_wait(&usart_instance, string, sizeof(string));
  97.         //printf("data is %ld",(usart_instance->hw->USART.DATA->reg));   //添加这块代码就会报警出错。
  98.         //! [main_send_string]
  99.     uint16_t temp;
  100.         //! [main_loop]
  101.         while (1) {
  102.                 if (usart_read_wait(&usart_instance, &temp) == STATUS_OK) {
  103.                         //! [main_read]
  104.                         //! [main_write]
  105.                         while (usart_write_wait(&usart_instance, temp) != STATUS_OK) {
  106.                         }
  107.                         //! [main_write]
  108.                 }
  109.         }
  110.         //! [main]
  111. }
  112.        
版主认为我缺哪块?并且查询方式的话,我串口终端接受到的数据有丢包.
 楼主| ddllxxrr 发表于 2016-2-3 15:47 | 显示全部楼层
电子write_cai 发表于 2016-2-3 09:54
版主认为我缺哪块?并且查询方式的话,我串口终端接受到的数据有丢包.

上个帖子,提示数据结构没有定义我想是ASF的某一个模块没有包含进来,这次楼主换了套路。我想就查一下那个CLOCK_CONFIG.H看看时钟
电子write_cai 发表于 2016-2-3 16:30 | 显示全部楼层
ddllxxrr 发表于 2016-2-3 15:47
上个帖子,提示数据结构没有定义我想是ASF的某一个模块没有包含进来,这次楼主换了套路。我想就查一下那 ...

不是的,我提供的代码就是出错的代码。我能问下一个奇怪的问题吗?
   就是我编译后生成elf和hex文件,然后我programming,程序也能烧写进去,就是我在AtmelStudio上面选择start debug的时候,提示我无法load xx.elf文件,我也是第一次使用AtmelStudio。请教群主,这个这么解决。有什么思路吗
  谢谢
电子write_cai 发表于 2016-2-3 17:04 | 显示全部楼层
ddllxxrr 发表于 2016-2-3 15:47
上个帖子,提示数据结构没有定义我想是ASF的某一个模块没有包含进来,这次楼主换了套路。我想就查一下那 ...

IAR 现在有没有SAML系列的IC啊? 我看IAR现在还没有,还是我IAR版本太低了的原因?
 楼主| ddllxxrr 发表于 2016-2-3 18:41 | 显示全部楼层
电子write_cai 发表于 2016-2-3 16:30
不是的,我提供的代码就是出错的代码。我能问下一个奇怪的问题吗?
   就是我编译后生成elf和hex文件,然 ...

你用的AtmelStudio是多少版本的,另外仿真用的是EDBG么???

 楼主| ddllxxrr 发表于 2016-2-3 18:50 | 显示全部楼层
电子write_cai 发表于 2016-2-3 17:04
IAR 现在有没有SAML系列的IC啊? 我看IAR现在还没有,还是我IAR版本太低了的原因? ...

IAR确实不支持SAML那你还用AtmelStudio吧,最新的支持ATSAMB11G18A
ATSAMD21E15BU
ATSAMD21E16BU
ATSAMD21G15B
ATSAMD21G16B
ATSAMD21J15B
ATSAMD21J16B
 楼主| ddllxxrr 发表于 2016-2-3 18:50 | 显示全部楼层
电子write_cai 发表于 2016-2-3 17:04
IAR 现在有没有SAML系列的IC啊? 我看IAR现在还没有,还是我IAR版本太低了的原因? ...

IAR确实不支持SAML那你还用AtmelStudio吧,最新的支持ATSAMB11G18A
ATSAMD21E15BU
ATSAMD21E16BU
ATSAMD21G15B
ATSAMD21G16B
ATSAMD21J15B
ATSAMD21J16B
电子write_cai 发表于 2016-2-4 12:57 | 显示全部楼层
ddllxxrr 发表于 2016-2-3 18:41
你用的AtmelStudio是多少版本的,另外仿真用的是EDBG么???

使用DEBUG的接口啊,就是自带的USB口,难道还要购买什么另外设备才能debug吗?
homey123 发表于 2016-2-4 14:47 | 显示全部楼层
电子write_cai 发表于 2016-2-3 17:04
IAR 现在有没有SAML系列的IC啊? 我看IAR现在还没有,还是我IAR版本太低了的原因? ...

IAR目前支持L系列的,需要升级到最新版本
https:// www .iar.com/device-search/#!?devices_vendor=Atmel&devices_architecture=ARM&devices_family=ATSAML21&tab=devices
 楼主| ddllxxrr 发表于 2016-2-4 19:30 | 显示全部楼层
电子write_cai 发表于 2016-2-4 12:57
使用DEBUG的接口啊,就是自带的USB口,难道还要购买什么另外设备才能debug吗? ...

不用,我这边EDBG好用
 楼主| ddllxxrr 发表于 2016-2-4 19:32 | 显示全部楼层
homey123 发表于 2016-2-4 14:47
IAR目前支持L系列的,需要升级到最新版本
https:// www .iar.com/device-search/#!?devices_vendor=Atmel ...

链接打不开
homey123 发表于 2016-2-5 14:40 | 显示全部楼层
把www空格删掉就可以了。权限太低发不了链接啊:'(
A1046983970 发表于 2017-8-11 14:16 | 显示全部楼层
楼主,有一个问题很疑惑,上诉例程中,如何确定uart对应的io口?
jianghuailiang 发表于 2019-2-1 17:24 | 显示全部楼层
EDBG_CDC_SERCOM_MUX_SETTING   

Error                'EDBG_CDC_SERCOM_MUX_SETTING' undeclared (first use in this function)        test2       
Severity        Code        Description        Project        File        Line
Error                'EDBG_CDC_SERCOM_PINMUX_PAD1' undeclared (first use in this function)        test2       
Error                'EDBG_CDC_SERCOM_PINMUX_PAD2' undeclared (first use in this function)        test2       
Error                'EDBG_CDC_SERCOM_PINMUX_PAD3' undeclared (first use in this function)        test2       
Error                'usart_instance' undeclared (first use in this function)        test2       
Error                'EDBG_CDC_MODULE' undeclared (first use in this function)        test2       

  你好,我想问一下  这是在哪定义的  不识别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2404

主题

7001

帖子

68

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