제가 사용하는 칩은 stm32f107 이라고 품명이 붙어 있습니다.

 flash 256K memory 64K 로 작은 놈이죠.

 마이컴 기준으로는 뭐... 널널한 사이즈이지만 좋은 칩만 쓰다보니... ㅠㅠ


 핀은 64핀 밖에 되지 않지만 상당히 많은 기능을 갖고 있습니다. 

 당연히 핀들을 공유하는 기능이 있습니다.


 저는  jtag 으로 펌웨어를 다운로드 하고 있고 spi3 번을 사용하려고 하고 있습니다.

 alternate 기능으로 spi3 번을 선택하고 사용하려고 했습니다.


 하지만 동작을 안하는 군요?

 데이타 쉬트를 아무리 보아도 그 외에 다른 기능은 없습니다.


 그러다가 찾은 건...

 jtag 같은 경우 무조건 활성화 되어 있어야 하기 때문에 핀의 기본 기능으로 되어 있습니다

 alternate 설정을 하여도 jtag 을 비활성화하지 않는 이상 무조건 jtag pin 으로 사용하게끔 되어 있네요 ㅠㅠ


 그래서 해야 하는 것은 AF  remap 에 있는 SWJ_CFG 레지스터를 제어하는 것입니다. 

 해당 레지스터는 아래와 같이 설명이 있습니다. 


Bits 26:24 SWJ_CFG[2:0]: Serial wire JTAG configuration

These bits are write-only (when read, the value is undefined). They are used to configure the

SWJ and trace alternate function I/Os. The SWJ (Serial Wire JTAG) supports JTAG or SWD

access to the Cortex debug port. The default state after reset is SWJ ON without trace. This

allows JTAG or SW mode to be enabled by sending a specific sequence on the JTMS /

JTCK pin.

000: Full SWJ (JTAG-DP + SW-DP): Reset State

001: Full SWJ (JTAG-DP + SW-DP) but without JNTRST

010: JTAG-DP Disabled and SW-DP Enabled

100: JTAG-DP Disabled and SW-DP Disabled

Other combinations: no effect


 이 레지스터의 jtag 기능을 비활성화 시키지 않으면 해당 핀은 무조건 jtag 모드로 동작합니다.
 하지만.... 한가지 맹점이 있습니다.
 프로그램 시작하자마자 jtag 기능을 비활성화 시키면 해당 mcu 는 더이상 jtag 으로 다운로드를 할수 없습니다.
 결국.... 양산시에만 적용하든지...
 프로그램 시작후 일정시간후에 이 기능을 비활성화 시켜야 그 사이에 jtag 으로 연결이 가능하여
 새로운 프로그램을 다운로드 할수 있습니다.

 만약 버그로 프로그램 시작하자 마자 비활성화 시킨다면
 무수한 reset 을 통해 비활성화 시키기 전에 jtag 을 활성화 시켜야 하지만 비추합니다 절대 불가..
 그 외에는 저처럼 mcu 를 갈아야 합니다.
 부팅 모드를 플래쉬에서 시리얼로 바꿀수 있다면 시리얼 다운로드는 가능할지 모르겠네요.

 stm 쓰면서 주의해야 할 사항중에 하나 입니다.