컴퓨터/Firmware 썸네일형 리스트형 [ARM] stm32f103c8 KEIL에서 printf 사용하기 USART 를 뚫는 삽질을 시작한 계기도.. Printf 를 사용하려고 했던 것인데... 엌 진작에 좀 제대로 검색을 해 볼걸... 소스에 12345678910111213141516171819202122232425#ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__ */ PUTCHAR_PROTOTY.. 더보기 [ARM] stm32f103c8 USART1 뚫기 및 삽질 정리 RCC 설정 GPIO 설정 USART 설정 VNIC 설정 순으로 설정하면 분명히 된다고 나와있는데... 일단 통신이 오는 것 까진 확인했다.. 여기까지 대략 6시간 본 것 같은...(아 정말 뭔가 이상한거 없었는데 안되다가 갑자기 되서 이건 뭐지 했음....) 그런데 또 문제는 여기서 발생.. 분명히 통신은 되는데 주고 받고도 되는데 쓰레기값으로 나오는 것임.. 위의 터미널처럼.... 요상하게 안되는 문제가... 그러다 문득.. USART 찾아보면서 어느 한 블로그에서 본 글이였는데.. 클럭 설정이 이상해서 뭔가 찾아서 고쳐야 해야 제대로 동작했다는 글이였다.. 그래서 지금 클럭이 얼마인지를 확인하려고 보니 지금 시리얼 통신도 안되는데 뭐 어찌 확인하지..... 해서 디버그모드로 확인 RCC_Clocks.. 더보기 [ARM] STM32F103 개발환경 셋팅 및 LED 토글 Ebay에서 몇 천원 하는STM32F103C8 보드를 하나 구매했다. 배송 오는데 한... 5주 걸린듯...;;;; 일단 시작하기 앞서 ST-Link/V2 드라이버도 좀 설치해 주고 컴파일러도 설치좀 해 주고 서류들도 다운 받아주고... 거 이상하게 ST는 문서 찾기가 참 ㅈㄹ 같다는 생각이.. 그거 말고도 Dsp Library를 찾는데 한참을 찾아도 안나와서 그냥 구글링 했더니 바로 나오는... 덜덜;; =================================================================================== PORTC-13 에 파란색 LED가 연결 되어 있어서 (Active Low) 한번 작동해 보고자 자료 찾아보고 Datasheet 보면서 해서 6시간만에... 더보기 [Atmega128] AVR Studio6 에서 printf, sprintf 사용법 (UART, LCD) AVR Studio6 에서 UART나 LCD를 사용하는데 함수를 다 작성해야하는 귀찮은 점이 있는데(codevision은 다 있어서 편했는데 ㅠㅠ) 이걸 printf나 sprintf 로 연결할 수 있는 방법이 있다 일단 sprintf를 사용하기 위해선 프로젝트 속성 -> Toolchain -> AVR/GNU Linker -> Libraries 에서 libprintf_fit 을 추가해 준다. 그리고 프로젝트 속성 -> Toolchain -> AVR/GNU Linker -> General 에서 Link Statically (-Wl, -static)과 Use vprintf library (-Wl, -u, vfprintf) 를 체크해 준다. 그 후에 sprintf를 사용하면 float 까지 잘 나오는 모습을 확.. 더보기 [Atmega128] UART Rx 기본적인 셋팅은 UART Tx 포스팅에서 했던 것과 비슷하고http://wjs890204.tistory.com/762 Rx Enable을 위해UCSR0B에 있는 RXEN0 레지스터도 셋 한다 그런데 이거 구현하는데 문제가 있었는데 엄청 골때렸음.... http://cafe.naver.com/carroty/236713 여기 질문글인데 결국 1byte만 선언된 문자열에 그 이상을 구겨 넣어서 생긴 문제... ㅠㅠ 어쨋건 해결 해서 다행... 이번 포스팅의 내용은 Rx Buffer을 구현하여 시리얼 모니터에 문자열을 보내면 Rx buffer에 저장하고 다시 시리얼모니터에 출력해 주는 역할인 코드 1234567891011121314151617181920212223242526272829303132333435363.. 더보기 [Atmega128] UART Tx UART 통신을 하려면 Baudrate 설정이 필수적이다. 계산 식은 위의 표와 같이 하면 된다. ex) 9600bps로 통신을 한다면 UBRR = ( 16Mhz / ( 16 x 9600bps) ) -1 = 106.167 이 되므로 UBRR에는 106즉 0x67을 넣어줘야 한다. 물론 UBRR0H와 UBRR0L로 되어 있어 상위바이트와 하위바이트에 나눠서 넣어주면 된다.(9600은 하위 8비트 안에 들어가므로 상위에는 0x00을 넣는다. UDRn 레지스터는 Tx일 때는 Tx로 보낼 데이터를 저장할 Buffer로 사용되고Rx일 땐 데이터를 받을 Buffer로 사용된다. 이 버퍼가 보낼 준비가 되거나받을 준비가 된다면UCSRnA에 있는 UDREn 레지스터가 Set 된다. TXENn 을 통하여 Tx Enabl.. 더보기 [Atmega128] IO 기초 프로그래밍 기법 기본 IO 프로그래밍 기법 http://cafe.naver.com/circuitsmanual/354 http://cafe.naver.com/circuitsmanual/4618 키패드 스캔 http://cafe.naver.com/circuitsmanual/1747 http://cafe.naver.com/circuitsmanual/25440 더보기 [Atmega128] Fast PWM with LED Fast PWM을 활용하여 LED 점등을 구현해봄 위의 영상 같이 LED가 점점 밝아짐을 확인해 볼 수 있다 Fast PWM은 기본적으로 톱니바퀴(?) 방식으로 카운트를 하는데 카운트를 하면서 OCRn 레지스터와의 비교를 통해 Compare Match가 되면 인터럽트가 발생하고 OCn Output을 Toggle 한다. TCNTn의 카운트가 0xFF가 되거나 Interrupt가 발생했을 때 OCn Output을 초기상태로 리셋해준다. Fast PWM과는 다르게 Phase Correct PWM은 TCNTn 카운트를 처음엔 Up카운트를 하고 그 이후에 Down카운트를 한다. 인터럽트는 최고 카운트 0xFF가 되었을 때 나오고 최하 카운트 0x00에서는 TOVn Interrupt Flag가 셋 된다. 이와중에 .. 더보기 [Atmega128] Stopwatch 8Bit Timer/Counter InterruptExternel Interrupt74HC595 8Bit Shift Register 를 사용하여 분단위 Stop Watch를 제작 뭐 제대로 만든건지는 확실하게 모르겠지만 ㅎㅎㅎㅎㅎ;;; 4 Digit FND와 74HC595 회로는 http://wjs890204.tistory.com/755에 포스팅 되어 있으니 참고 이건 외부 인터럽트를 위한 스위치 회로인데 C1은 채터링 현상 방지를 위해서 하나 낑굼 검색해보니 소자 끼는 것 보단 소프트웨어로 처리하는게 좋다고 하는데나는 외부 인터럽트를 사용하려고 했기 때문에그건 아무래도 힘들 것 같아서 하드웨어적으로 처리했다.소프트웨어적으로 처리하는 방법으로는 약간의 미세한 딜레이를 주는 방법과아니면 채터링이 생기는 것.. 더보기 [Atmega128] 8bit Timer/Counter Interrupt를 이용한 FND 카운팅 상위 2digit은 sec, 하위 2digit 은 microsec로 FND 카운트가 60.00 sec 가 넘어가면 리셋되는 방식으로(분 카운트도 하고 싶지만 74HC595가 부족해서... ㅠㅠ) 시계 구현.. 이제 Externel Interrupt 를 이용해서 스탑워치를 셋팅 예정. Prescaler = 64OCR0 = 249 16Mhz / 64 / (1+249) = 1000Hz 1000Hz => 1ms 1ms 단위로 인터럽트 발생하고 발생할 때마다 count++ 하고 count = 10 이 초시계 msec++ 하여 초시계 작동 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354.. 더보기 [Atmega128] 4Digit FND Count 회로도는 http://wjs890204.tistory.com/755 에 있으며 저기에 더 추가해서 총 4 Digit으로 구성했다 다만 상위 2 Digit은 Common Cathode 이고 하위 2 Digit은 Common Anode 이다 그래서 하위 2 Digit을 HC595write 함수에 전달할 때 반전 시켜준다. 배선은 PORTA.0 DS (DATA)PORTA.1 STCP (LATCH)PORTA.2 SHCP (CLOCK) 로 구성했다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778/*.. 더보기 [Atmega128] 2-Digit FND 회로도(74HC595) 내가 갖고 있는 2-Digit FND는 Comon-Cathode 방식으로 어렵사리 찾은 데이터 시트... 위의 방식으로 연결되어 있다. 모델명 : LTD-5x23A (Common Cathode) 또 집에 있는 1-Digit FND는 모델명 : FND507 (Common Anode) 이걸 Atmega 128에 74HC595 8Bit Shift Register 에 연결해서 사용하고자 한다면 아래와 같은 회로도로 구성하면 된다. 아쉽게도 2-Digit FND 라이브러리가 없어서... (만들긴 귀찮고) 그냥 하나짜리로 대체해서 만들었음. 이렇게 구성하고 타이머/카운터 인터럽트와 외부 인터럽트를 사용해서 한번 뭔가 만들고자 만들어 봄. 74HC595 핀배치도 Datasheet 더보기 이전 1 2 3 4 다음