[ATMEL]/SAMD212018. 6. 29. 15:58

[SAMD21E-S EVM] Atmel Start 에서 printf 사용하기 (float 변수 출력)

[SAMD21E-S EVM] Atmel Start 에서  printf 사용하기 (float 변수 출력)



Atmel START 개발환 경에서 시리얼 포트 출력에서 printf 를 사용하려면 _write(), _read() 함수를 원하는 포트로 재 정의 해 주면 된다.


int _write( int32_t file , uint8_t *ptr , int32_t len )
{
       /* Implement your write code here, this is used by puts and printf for example */
       for ( int16_t i = 0 ; i < len ; ++i )
       {
              //HAL_UART_Transmit( &hUART, ptr++, 1, 100);
              io_write(uart_io, ptr++, 1);
       }
       return len;
}

int _read( int32_t file , uint8_t *ptr , int32_t len )
{
       /* Implement your write code here, this is used by puts and printf for example */
       return len;
}




ATSAMD21에서 printf는 잘 동작 하긴 하는데...

문제는 printf 함수로 float 변수를 출력하면 정상 출력이 된다.



옵션에서 


-u_printf_float

를 추가 해 주면 된다고 한다.












ATSAMD21 printf 함수에서 float 변수 출력 예제 소스코드

#include <atmel_start.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

struct io_descriptor *uart_io;
       
int _write( int32_t file , uint8_t *ptr , int32_t len )
{
       /* Implement your write code here, this is used by puts and printf for example */
       for ( int16_t i = 0 ; i < len ; ++i )
       {
              //HAL_UART_Transmit( &hUART, ptr++, 1, 100);
              io_write(uart_io, ptr++, 1);
       }
       return len;
}

int _read( int32_t file , uint8_t *ptr , int32_t len )
{
       /* Implement your write code here, this is used by puts and printf for example */
       return len;
}


int main(void)
{
       /* Initializes MCU, drivers and middleware */
       atmel_start_init();

       usart_sync_get_io_descriptor(&USART_0, &uart_io);
       usart_sync_enable(&USART_0);

       printf("SAMD21 UART test\r\n");
       
       
       /* Replace with your application code */
       while (1) 
       {
              fcnt = fcnt + 0.1;

              printf("%d, %.2f\r\n", cnt++, fcnt);
              gpio_toggle_pin_level(LED1);
              
              delay_ms(500);
       }

}




ATSAMD21 printf 동작 출력 화면


Posted by nexp

댓글을 달아 주세요

[ATMEL]/SAMD212018. 6. 28. 01:17

[SAMD21E-S EVM] ATSAMD21 개발환경 설정 - Atmel Studio7 (ATMEL START)

[SAMD21E-S EVM] ATSAMD21 개발환경 설정 - Atmel Studio7 (ATMEL START)

ATSAMD21 의 개발환경으로 AtmelStudio7를 사용 하였다.


기존 AVR 컴파일에 사용 했던 Atmel START를 이용하면 쉽게 SAM 시리즈도 개발 할수 있어 장점인것 같다.




우선 새로운 프로젝트를 Atmel START로 생성한다. 




디바이스(ATSAMD21)를 선택하고 다음.






DASHBOARD 에서 필요한 Component를 추가 한다.







PINMUX 에서 프로젝트에 사용될 핀들을 할당하고 설정한다.







AtmelStudio START의 장점으로 생성된 코드에서 Atmel START 프로젝트 환경을 생성해 낼 수 있다. 즉 개발 도중에 추가 컴포넌트가 있거나 핀맵 변경이 있을 경우 프로젝트 파일을 새롭게 생성해 수정할수 있어 편한것 같다.

ST사의 CubeMx의 경우 컴포넌트 수정 반영하려면 상당히 고려해야 할 사항이 많아 불편했는데 이부분은 잘 되어 있는것 같다.






Posted by nexp

댓글을 달아 주세요