2017-02-10 5 views
1

나는 AVR 코드 중 일부를 배우는 연습으로 간단한 SPI LCD를 ARM으로 이식하려고 노력해왔다. (나는 ARM에 일반적으로 익숙하다.) 이를 위해서는 마스터 모드에서 SPI를 사용해야합니다.STM32F1 - 베어 메탈에 마스터 SPI 사용

내 장치 (STM32F103C8)에 대해 datasheet을보고 필요한 SPI1 핀을 찾았 으면 SCK 및 MOSI는 다른 주변 장치 (29 페이지 참조)와 함께 PA5 및 PA7의 대체 기능으로 각각 매핑됩니다. 필자는이 핀에서 SPI 기능을 사용하기 위해 동일한 핀에 매핑 된 다른 것이 비활성화되어 있는지 확인해야한다는 것을 이해했다. 그러나 주변 장치 클럭 제어 레지스터의 기본값을 보면 다른 기능이 이미 비활성화 된 것처럼 보입니다.

섹션 을 포함하여 reference manual의 SPI 섹션을 살펴 보았습니다. 25.3.3 - 마스터 모드에서 SPI 구성. 먼저 APB2ENR에서 SPI1 마스터 클럭을 활성화하고이 섹션의 단계에 따라 SPI1을 필요에 맞게 구성합니다. 또한 PA5/7의 설정을 "Alternate Function Output push-pull"(9.1.4) 모드로 설정을 변경했습니다. 마지막으로 CR1_SPE를 설정하여 SPI1을 활성화했습니다.

필자는 위의 SPI를 구성한 후 SPI1 데이터 레지스터에 값을로드하면 데이터가 바뀌는 것이라고 생각했습니다. 그러나 데이터를 쓰고 나면 SPI 상태 레지스터의 TXE 플래그가 설정되지 않고 내가 쓴 데이터가 그냥 거기에 있음을 나타냅니다.

이 시점에서 올바르게 구성하지 못한 다른 것이 있다고 가정합니다. 예를 들어, 나는 PA5/7 핀으로 무엇을 할 지 100 % 확신하지 못합니다. 데이터 시트에서 무엇을 할 수 있는지 이해하려고 노력했지만 아무데도 가지 않습니다. 작동하기 전에 완료해야 할 것이 있습니까?

+0

핀을 올바르게 구성하지 않으면 SPI가 데이터를 전송하려고 시도하는 것을 막지 못할 것이라고 생각합니다. 그것은 아무데도 갈 수 없지만 주변 장치는 여전히 그것을 tx 것입니다. 주변 장치가 잘못 구성되었다고 제안합니다. 시계를 SPI에 사용할 수 있습니까? SPI를 활성화 했습니까? –

+0

코드를 게시하십시오. 그렇지 않으면 우리가 할 수있는 일은 추측입니다. –

답변

4

SSMSSI 비트를 SPIx->CR1 레지스터에 설정하지 않았 음이 거의 확실합니다. 이 칩 SPI는 폴링 전송을 위해 당신은 SSM, SSI, SPE, MSTR이 올바른 형식 (LSBFIRST, CPOL, CPHA) 및 SPIx->CR1에 적절한 전송 속도 (BR) 그리고 당신이 갈 수 있어요 설정해야합니다 아주 간단합니다.

+0

마스터 모드에 영향을 미치지 않을 것이라고 생각 했으므로 SSM/SSI 설정을 건드리지 않았습니다. – Triforcer

+0

@Triforcer - 하드웨어 CS 핀을 사용하지 않을 때이 비트는 마스터 모드에 영향을 미칩니다. STM32는 멀티 마스터 모드를 지원하기 때문에 CS가 마스터 모드에있을 때 아무것도 전송하지 않습니다. SSM과 SSI는 "소프트웨어 슬레이브 선택"역할을하며 동일한 규칙이 적용됩니다. "0"일 때 전송이 표시되지 않습니다. –

+0

SSI/SSM 비트를 설정하면 내 문제가 해결되었습니다. 감사합니다. 과거에 사용했던 마이크로 컨트롤러에는 멀티 마스터를위한 조항이 없었기 때문에이 개념은 나에게 외계인이었습니다. 나는 왜 당신의 대답이 실패했는지 모르겠습니다. 사람들이 이유를 밝히지 않고 그렇게하는 것은 비 건설적 인 것처럼 보입니다. – Triforcer