강좌 <6a>: UART 통신사용 본강좌에서는좀더원칙적인방식으로예제실습에접근해봅니다. ST사의최신자료를다운로드하여수정사용작성일자 : 2010.5.26 목표 : 이번강좌에서는비동기 (UART) 통신에대해서다루어봅시다.UART 통신동작의이해는여러응용장치를만드는데, 매우필요한기술로각종설정, 표 시, 저장장치의응용, 각종센서류와의인터페이스, GPS, RF 장치등여러곳에서비동기통신기술을필요로합니다. 비동기통신처리방법이플래그체크에의한 Polling 방식, 인터럽트사용방식, DMA 사용방식등다양하고, 프로그램작성하는사람마다스타일이달라서기술동냥하여한수배우려해도이해하는데시간도많이걸리고, 이프로그램이좋은프로그램인지좀의심이가기도하고, 아무튼초보입장에서는기술을좀습득하는데배고프고, 머리아프고그렇죠? 그러면 MCU 학습의정통코스는무엇일까? 생각해봅니다. 처음시작할때, 간단한보드와컴파일러를입수하고, 떠다니는예제를여기저기서가져다가사용하려하니, 버전도다르고이해도좀안되고 그래서이번강좌에서는나름대로정통학습코스라생각하는방식으로접근해보겠습니다. 가장최신의자료는소자를만드는회사에서찾아야할것같습니다. 소자데이터시트를비롯하여, 각종응용기술자료, 에러리스트, 최신의라이브러리등을웹상에올려놓을것같습니다. 그뒤에컴파일러회사에서예제자료로사용되고 물론자료에버그는있을수있는데, 각종동호회나포럼에서무언가잘동작안하는게있다라는정보가다시나타나겠죠? 본강좌에서는 ST 사의 STM32 를중심으로진행하므로먼저 ST 사의홈페이지를방문하여최신자료를가져와작업해보도록하겠습니다. 먼저 http://www.st.com/mcu/familiesdocs-110.html 에방문하여자료를대충살펴보고, 필요한자료 ( 데이터시트, 관심있는응용자료, Tool 자료, 라이브러리자료를가져다본인의컴퓨터에저장합니다. 특히이번강좌에서진행할통신강좌는아래의 STM32F10x 의표준주변장치자료를사용하여진행해보독하겠습니다. 자료가 2010 년 4 월에나온버전 3.3 으로비교적최신자료네요. 자료를받는방법은잘아시죠? 압축파일을마우스로누르면, 별다른등록없이아래와같이바로다운받을수있네요. ~ 야 ~~ 호 ~~ 1
STM32F10x 표준주변장치라이브러리및예제살펴보기 다운로드된자료의압축을풀어보니최신의라이브러리와각종장치의예제가보이시죠? 앞으로할일이많이생겼다는 즐거움? 고통? 다운로드된자료의압축을풀어보니최신의라이브러리와각종장치의예제가보이시죠? 개발환경도여러업체를고려하여 5가지나제공해주는군요. 본강좌에서는 IAR를사용하므로 EWARMv5를참조하시고 이번강좌에서살펴볼 UART 예제도아래와같이여러예제가있네요. 2
개발환경및기타검토내용 제공된예제에서는 ST 사의 4 가지평가보드를사용하여진행하고있는데, 이러한평가보드를가지고계신분은그보드를사용하여예제를진행하면훨씬편하게예제를진행할수있겠지요. 하지만저가의 ARM 모듈하나가지고있는현시점에서, 언제기다려서평가보드를사기도번거롭고하여, 프로그램을조금수정하여사용하기로마음먹고, 진행합니다. 열악한환경에서짜깁기하면서공부하는것이실력이더늘수도있겠지요? 하지만시간도돈이므로, 급히제품개발을해야하는분은그냥평가보드사달라고하여사용하세요. 별로비싼거같지는않아요. 참조 : 개발자의상식 ST 사의 4 종류의평가보드 평가보드관련회로도등자료도 ST 사의웹에서다운가능합니다. 참고자료내용중에아래와같은문구도있는데, 업체에서제공한프로그램을난그대로사용했는데, 장비가오작동하여손실이발생했다. 해당업체가배상하라!!! 하지마라는거죠. 제공된자료들은응용업체의시간을절약해주기위해참고로제공하는것이므로사용자가충분히수정보완사용하시라는 IAR 개발환경의설정및사용방법에대해서는이전강좌를참조하시거나관련매뉴얼을가지고별도공부가필요합니다. 프로젝트관리파일들 링크커맨드파일 기존파일내용 : 사용하시는 ARM 의종류에따라플래시롬및 SRAM 크기가다르므로조금조정하여사용바람, 수정을위해서데이터시트의메모리맵도살펴보면서연구해보세요 3
통신예제수정사용 본예제의 4 가지방식을잘이해하여사용하면통신제품개발에많은도움이될수있습니다. 프로세서시간활용면에서폴링방식보다인터럽트방식 ( 송신까지 ) 사용을권장합니다. 제공된각예제중에먼저 4가지예제에대해서수정사용해보겠습니다. Ex06a: 플래그체크에의한폴링방식, UART1 에서데이터를송신하고, UART2 에서데이터수신, 시험을위해 1 개의통신선연결필요 Ex06b: UART1 및 UART2에서인터럽트방식으로각각송출, 2개의신호선교차연결필요. Ex06c: DMA와 Polling 방식으로데이터전송 Ex06d: DMA와인터럽트방식으로데이터전송예제디렉터리 : ST사의 USART 관련제공예제들 통신설정 : Bps: 115200 Data: 8 Stop: 1 Parity: No 오실로스코프로파형관찰및톹신터미널프로그램을접속하여데이터관찰가능 개발환경은 : 통신시험이므로 JTAG 를사용하는것이더좋겠죠. 통신포트를사용하므로 수정된 4가지방식통신예제 본예제시험에 STM32F103R8 소자를사용했음. 4
통신예제실행관찰 시험에사용된보드 : UART1, UART2 단자있음 통신포트는 UART1 ( 프로그램에서 USARTy 표시 ) 과 UART2 ( 프로그램에서 USARTz 표시 ) 를사용하여실험하였는데, 가지고계신보드에맟추어포트및레벨을수정사용하시면됩니다. ST사에서제공된통신예제를잘이해하여, 사용자가필요한몇가지함수를더추가하여사용하시면응용제품에충분히만족스럽게사용가능합니다. 폴링방식보다는인터럽트방식 (DMA는사용은호환성면에서불리 : 타사소자에기능이없는경우 ) 사용을권장합니다. 폴링처리방식 : 터미널로데이터관찰폴링처리방식 : 통신파형관찰 (RS232 레벨 ) 인터럽트방식 : TX, RX 신호통신파형관찰 (RS232 레벨 ) 인터럽트방식 : 터미널로데이터관찰 5
STM32 USART 살짝살펴보기 USART 구성도 STM32 의 USART 는많은채널수제공 (3 ~ 5 채널 ), 높은 bps(4.5mbps), DMA 지원등장점이많은데, 특히마음에드는것은다른 USART 에비해 BPS 에러율이비교적적다 (8MHz 클럭으로 ) 는점이지요. RS485 통신의 TXENABLE 핀을잘제어하려면 TC 인터럽트도잘활용하시면됩니다. 다른 MCU에비해서 bps 에러율을획기적으로줄이는비법이여기에있네요 4비트를소수점이하로다룬다는 ( 나만이제야아는건가???) 6
STM32 USART 통신 bps 검토 Bps 계산공식 USART 통신 bps 테이블 : Fck bps USARTDIV Mantissa Fraction Fra*16 Fra_adj USARTDIV_set bps_real % err 72000000 1200 3750 3750 0 0 0 3750 1200 0 72000000 2400 1875 1875 0 0 0 1875 2400 0 72000000 4800 937.5 937 0.5 8 8 937.5 4800 0 72000000 9600 468.75 468 0.75 12 12 468.75 9600 0 72000000 19200 234.375 234 0.375 6 6 234.375 19200 0 72000000 38400 117.1875 117 0.1875 3 3 117.1875 38400 0 72000000 57600 78.125 78 0.125 2 2 78.125 57600 0 72000000 115200 39.0625 39 0.06250625 1 1 39.0625 115200 0 72000000 230400 19.53125 19 0.53125 8.5 8 19.5 230769.2308 0.16025641 72000000 460800 9.765625 9 0.765625 12.25 12 9.75 461538.4615 0.16025641 72000000 921600 4.8828125 4 0.8828125 14.125 14 4.875 923076.9231 0.16025641 72000000 1000000 4.5 4 0.5 8 8 4.5 1000000 0 Bps 계산공식을사용하여엑셀로아래와같이표를작성해보았습니다. 8MHz 클럭을 9배로증분하여 72MHz로동작하여통신에러율을걱정하였는데, 놀랍게도거의에러가없다는사실. 그비법은 BRR 레지스터 STM32F103 구성도를잘살펴보면 72MHz 까지동작하는 APB2에 USART1이배치되어있고, 36MHz까지동작하는 APB1에 USART2, USART3이배치되어있으므로이점을고려하여사용. 따라서 UART1이더고속까지가능하겠네요. Fck bps USARTDIV Mantissa Fraction Fra*16 Fra_adj USARTDIV_set bps_real % err 36000000 1200 1875 1875 0 0 0 1875 1200 0 36000000 2400 937.5 937 0.5 8 8 937.5 2400 0 36000000 4800 468.75 468 0.75 12 12 468.75 4800 0 36000000 9600 234.375 234 0.375 6 6 234.375 9600 0 36000000 19200 117.18751875 117 0.1875 3 3 117.18751875 19200 0 36000000 38400 58.59375 58 0.59375 9.5 9 58.5625 38420.49093 0.053361793 36000000 57600 39.0625 39 0.0625 1 1 39.0625 57600 0 36000000 115200 19.53125 19 0.53125 8.5 8 19.5 115384.6154 0.16025641 36000000 230400 9.765625 9 0.765625 12.25 12 9.75 230769.2308 0.16025641 36000000 460800 4.8828125 4 0.8828125 14.125125 14 4.875 461538.4615 0.16025641 36000000 921600 2.4414063 2 0.44140625 7.0625 7 2.4375 923076.9231 0.16025641 36000000 1000000 2.25 2 0.25 4 4 2.25 1000000 0 USART_BRR 레지스터 : 일반적으로많이사용하는 1200 ~ 115200에서에러율이거의 0% 이고, 921600bps 및 1Mbps 에서도에러율이적어요. 만족. 4 비트소수점이하처리가능에러율저감비법 7
통신처리방법검토 송수신처리방식은응용제품기능이나, 프로그래머의취향에따라여러가지통신처리방식이있을수있겠지요. RS438 의 TXENABLE 처리문제송신및수신처리방식등. 각자좋아하는방식으로충분히검토하시어처리하시면되겠지요. 통신방법은가급적 MCU 의처리효율및프로그램자유도를높이기위해서인터럽트처리방식을사용하는것이좋겠지요. 송신동작검토 : 보내려는문자열버퍼에저장 RS485 통신소자 : 75176 구성도 송신인터럽트에서마지막문자까지전송 RS485 통신의송신 Enable 제어처리문제 : RS485/422 방식으로통신을할때, 아래그림과같이 TXEN 신호를제어해주어야하는데, 제어를잘못하는경우에마지막문자가전송되지않을수있습니다. 오실로스코프로잘관찰하여마지막문자까지잘전송되도록 TXENABLE 신호를제어해주어야함 송신링버퍼검토 TXD 신호 송신데이터문자열 수신동작검토 : TXEN 신호 송신 Enable 송신 Disable TXD 신호 TXEN 신호 송신데이터문자열 송신 Enable 송출되지못한데이터 송신 Disable 상태를이동하면서처리 8