<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > SAM4E單片機之旅——17、通過(guò)UART進(jìn)行標準IO

SAM4E單片機之旅——17、通過(guò)UART進(jìn)行標準IO

作者: 時(shí)間:2017-04-14 來(lái)源:網(wǎng)絡(luò ) 收藏

  交互還是很有必要的,而且使用鍵盤(pán)和顯示器的交互效率還是很高的。當然,可以直接使用進(jìn)行字符的輸入和輸出。但是又何必浪費了C的標準輸入輸出的格式控制之類(lèi)的功能呢?

本文引用地址:http://dyxdggzs.com/article/201704/346616.htm

  這次內容就是使用scanf() 和printf() 函數進(jìn)行PC和開(kāi)發(fā)板的交互。

  一、 C標準函數庫  

與硬件相關(guān)的功能,最終都需要直接訪(fǎng)問(wèn)硬件。這一點(diǎn),C的標準函數庫的實(shí)現面對眾多的硬件設備,已經(jīng)無(wú)能為力了。

  Atmel Studio使用的C標準庫的實(shí)現疑似為Newlib。

  在工程的 ASFsamutilssyscallsgccsyscalls.c 文件中,ASF已經(jīng)實(shí)現了若干需要自己實(shí)現的函數了(這個(gè)文件雖然叫syscall,但是可能只是因遵守unix的習慣起的。因為這里沒(méi)有操作系統,也就沒(méi)有“系統調用”一說(shuō)了)。但是類(lèi)似輸入輸出這些定制性較高的實(shí)現就沒(méi)有默認的實(shí)現。

  Newlib的大部分文件讀寫(xiě)功能是通過(guò)_read() 和_write() 函數實(shí)現了。所以實(shí)現了這兩個(gè)函數就可以實(shí)現標準輸入輸出了。函數的簽名及參數含義可以google。

  二、 實(shí)現

  注意需要先完成的配置工作。

  在具體的實(shí)現就很簡(jiǎn)單了。在實(shí)現時(shí),可以不對目標文件進(jìn)行判斷,而對所有的輸入輸出均通過(guò)完成。若需要判斷目標文件是否為標準輸入輸出,以及在檢測到錯誤時(shí)對這個(gè)錯誤進(jìn)行報告,就需要包含以下頭文件:

  #include 

  #include 

  _write:

  int _write(int file,const char *ptr,int len)

  {

  // 只處理標準輸出

  if (file == STDOUT_FILENO){

  for (int i = 0; i<LEN ; ++i){< p> 

  // 通過(guò)UART寫(xiě)出數據

  while (!(UART0->UART_SR & UART_SR_TXRDY));

  UART0->UART_THR = ptr[i];

  }

  return len;

  }else {

  errno = EBADF;

  return -1;

  }

  }

  _read:

  int _read (int file, char *ptr, int len)

  {

  // 只處理標準輸入

  if (file == STDIN_FILENO){

  int i;

  for (i = 0; i < len; i++){

  // 通過(guò)UART讀入數據

  while(!(UART0->UART_SR & UART_SR_RXRDY));

  ptr[i] = UART0->UART_RHR;

  /* 當讀到換行符時(shí)返回

  if ('n' == ptr[i])

  return i;

  }

  return i; /* 緩o沖?區?已°?慢y */

  }else{

  errno = EBADF;

  return -1;

  }

  }

  測試,以下代碼獲取UART的輸入,并通過(guò)UART重新輸出:

  #include 

  printf("-I- Test for stdio through UART0rn");

  char readbuf[64];

  while (1)

  {

  printf("-I- Input something...rn");

  scanf("%s", readbuf);

  printf("Output: %srn",readbuf);

  }

  注意,PC端在發(fā)送數據時(shí)需要加上換行符。

  三、 在A(yíng)SF中使用

  因為這是一個(gè)很常用的功能,所以在A(yíng)SF中也有實(shí)現。在A(yíng)SF中不但可以進(jìn)行一些配置,而且在使用的時(shí)候真正需要編寫(xiě)的代碼只有幾行,甚至這幾行代碼也可以完全參考(抄)ASF示例中的代碼。

  添加模塊Standard serial I/O。

  在conf_board.h里面已經(jīng)默認聲明了相應的宏了:

  1

  2/* Configure UART pins */

  #define CONF_BOARD_UART_CONSOLE

  在conf_uart_serial.h 里,已經(jīng)有了使用UART相關(guān)的參考設置代碼了。刪去參考代碼前面的注釋符號即可:

  /* A reference setting for UART */

  /** UART Interface */

  #define CONF_UART CONSOLE_UART

  /** Baudrate setting */

  #define CONF_UART_BAUDRATE 115200

  /** Parity setting */

  #define CONF_UART_PARITY UART_MR_PAR_NO

  調用stdio_serial_init初始化串行標準I/O:

  const usart_serial_options_t uart_serial_options = {

  .baudrate = CONF_UART_BAUDRATE,

  .paritytype = CONF_UART_PARITY

  };

  /* Configure console UART. */

  sysclk_enable_peripheral_clock(CONSOLE_UART_ID);

  stdio_serial_init(CONF_UART, &uart_serial_options);



關(guān)鍵詞: SAM4E UART

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>