# STM32

90개의 포스트
post-thumbnail

[프로젝트] 미니 농구 골대

농구 골대 다이소 스펀지 공(7cm)으로 사용 필요한 부품 부품 : STM32 개발보드 LCD 디스플레이 LED 버튼 부저 배터리 거리 센서(적외선) tools : STM32CubeIDE 동작 시작 버튼이 누르기 전까지 최고 점수, 시간 표시 시작 버튼이 눌리면 부저가 3번 울리고 시작 모델링 Diagram FSM 구조

약 22시간 전
·
0개의 댓글
·
post-thumbnail

[stm32] ADC multi channel 값 읽기 (DMA 방식 이용)

1. 핀 설정 ioc 파일에서 설정 해야된다. 각 보드의 데이터 시트를 살펴보면 ADC을 연결할 핀이 나올 것이다. 나의 경우, PA4-5에 ADC을 연결해야 했다. 2. ADC 설정 이런 식으로, PA4-5의 우클릭을 해보면, ADC에 설정이 있는 것을 볼 수 있다. 이렇게, 핀에 ADC IN4-IN5로 설정해줬다. ADC 설정을 열어, IN4-5에 체크해주면 된다. 멀티 채널을 읽을 때는 DMA 방식을 이용하면 쉽게 읽힌다. 따라서, DMA Setting을 열어 ADD을 눌러 ADC을 추가해주고, Mode는 Circ

2023년 5월 18일
·
0개의 댓글
·
post-thumbnail

UART 통신

UART 통신 UART(Universal asynchronous receiver/transmitter) 범용 비동기화 송수신기이며 Serial(직렬) 통신의 일종임. 일반적으로 RS-232, RS-422, RS-485 통신 프로토콜과 함께 사용함. 비동기 통신이므로 동기 신호가 전달되지 않아 수신 쪽에서 동기신호를 찾아내 데이터의 시작과 끝을 시간적으로 알아 처리할 수 있도록 약속되어 있음. UART 통신은 전이중 방식(Full duplx) 통신으로 송신과 수신을 동시에 할 수 있으며, 2개의 범용 입출력핀이 필요함. 1개의 입출력 핀을 통해 8개이 비트를 한번에 전송하는 방식임. 전이중 방식 통신의 특징이 Master 와 Sla

2023년 4월 19일
·
0개의 댓글
·
post-thumbnail

STM32 main함수 실행하기전 까지의 동작정리 (개인 보관 공부용)

동작 과정 대략적인 동작 과정 요약 MCU에 전원이 인가되면 Flash Memory에서 Stack Pointer를 초기화한다. Stack Pointer는 특정 값들을 임시저장을 위한 용도로 사용되는데, C 언어에서 파라메터를 넘기거나 함수안에 정의된 로컬변수들을 사용할 때 이용하므로 Stack Pointer 초기화 없이 C함수 호출하면 안된다. 하드웨어에서 Reset 주소값으로 Program Counter를 초기화한다. 즉, Reset 주소로 점프한다고 보면 된다.그러므로 MCU Power ON이 되면 startup 코드의 Reset_Handler함수가 가장 먼저 실행된다. startup 코드에서 .data(초기화 값이 있는 전역변수나 static 변수) 및 .b

2023년 4월 18일
·
0개의 댓글
·
post-thumbnail

STM32 개인 공부 정리용

Volatile 사용 이유 컴파일러가 최적화하는 것을 방지하기 위해 사용함. ex) 0x03번지가 GPIO 핀 중 하나고 LED를 제어한다고할 때 Volatile을 사용하지 않으면 컴파일러가 최적화를 해버려서 LED ON 신호는 무시해버린다. >- 내가 원하는 동작 >- LED ON 신호 무시(컴파일러 최적화) GPIO 제어 사용회로 (MCU PC13핀을 통해 LED 제어함.) HAL D

2023년 4월 18일
·
0개의 댓글
·
post-thumbnail

STM32 GPIO

IO Output포트 설명 1) GPIO 핀 설정 항목 >### 1. Push-Pull BJT 회로에서 2개의 TR Base에 모두 0V를 인가하면 위의 PNP TR만 ON이되어 Output 쪽으로는 3.3V가 흐른다. 반대로 2개의 TR Base에 모두 3.3V를 인가하면 아래 TR만 ON이되어 Output 은 0V가 된다. MOSFET 회로도 결국 TR과 동일한 동작을 함. 위 회로 요약 2) Open Drain ![](https://velog.velcdn.c

2023년 4월 17일
·
0개의 댓글
·
post-thumbnail

STM32 USB CDC

회로도 STM32 USB포트를 이용해서 UART 통신을 하기 위해서는 아래와 같이 OTG_FS 포트를 사용한다. 필요한 포트는 OTGFSDP/DM으로써 USB 포트를 통해 데이터를 송수신하는데 사용된다. USB_PU는 GPIO 중 하나를 사용하면 된다. PC에서 해당 디바이스를 Serail Port로 인식할 수 있게 해준다. 디바이스 시작시 USB_PU GPIO 포트를 HIGH로 설정한다. USB Port 설정 STM32CubeMX에서 PA11, PA12를 각각 USBOTGFS_DP/DM으로 설정한다. ![](htt

2023년 4월 4일
·
0개의 댓글
·
post-thumbnail

STM32를 활용한 스마트 팜 만들기

프로젝트 개요 > ### 개발동기 > ##### 코로나 및 사회적 격리 장기화 또는 코로나 사태 이후 경제적으로 어려워지거나 사람들을 만나기 힘들어지면서 우울감·외로움과 고독을 느끼는 사람들이 늘어나고 있는 추세 인터넷의 취약계층 들은 인터넷 정보의 접근성도 취약하다. 경로당에서 친구들하고 만나는 게 전부였을 만큼 스트레스를 풀 수 있는 자원 자체가 빈약하다. 불안감은 높은데 고립되는 것이 쉬움 ➜ 우울감 , 외로움 등을 느끼는 사람들이 많이 생긴 것을 인지 , 이를 해결해줄 제품이 필요하다고 느낌. > ### 프로젝트 작품 원리 설명 > ##### 조명 : RGB LED를 사용하지만 브라질의 기술자인 알프레도 모제가 개발한 페트병과 물, 표백제만으로 전구의 밝기와 맞먹는 페트병 전구에 LED를 4방향으로 설치하여 작은 전력으로 더 밝은 빛을 낼수 있도록 함.-> 환경오염으로 문제가 심각한 현대에 작은 전력으로 충분한 빛을 제공해줄수 있음.

2023년 1월 9일
·
0개의 댓글
·
post-thumbnail

stm32F407x의 클럭 (stm32 공부)

이 포스트는 udemy의 https://www.udemy.com/certificate/UC-c525d2a6-35cb-4bee-b4f6-b548f71d861d/ 강의를 공부하며 정리한 것입니다. stm32F407x의 클럭 소스 3개의 다른 클럭 소스가 있음 1.HSE 오실레이터 (크리스탈 오실레이터) - MCU 외장, 주로 사용됨, 8MHz HSE는 크리스탈이나 외부 소스를 통해서 MCU에 제공될 수 있다. 디스커버리 보드는 온보드 크리스탈에 의해 8MHz가 제공된다. 2.HSI 오실레이터 (RC 오실레이터) - MCU 내장 HSI는 MCU의 기본 클럭임(리셋시 이 클럭으로 설정) 3.메인 PLL (Phase Locked Loop) - MCU 내장 HSI, HSE를 보다 높은 값으로 끌어올리기 위해 PLL을 사용함 위 값들을 변경하기 위해서는 레퍼런스 매뉴얼의 7장 RCC의 7.3의 RCC 레지스터를 참고하여야 함 클럭 트리 레퍼런스 매뉴얼의 7장(RCC)에

2022년 12월 23일
·
0개의 댓글
·
post-thumbnail

stm32f4 디스커버리 보드 내장 LED 켜기

stm32f4 디스커버리 보드를 사용해서 내장 led를 켜보기 위해서는 설정해야 할 레지스터가 많다. AHB1 활성화 레지스터 데이터시트에 따르면 GPIOA ~ GPIOI 포트까지는 AHB1로 연결되므로 메모리 맵의 RCC에 해당하는 주소인 0x40023800를 찾고 AHB1 활성화 레지스터인 RCC_AHB1ENR의 오프셋 0x30을 이용해서 GPIOD에 해당하는 3번째 인덱스의 데이터를 변경하면 활성화가 가능하다 GPIOD 포트 활성화 레지스터 (GPIOx_MODER) GPIOD의 PD12에 연결된 내장 LED를 켜기 위해서는 모드 레지스터에서 해당 포트를 output 모드로 설정해주어야 한다. 메모리 맵에 GPIOD에 해당하는 주소인 0x40020C00 + 레지스터 오프셋 0x00

2022년 12월 13일
·
0개의 댓글
·
post-thumbnail

[STM32] USART CLI (4)

이전에 만들어 두었던 CLI 펌웨어에 IAP 기능을 추가해보았다. 보통은 ST-Link 디버거를 통해 코드를 보드에 다운받는데, 이 기능을 추가 하면서 디버거 없이, USART 통신만을 이용해 코드 다운이 가능하다. >게다가 Nucleo-f429ZI는 전원 USB케이블을 연결하면 Virtual Comport를 제공해준다. 따라서 별도의 Serial 선 없이 가능하다. 참고로 이 보드에서는 USART3으로 제공한다.) >md 0x08000000 126 명령을 이용해 Flash memory 영역을 읽어온다. 0x080000

2022년 11월 24일
·
0개의 댓글
·

STM32 내장부트로더 (GUI 설계)

출처 : 땜스 전자연구소 이 프로젝트에서 가장 어려운 점은 데이터를 갈무리 하며 serial로 write 하는 것이라고 생각한다. 그 외에 것들은 UART통신 프로토콜을 이해한 후에 명령어들의 송수신을 파악하면 되지만 데이터를 갈무리 하기 위해서는 문자열로 된 HEX파일을 16진수의 바이트 형식으로 바꿔주는 작업이 필요하다. 이 코드는 문자열 hex 파일을 16진수 바이트 형식으로 바꿔주는 작업이다. 차근차근 위에서부터 분석해보면 While문은 HEX파일 내부의 TEXT의 마지막줄까지 읽겠다는 뜻이다. 그리고 이 내부에 StringReadLine이라고 내가 선언해준 변수는 TEXT를 한줄 씩 읽어오겠다는 뜻이다. 그리고 그 아래 if문은 시리얼로 데이터를 읽을 때 실제 데이터 부분만 읽어야 하는데 실제 데이터 부분이 가지는 특징은 8번째 2글자가 "00"을 가지는 특징이 있다. 따라서 8번째 2글자가 "00"이 아닌 데이터가 마지막 부분에 있는데 그 부분을 만

2022년 11월 7일
·
0개의 댓글
·
post-thumbnail

STM32 내장부트로더 GUI 설계

출처: '땜스 전자연구소' 블로그 아직 미완성이긴 하지만 땜스 전자연구소에서 설명한대로 GUI 설계를 해보았다. 코드가 완전히 이해되진 않아서 어느정도 수정도 하긴 하였다. 위 사진은 Visual studio 프로그램을 이용해 GUI 디자인을 설계한 것이다. 아직 완성본은 아니지만 약 80%정도 완성 되었다. 각 컨트롤 별로 구분하기 쉽게 이름을 설정해주었다. 위 코드는 COM포트 부분 옆에 콤보상자가 변하면 그에 따라서 내부적으로 COM2, COM3 등등..이 선택 되게끔 하는 코드이다. Baudrate도 위와 비슷하게 해주었다. 잘 보면 통신포트열기 버튼이 있을 것이다. 통신포트열기 버튼을 누르면 통신포트 닫기로 text가 바뀌게끔 설정하였고 serialport.open 및 close

2022년 10월 21일
·
0개의 댓글
·
post-thumbnail

[STM32] Ethernet 통신

참고영상 이 실습은 위의 링크를 보고 실습을 진행한 내용을 정리해보았다. 환경 MCU 모델 : STM32F429ZIT6U 보드 : NUCLEO-F429ZI 1. Target Select 최초에 프로젝트를 생성하게 되면 MCU Selector 화면이 나온다. 이때, MCU selector로 진행할 경우 모델을 선택하거나 ![](h

2022년 10월 17일
·
0개의 댓글
·

STM32 내장부트로더 개발계획

나는 STM32F429I-DISC1 보드를 통해 내장부트로더를 이용하여 펌웨어를 다운해 보려고 한다. 내장부트로더를 사용하는 목적은 외부 시리얼 통신으로 디버거 없이 펌웨어를 다운로드 하기 위해서이다. 개발하기 위해서 첫째로 부트로더를 활성화 시킬 경우 부트로더 관련 데이터가 있는 메모리를 분석 -> Reference manual을 통해 BOOT MODE 분석 -> STM32 보드를 수정 (하드웨어) -> UART 통신 기반 부트로더 진입 -> visual basic을 이용한 GUI 설계 -> 설계한 GUI를 기반으로 펌웨어 다운로드 순서로 개발할 계획이다. STM32의 메모리중 HEX파일(펌웨어 데이터가 들어있는 파일)

2022년 9월 29일
·
0개의 댓글
·
post-thumbnail

STM32+CLion 사용

MacOS 에서 STM32+CLion 사용을 위한 작업 선행 작업 STM32CubeIDE, STM32CubeMx 설치 ST 홈페이지에서 MacOS용 최신버전을 받아서 설치하면 된다. Toolchain, OpenOCD 라이브러리 설치 MacOS에서 CLion+STM32를 사용하기 위해서는 toolchain과 openocd 가 설치되어 있어야한다. Toolchain은 STM32 소스코드를 컴파일하기 위한것이고, openocd는 디버깅을 위한 GDB Server이다. Toolchain과 openocd는 brew를 통해 설치 가능하다. MacOS Monterey에서 Brew를 통해 설치시 문제가 발생할 수 있는데 이는 아래와 같이 brew update로 해결 가능하다. Brew udpate시 문제 발생 Opened path 확인시 realpath 찾을수 없다면 coreutils를 설치하면 된다. Toolchain/OpenOCD 설치

2022년 9월 6일
·
0개의 댓글
·
post-thumbnail

STM32-PWM

배경지식 PWM에서는 Capture Compare Register가 추가된다. 줄여서 CC 레지스터라고 하는데, 이 레지스터는 0부터 Period사이의 값을 갖는다. > $0 <= CC register <= period <= 2^{16} - 1$ 라고 정리해볼 수 있을 것 같다. CC 레지스터의 역할은 Duty 비를 조절하는데 쓰인다. ![](https://velog.velcdn.com/images/sangyun911/post/48dbac94-1995-4c27-86ec-d13fd307f778/image.pn

2022년 8월 30일
·
0개의 댓글
·
post-thumbnail

stm32 pwm 주기 이용하여 LED 제어

pwm 주기를 이용하여 LED를 제어해보겠다. PC6은 LED가 있는 PIN이고 data sheet를 보면 TIM3_CH1이 있는데 이것은 PWM을 사용할 수 있는 타이머 채널이므로 이것을 설정해주겠다. 위와 같이 설정해주겠다. 주파수는 1khz로 설정해주었다. 이것에 관한 건 지난 글에 타이머 인터럽트를 참고하면 되겠다. 또한 PC6번 PIN을

2022년 8월 30일
·
0개의 댓글
·
post-thumbnail

STM32-TIM_Interrupt_2

구현(실습) > TIM7을 Activated를 check한다. > 값을 지정해줄 때, -1을 해준다. Code generation 을 진행하면 >main함수 내부에 위의 함수가 사용되고 있다. > 함수 내부를 보면 지정해주었던 Prescaler값과 Period 값이 사용자 설정대로 초기화 했다. >그리고 나서 update

2022년 8월 30일
·
0개의 댓글
·
post-thumbnail

stm32 타이머 인터럽트

stm32를 이용하여 타이머인터럽트 실습을 통해 LED를 제어해보겠다. data sheet를 보면 타이머 6과 7이 basic 타이머이므로 둘 중 하나를 사용해줄 건데 나는 타이머7을 이용할 것이다. 타이거7을 activated 해주고 global interrupt를 enable 시켜준다. ![](https://velog.velcdn.com/

2022년 8월 29일
·
0개의 댓글
·