본문 바로가기
  • SpokeHouse
STM32/STM32C

STM32C031 - GPIO control

by SpokeHouse 2024. 4. 24.
728x90
728x90

안녕하세요 (주)스포크하우스 오토입니다.

이번에는 STM32C031 사용하여 GPIO 컨트롤 하는 방법에 대해 포스팅해보겠습니다.

앞으로 ADC, PWM, i2c, spi 등 mcu 관련 포스팅을 전체적으로 진행해보겠습니다.

대망의 첫 MCU 포스팅을 시작하겠습니다.

먼저 GPIO란 다용도 입출력이라는 의미를 가지고 있습니다. general-purpose input/output 의 약자가 되겠습니다.

전압레벨을 High, Low 로 세팅해주면서 다양한 기능을 할 수 있는 것이죠

첫시간이니 만큼 GPIO를 High, Low, Toggle 시키는 방법에 대해서 포스팅하겠습니다.

먼저 저는 STM32CubeMX를 사용하여 코드를 생성한다음 VSCode로 코드작성 및 디버깅을 진행하고 있는점 참고해주세요

VSCode로 ST사의 MCU의 펌웨어를 개발하는 방법은 아래의 링크를 참고 하시면 금방 하실 수 있습니다.

- Cmake 설정

https://www.notion.so/C-Make-cccbcfb1685240229b30153f7dbad9a4?pvs=4

 

C-Make 환경설정 | Notion

Mac STM32 VsCode Makefile 설정에 대한 포스팅입니다.

blushing-vicuna-51e.notion.site

- VsCode - Cmake 디버깅

https://www.notion.so/VsCode-Cmake-c033f7627e60482ba1ffcb972dbc281f?pvs=4

 

VsCode - Cmake 디버깅 | Notion

확장프로그램 설치

blushing-vicuna-51e.notion.site

 

먼저 stm32cube mx를 열어주세요

mx 시작하는 방법은 여기서는 다루지 않도록 하겠습니다.

아래와 같이 사용할 stm32c031 mcu가 나오면  input , output에 대한 설정을 눌러서 진행해주시고 코드를 생성해주세요

VSCode 세팅을 마쳤다는 가정하에

이러한 화면을 보실 수 있을거구요

main.c에 작성을 시작하는것이 일반적이나 저는 따로 APP이라는 폴더에 제가 사용할 코드파일들을 만들고 진행하겠습니다.

별도의 파일을 만들고 시작하게되면 나중에 코드 재사용에 큰 이점이 있고 문제가 발생하였을때 디버깅 하거나 해당 부분을 기존의 코드로 대체하여 유연한 진행이 가능합니다.

APP이란 폴더 안에 헤더파일과 소스파일을 추가하고 이번 포스팅에 사용할  hal 드라이버 함수 3가지를 작성하였습니다.

GPIO 컨트롤 함수들은 기본적으로 포트와 핀넘버를 필요로 하며 write함수의 경우 원하는 상태(High, Low)를 작성해줘야합니다.

그러면 진행해보겠습니다.

저는 기존에 있던 led핀으로 output 확인할 예정이고 새로 만든 pb2를 이용해서 input을 테스트하도록 하겠습니다.

토글 기능도 led핀을 이용해서 바로 확인해보죠

코어의 소스파일 내부에서 확인해보아도 잘 이니셜 될 예정인것으로 확인되구요


        HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);
        if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2))
        {
            HAL_GPIO_WritePin(Led_GPIO_Port,Led_Pin,RESET);
        }

        else
        {
            HAL_GPIO_WritePin(Led_GPIO_Port,Led_Pin,SET);
        }
        //HAL_GPIO_TogglePin();

이렇게 코드 작성해서 넣어줘보겠습니다.

b포트의 2번 핀의 상태를 읽어와서 set된 상태라면 Led 출력핀을 리셋으로 하여 불을 키고 아니면 꺼진상태로 있는거죠

출력 핀을 리셋해야 led가 켜지는 이유는 dk 보드 회로가 아래와 같이 때문입니다.

make 진행하고 디버깅 해보겠습니다.

make는 정상적으로 잘되었네요

디버깅 진행 해보겠습니다.

아래와 같이 LD1번의 led가 잘 들어오네요 

나머지도 같은 방식으로 하면되니 간단히 코드만 공유해놓도록 하겠습니다.

       HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);
        if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2))
        {
            HAL_GPIO_WritePin(Led_GPIO_Port,Led_Pin,SET);
        }

        else
        {
            HAL_GPIO_WritePin(Led_GPIO_Port,Led_Pin,RESET);
        }
        HAL_GPIO_TogglePin(Led_GPIO_Port,Led_Pin); //핀 토글
        HAL_Delay(1000); //1초 딜레이

 

그럼 오늘도 대단히 맛있는것 많이 드시고 들어가세요

이맹호 드림.

728x90
728x90

'STM32 > STM32C' 카테고리의 다른 글

GetTick 함수 활용 - Non blocking Delay  (0) 2024.04.29

댓글