나는 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 % 확신하지 못합니다. 데이터 시트에서 무엇을 할 수 있는지 이해하려고 노력했지만 아무데도 가지 않습니다. 작동하기 전에 완료해야 할 것이 있습니까?
핀을 올바르게 구성하지 않으면 SPI가 데이터를 전송하려고 시도하는 것을 막지 못할 것이라고 생각합니다. 그것은 아무데도 갈 수 없지만 주변 장치는 여전히 그것을 tx 것입니다. 주변 장치가 잘못 구성되었다고 제안합니다. 시계를 SPI에 사용할 수 있습니까? SPI를 활성화 했습니까? –
코드를 게시하십시오. 그렇지 않으면 우리가 할 수있는 일은 추측입니다. –