본문 바로가기
MCU 일반

STM32F PB3(JTDO)핀 GPIO로 사용하기

by irmus 2011. 9. 24.
STM32F10x 시리즈 MCU의 PB3 핀은 기본적으로 JTDO로 사용됩니다. 필요한 경우 remap을 통하여 GPIO로 사용할 수 있습니다. JTAG 관련 5개 핀 모두 다 해당하는 말인데 콕찝어 PB3만 언급한 것은 이녀석이 SWO와도 multiplexing 되어 있기 때문입니다.
제가 격은 문제는 JTAG은 안쓰고 SWD만 쓰면서 어쩌다 보니 SWO가 활성화 되어버리면서 PB3를 제맘대로 못쓰는 일을 겪으면서 오늘 황금같은 토요일을 진창 날려버렸습니다. 아 열받어.

일단 SWO에 대한 언급은 STM32 데이터시트에 아래와 같이 언급되어 있습니다. 



저 빨간 박스 쳐 놓은 저 주석 한줄이 끝입니다 -_-;;;


asynchronous trace가 뭐냐 한참을 뒤졌네요. synchronous trace는 JTRACE 핀 5개를 이용한 것이고, asynchronous trace는 SWO 핀 하나만 사용하는 겁니다. 문제는 trace의 사용 여부는 펌웨어 코드 내부에서가 아니라 디버거 툴이 초기화 할 때 설정한다는 것입니다. 이제 코딩의 문제가 아닌 툴 셋팅의 문제로 돌아섰습니다.

IDE의 별별곳을 다 찔러봐도 SWO 끄는 옵션은 안보이더군요. 그러다 문득 화면 좌측 상단에 전에 안보이던(였던것 같은) 녹색 아이콘이 보였습니다. 마우스 커서를 올려보니 SWO가 ON 되어 있답니다. 누굴 약올리나...난 끄고 싶다고~


풍선도움말에 보니 PC Sampling-based profiling에 SWO가 쓰인다고 하네요. 불현듯 머리속을 치고 지나가는 며칠전 일. function 수행에 걸리는 시간을 좀 더 스마트하게 측정해 보고자 J-link에서 profiler를 써볼려고 몇군데 찔러봤던 일이 기억났습니다. 그때 내린 결론은 왜인지는 모르겠지만 일단 안된다였는데, 그때 profiler를 켜두곤 그냥 그대로 내버려 둔 것입니다. 아놔... 그래서 냉큼 껐습니다. 어디서 끄냐구요? 이거도 참 잘 숨겨놨더군요. 메인메뉴 J-Link->Function Profiler를 실행하면 뜨는 창에 Enable/Disable 버튼이 있습니다. 이걸 disable로 해놓으니 SWO 아이콘에서 녹색이 사라지는군요.

이제 PB3 놔줬겠지 하고 다시 해보니 이건 또 왠걸 여전히 SWO로 쓰이고 있는 것입니다. 또다시 머리 뜯으며 인터넷 뒤져보길 한시간여... 슬슬 지쳐가던 참에 또다시 머리속을 치고 지나가는 생각 하나. SWO 끈 다음에 보드 전원을 완전히 끊었다가 다시 붙여보진 않았던것 같습니다. 계속 warm booting만 하면서 디버깅 하고 있었으니 왠지 예전의 SWO 설정이 남아있는게 아닐까 싶더군요. 그래서 케이블 뽑았다가 다시 연결해서 해보니, 드디어 됩니다 ㅠ_ㅠ

창밖을 보니 해는 져서 깜깜하군요. 환상 날씨 토요일은 이렇게 SWO와 함께 날아갔습니다.
혹시 STM32에서 JTAG은 안쓰고 SWD는 쓰면서 PB3를 다른 용도로 사용하시는 분이 저같은 문제 겪으실까봐 정리해 놓습니다. 정리해 놓고 보니 참 드문 케이스일듯 하군요 -_-;
다음부터는 왠만하면 SWO 핀도 살려놔야 겠습니다. 그래야 trace기능 일부라도 쓸 수 있고, 이런 문제 겪을 일도 없구요.




이 문제 해결해볼려고 검색하다 동일한 문제를 일년전부터 겪고 있는 듯한 한분을 찾았습니다.
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FBIG%20PROBLEM%20WITH%20SPI%20Interface%20in%20STM32%20completly%20disaster%20of%20ST&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=1863
답을 알려줄까 생각해 봤는데, 영 귀찮기도 하고, 게시판에서 쌈박질이나 하는 사람에게 짧은 영어로 메일썼다 뭔 쌍욕을 들어먹을지 두려워서 그냥 뒀습니다;; 게시판에서 싸우지 말자구요...