인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

윤정현님의 프로필 이미지
윤정현

작성한 질문수

[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.

STM32에서는 SPI기능을 제공한다구 2

엣지와 static에 대해서 질문드리고 싶습니다.

해결된 질문

작성

·

20

0

spi 통신에서 선생님처럼 1엣지로 설정하고 진행하였을 때 작동이 되지 않았습니다. 그래서 2엣지로 바꿔서 작동하는데 성공시켰습니다. 이런 경우는 어떤 문제가 있었던 걸까요? 그리고 hspi2의 주소를 넘길 때 static SPI_HandleTypeDef *mhspi;를 사용하셨는데 static을 제거해도 작동이 되었습니다. static의 목적에 대해서 알고 싶습니다.

답변 2

0

ojtube5님의 프로필 이미지
ojtube5
지식공유자

일단 엣지에 관련된 내용은 제가 전에 답변을 한게 있어서 그걸로 대신할게요.

5분 25초에서 CPHA 1edge냐 2edge냐 옵션설정 부분에서 강의에서는 1edge로 설정하라 하셨는데 저의 경우에는 2edge로 설정해야만 LED가 켜집니다. 1edge에서는 안켜져요 왜그런지 알 수 있을까요?

제가 강의를 자세히 보니, send하는 부분을 이야기 하고 있네요.
gpio코드를 보면 사실상, 1edge와 2edge 둘다 걸리게 신호를 보내고 있습니다.
그래서 제가 1edge로 해도 상관 없다고 이야기를 한것입니다.

근데 데이터 시트를 보니, rising edge에 stored 된다고 써있네요.
high로 있다가 low로 떨어지고 rising 되는 순간이니깐, 2edge가 맞네요.
gpio로 만든 신호는 1edge와 2edge 둘다 신호를 세팅을 해놔서 문제가 없었던 것이고..
spi로 세팅하는건.. 2edge가 맞네요.
죄송합니다. ㅠ_ㅠ


그리고 hspi2의 주소를 넘길 때 static SPI_HandleTypeDef *mhspi;를 사용하셨는데 static을 제거해도 작동이 되었습니다. static의 목적에 대해서 알고 싶습니다.

간단하게 이야기하면, 해당 파일에서만 접근하려고 한거예요.

static 키워드는 변수의 생존기간과 가시범위를 제어하는 역할을 합니다.
코드 상황에 따라 목적이 달라질 수 있으나, 주로 다음과 같은 이유로 사용됩니다.

  1. 전역 변수의 범위 제한:
    전역 변수를 선언할 때 static을 붙이면 해당 변수가 해당 소스파일 내에서만 참조 가능하도록 가시범위를 제한한다. 이를 통해 다른 파일에서 변수 이름 충돌이나 불필요한 접근을 방지할 수 있다.

  2. 지역 변수의 정적 할당:
    함수 내부에 선언된 변수에 static을 붙이면, 함수가 여러 번 호출되더라도 그 변수는 프로그램 실행 동안 메모리 상에 고정적으로 유지된다. 이를 통해 함수 호출 사이에 변수가 값을 기억하도록 하는 용도로 사용한다.

    image.png


0

안녕하세요, 인프런 AI 인턴입니다.

윤정현님께서 SPI 통신과 관련하여 엣지 설정과 static 키워드에 대해 물어보셨군요. 질문에 대한 답변을 드리며, 관련 내용을 조금 더 설명드리겠습니다.

  1. SPI 통신에서의 엣지 설정 문제:

    • SPI 통신에서 엣지는 데이터를 샘플링하거나 클럭 신호를 변화시키는 시점을 결정합니다. 일반적으로 Rising Edge(상승 엣지)와 Falling Edge(하강 엣지) 중 하나를 선택하게 됩니다.
    • 윤정현님이 1엣지에서 동작이 되지 않고 2엣지로 변경 후 작동한 경우, 상대 기기와의 클럭 동기화에 문제가 있었을 수 있습니다. 각각의 하드웨어는 특정 엣지에서 데이터를 샘플링하도록 설정되어 있기 때문에, 맞지 않으면 데이터 통신에서 오류가 발생할 수 있습니다.
  2. static 키워드의 사용 목적:

    • static은 함수 내부에 선언된 변수가 함수를 벗어나더라도 그 값을 유지하도록 하는 역할을 합니다.
    • 이를 통해 해당 변수가 전역에서 유지되며 여러 번의 호출에도 값을 보존할 수 있습니다.
    • 귀하의 코드에서 static을 제거해도 문제가 없이 작동했다는 것은, 코드 구조상 그 값이 유지되지 않아도 기능상 문제는 발생하지 않았기 때문일 수 있습니다.

이와 관련된 유사한 질문과 답변이 다른 게시물에서 다루어졌으니, 참고하시면 추가적인 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

윤정현님의 프로필 이미지
윤정현

작성한 질문수

질문하기