STM32_RC Car Project

공이지·2024년 9월 27일

Project 자료

  • 정리자료
  • Git Repository

    상세설명_1

    • STM32F103C8T6 Clock Configuration
    • STM32F103C8T6STM32F411RETX과 달리 clock PrescalerClockConfiguration에서 설정해줘야합니다. 위 사진처럼 HCLK의 최대 주파수를 세팅해주고 ADC Prescaler를 다음과 같이 최대로 나누어주게 되면 9MHzPreascale값을 세팅해 줄 수 있습니다.
    • 이전의 STM32F411RETX에서는 사진의 표시와 같이 ClockPrescaler를 몇으로 나누어 줄 지 선택할 수 있었습니다. 사진처럼 4로 나누게 되면 다음과 같은 식으로 ADC변환시 SamplingTime이 얼마나 걸리는지 계산이 가능합니다.

      100Mhz / 4 = 25Mhz(=40ns)로 계산되고, 데이터시트의 내용대로 Total Conversion Time에서 Sampling Time + 12(cycles)의 결과와 위에서 clcok을 4로 나눈 결과를 시간단위의 값과 계산을 하게 되면 약 6us가 계산이 됩니다.

    이처럼 STM32F103C8T6을 계산해보면 우리가 세팅한 ADC채널에서 사용할 ClockPrescaler9Mhz와 사진처럼 세팅한 239.5(cycles) + 12(cycles)의 결과와 곱해주면 대략 27us가 나오게 됩니다. 이는 1번의 Sampling을 실행할 동안 걸리는 시간을 의미합니다. 이 SamplingTime은 적게 걸리면 좋을것 같지만 굳이 빠르게 할 필요도, 시간이 많이 걸릴 필요없이 우리가 설계를 위해 필요한 세팅을 해주면 됩니다.

    상세설명_2

    • 위 사진은 조이스틱의 값의 변화에따라 txData(8비트)에 저장되는 값들을 보여줍니다.(HC-06(Slave) 모듈에서 txData가 전송됩니다.)
    • 다음은 HC-05(Master 모듈)에서 Slave로 설정한 HC-06에서 전송한 데이터를 rxData(8비트)라는 배열로 받아 저장합니다. 사진을 보면 전송한 데이터와 전송받은 데이터가 서로 다름을 볼 수 있습니다.

      이유는 다음과 같습니다. 우리는 RC카의 STM32보드(STM32F411RETX)의 USART6BaudRate9600으로 맞춰 HC-06(Slave)BaudRate와 동일하게 세팅해줬지만, 현재 2개의 블루투스 모듈간의 무선통신이 이루어지고 있는 상황에서 HC-05무선 통신의 경우 BaudRate38400으로 고정되기 때문에 통신속도가 맞지 않기 때문에 rxData에 전송되어 저장된 문자가 깨지게되는 것 입니다.

    상세설명_3

    • UART의 transmit는 polling방식을 사용합니다. 이유는 우리가 txData한 글자만을 전달하기 때문에 굳이 인터럽트, DMA방식을 사용하지 않아도 됩니다.(Polling방식은 간단하게 순차적으로 실행한다고 생각하면 됩니다.)이 후 UART통신의 Receive를 통해서 마스터 모듈은 슬레이브 모듈에서 전달하는 값을 전송받습니다. 여기서 중요한점은 UART통신의 수신은 polling방식이 아니라 인터럽트나, DMA방식으로 수신 받습니다. 왜냐하면 데이터를 전송하는 시점은 우리가 코드를 통해 결정해 줄 수는 있지만 수신은 직접 전송 받는 시점을 결정할 수 없습니다. 때문에 인터럽트를 활성화 시켜 전송을 받는 시점에 인터럽트를 발생시켜 콜백함수를 통해 rxData로 슬레이브에서 전송한 txData를 rxData를 통해서 받습니다.
profile
화이팅..!

0개의 댓글