Тёмный
Baram
Baram
Baram
Подписаться
MCU를 이용한 임베디드 펌웨어 개발자입니다. 프로그래밍을 좋아하고 특히 하드웨어와 관련된 펌웨어 구현을 많이 하고 있으며, 오랜동안 즐겁게 프로그래밍을 하는 것을 목표로 하고 있습니다.

APM32E103-KIT 보드 제작
20:22
6 месяцев назад
STM32 펌웨어 Assert 활용하기
22:04
6 месяцев назад
TouchGFX Bring-Up - #10 TouchGFX 프로젝트
23:36
7 месяцев назад
TouchGFX Bring-Up - #9 I2C (Touch)
17:12
7 месяцев назад
TouchGFX Bring-Up - #8 LTDC
18:10
7 месяцев назад
TouchGFX Bring-Up - #7 SPI (LCD 설정)
13:58
7 месяцев назад
TouchGFX Bring-Up - #6 PWM
13:47
7 месяцев назад
TouchGFX Bring-Up - #5 FMC
25:01
7 месяцев назад
TouchGFX Bring-Up - #4 UART
17:22
7 месяцев назад
TouchGFX Bring-Up - #3 LED
36:37
8 месяцев назад
TouchGFX Bring-Up - #2 프로젝트 생성
15:32
8 месяцев назад
TouchGFX Bring-Up  - #1 시작하며
10:48
8 месяцев назад
VSCode 확장 모듈 소개
24:52
9 месяцев назад
STM32H7 QSPI에서 펌웨어 실행
27:46
9 месяцев назад
1.69인치 240x280 + RP2040 시험
0:18
9 месяцев назад
커스텀 키보드 제작 이야기 #2
33:51
10 месяцев назад
커스텀 키보드 제작 이야기 #1
17:17
10 месяцев назад
VSCode에서 pyOCD로 디버깅 하기
16:59
11 месяцев назад
typedef union 활용하기
14:08
Год назад
STM32H7-GFX - TouchGFX 시험
0:50
Год назад
BARAM F/W TOOLS -  ESP-IDF 추가
17:35
Год назад
Комментарии
@sungjinkim7730
@sungjinkim7730 9 дней назад
감사합니다 바람님 덕분에 구현 성공 하였습니다.
@hanyongzheng
@hanyongzheng 23 дня назад
When I have multiple buttons, how do I get which pin wakes the device?
@minjunkim0205
@minjunkim0205 25 дней назад
멋있습니다
@danieljung1180
@danieljung1180 26 дней назад
강의 정말 감사합니다. packed 기능을 써서 성능이 느려질 수 있는데, 어셈코드를 근거로 설명해 주셔서 이해하는데, 많은 도움이 되었습니다. 귀한 영상 남겨 주셔서 감사합니다.
@BureumJun
@BureumJun Месяц назад
궁금했던 건데 감사합니다.
@CostaricaBluejeans
@CostaricaBluejeans Месяц назад
감사합니다.
@윤성혁-u9e
@윤성혁-u9e Месяц назад
오 감사합니다 보고 저도 적용해보겠습니다! 감사합니다
@Unmo1234
@Unmo1234 Месяц назад
이거 사용하시는거 정말 궁금했는데.. 감사합니다.
@황승진-r2i
@황승진-r2i Месяц назад
와~ 안녕하세요 ^^ 감사합니다!
@뽀삐뽀삐-y3y
@뽀삐뽀삐-y3y Месяц назад
아 ㅠㅠ 임베디드 신입인데 강의 너무너무 감사합니다. 혹시 유료 자료들은 준비하실 계획은 없으신가요? 예를들면 stm32 뿐만 아니라 keil, lar 등이요. 현업에서 keil 많이 사용하거든요
@chcbaram
@chcbaram Месяц назад
제가 유료툴을 사용하지 않는 것도 있고 구매할수 있는 상황도 아니라서 진행은 어려울 것 같습니다.
@진퉁백이
@진퉁백이 Месяц назад
바람님 항상 감사합니다. 임베디드 관련해서 많은 영상이 도움 되고 있습니다.
@늘프름
@늘프름 Месяц назад
이런거 어디서 사나요
@asd-n2u
@asd-n2u Месяц назад
감사합니다.
@이양석-c7g
@이양석-c7g Месяц назад
안녕하세요 선생님 먼저 유튜브를 통한 강의 영상 올려주심에 감사합니다. 질문이 하나 있는데 디버깅 모드일때 테라텀을 이용해서 값을 입력하면 IDE앱에서 그거에 대한 값을 표시하는거 같은데 (42분 35초) 저는 그렇게 동작하지는 않는데 원인을 알 수 있을까요??
@루멘-p5j
@루멘-p5j Месяц назад
안녕하세요~ 저도 보드 제작해 보려고 알아보고 있는데 RP2040칩 실장하고 USB연결하면 별도 과정없이 PC에서 바로 인식되는건가요? 부트로더를 별도로 올려야한다는 사람도 있고 내장되어 있다는 사람도 있어서요.
@chcbaram
@chcbaram Месяц назад
부트로더는 내장되어 있습니다. 부트모드 진입하는 핀을 버튼으로 만들어 놓으면 부트로더를 통해서 펌웨어 다운로드 가능합니다.
@루멘-p5j
@루멘-p5j Месяц назад
@@chcbaram 답변 주셔서 너무 감사합니다!
@공공-p2v
@공공-p2v Месяц назад
혹시 다른 비슷한 MCU 예를들면 NXP에서 생성된 프로젝트도 적용이 될까요?
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘도 감사합니다.~^^
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
감사합니다.~^^
@moraeyuwoo
@moraeyuwoo Месяц назад
esp는 느려터졌는데 이거는 그래도 빠르네요 잘봤습니다
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘도 감사합니다. ~^^ 생각없이 따라해 보기... ㅎㅎ
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘도 여기까지~ 감사합니다~ 수고하셨습니다~^^
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
감사합니다.~ 다음 강좌로 슝~^^
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
짠~ 오늘도 여기까지 감사합니다.~^^짝짝짝~
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘도 감사합니다~^^ 여기까지...
@공공-p2v
@공공-p2v Месяц назад
apInit()함수를 static으로 선언해서 apMain()에서 호출하는 건 좀 어떨까요?
@funjust7839
@funjust7839 Месяц назад
count값은 잘찍는데 마지막에 gpio led가 먹통이 되어 버리네 왜 반응을 안하지...
@zeroFact-mz8sc
@zeroFact-mz8sc Месяц назад
stm8L 시리즈 칩도 vscode에서 가능할까요 ?
@chcbaram
@chcbaram Месяц назад
@@zeroFact-mz8sc 무료 컴파일러를 사용한다면 가능합니다. m.blog.naver.com/chcbaram/222689584445
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘도 여기까지 ~^^ 감사합니다.
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘도 여기까지 다음 페이지로...^^ 감사합니다.~
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘은 여기까지~^^ 감사합니다.~
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘은 여기까지~^^ 감사합니다~
@embeddedTV_1978
@embeddedTV_1978 Месяц назад
오늘은 여기까지 ~^^ 감사합니다.
@embeddedTV_1978
@embeddedTV_1978 2 месяца назад
오늘은 여기까지~~~^^; 감사합니다.
@embeddedTV_1978
@embeddedTV_1978 2 месяца назад
오늘은 여기까지...^^; 감사합니다
@embeddedTV_1978
@embeddedTV_1978 2 месяца назад
감사합니다.~
@embeddedTV_1978
@embeddedTV_1978 2 месяца назад
안녕하세요~^^; 22분38초 강의에서 링크스크립트 설정을 그대로 따라해 보았으나 빌드아날라이저에 아무런 정보가 나타나지 않는건 무엇을 잘못한 걸까요? 디버깅을 하면 워크스페이스쪽에 main함수 시작번지수가 강의하시는 시작번지와 동일하게 보이긴 하거든요? ^^; 링크스크립트 절대경로를 넣어도 마찬가지더라구요? 제가 뭘 놓친 걸까요? 이상하네요? 방금 IDE로 자동 생성된 코드를 돌려봐도 빌드 아날라이저에 아무런 정보가 안뜨네요.ㅠㅠ
@restonjesus
@restonjesus 2 месяца назад
몇일을 해매다가 좋은 영상보고서 해결했습니다. 감사합니다.
@뽀삐뽀삐-y3y
@뽀삐뽀삐-y3y 3 месяца назад
감사합니다.
@BlueCircle-q6v
@BlueCircle-q6v 3 месяца назад
LPUART1은 혹시 안 사용하시는 이유가 있을까요?
@sungzunjung5933
@sungzunjung5933 3 месяца назад
안녕하세요. 바람님. 매번 답변해주셔서 감사합니다. 이전의 STM32 펌웨어 기초를 어느정도 마무리 해서 F411을 가지고 이전에 했던 것을 다시해보고 있습니다. 기존에 했던것에서 조금만 바꾸면 대부분 정상 동작을 하였는데요. Reset count 강의에서 했던 것을 여기서 해보려고 하니 조금 다른 부분이 있어서 질문드립니다. F103 에서는 데이터시트를 찾아보니 백업 레지스터가 RTC 레지스터와 따로 분리되어 있었는데요. F411은 RTC레지스터와 백업레지스터가 같이 있습니다. 그런데 그것을 떠나서 stm32mx 를 이용해서 코드를 생성하고 이를 cubeide에 불러서 확인해보면 HAL_RTC_MSPINIT 함수에서 HAL_PWR_ENABLEBKUPACESS 함수를 자동으로 생성하지 않네요. 이런 경우 RTC_MSPINIT에 HAL_PWR_ENABLEBKUPACESS를 수동으로 작성해야 하는지 궁금해야 하는지 아니면 MX에서 따로 설정을 수정해야하는지 궁금합니다. - 추가: F4 관련된 예제들을 통해 어떻게 Backup 레지스터를 설정하는지 확인해보겠습니다.
@sungzunjung5933
@sungzunjung5933 3 месяца назад
안녕하세요. bool flashInSector 함수가 flash.c 에서 static으로 선언되었는데, 이렇게 .c 에 static으로 선언되는 함수는 이 함수가 정말로 그 파일에서만 사용 될 경우를 대비하여 그런건가요?
@chcbaram
@chcbaram 3 месяца назад
네 static은 파일 안에서만 사용하는 함수만 정의를 합니다. 다른 파일에서 호출하지 못하도록 해서 감추는 효과를 냅니다.
@sungzunjung5933
@sungzunjung5933 3 месяца назад
@@chcbaram 감사합니다.항상 강의로 부터 많은것을 배웁니다.
@nicholaszhang7573
@nicholaszhang7573 3 месяца назад
Could you please share your code repo?
@BanGoo-sk4gk
@BanGoo-sk4gk 3 месяца назад
USB CDC 가 아닌 UART로 하는것도좀 부탁드립니다. USB CDC를 사용하지 않는 경우에 어떻게 해야 할지 너무 어렵네요.
@개미-l9b
@개미-l9b 3 месяца назад
강의 내용 중에 RCC를 LL Driver로 변경하여 Flash Size를 최적화 하셨던데 혹시 펌웨어 작성 할 떄 LL driver와 HAL Driver를 혼용하여 사용 가능할까요?? 예를 들어 UART는 HAL driver로 작성하고 ADC는 LL driver를 사용하여 설계가 가능한지 궁금합니다.
@chcbaram
@chcbaram 3 месяца назад
LL 드라이버를 지원하는 장치의 경우 사용 가능합니다. CubeMX에서 각 장치별로 HAL, LL 선택 할 수 있으니 지원하는지는 해당 메뉴로 확인 하시면 됩니다.
@BanGoo-sk4gk
@BanGoo-sk4gk 3 месяца назад
공장에서 최초 라이팅할때 boot 와 app 를 따로따로 해줘야 하는게 불편하네요.
@chcbaram
@chcbaram 3 месяца назад
생산할때는 미리 boot와 app을 write한 다음에 덤프를 떠서 한번에 write 하면 됩니다.
@BanGoo-sk4gk
@BanGoo-sk4gk 3 месяца назад
@@chcbaram 덤프방식말고, 강좌에서 처럼 fw 파일 만드는 방식으로 해서 boot 와 fw 를 합쳐도 가능하겠죠?
@chcbaram
@chcbaram 3 месяца назад
@@BanGoo-sk4gk 네 별도 프로그램을 만들거나 비슷한 머지하는 프로그램이 있다면 가능합니다.
@sungzunjung5933
@sungzunjung5933 3 месяца назад
안녕하세요. 동영상 잘보고 있습니다. 올려주신 영상을 따라서 코딩을 하고 있는데, 문제가 있어 질문드립니다. 문제는 코딩을 완료 후 보드에 로드하고 통신 터미널을 통해 문자를 보내면 RxData: 만 나옵니다. 예를 들어 1,2,3 문자를 순서대로 누르면 RxData:RxData:RxData: 문자열이 나옵니다. 신기한 점은 디버거를 걸고 한줄 한줄 실행하면 또 정상적으로 동작됩니다. 말씀드린 문제를 가지고 어디가 문제인지 알 수 있으실까요? 문제가 발생한 것을 녹화해서 유튜브에 올렸습니다. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-ZeirkvxoEYY.html
@chcbaram
@chcbaram 3 месяца назад
단계별로 실행하면 되고 빠르게 하면 안된다면 CDC로 전송시 이전에 보낸 데이터가 완료되었는지 확인을 하지 않는 것 같습니다. 그리고 버퍼 관련해서 코드 수정한 것이 있는데 아마 이후 코드에서 수정이 되었을 겁니다. 최종 버전의 코드와 비교가 필요해 보입니다.
@sungzunjung5933
@sungzunjung5933 3 месяца назад
@@chcbaram 감사합니다. 그리고 보내드린 링크가 조금 이상하네요. 유튜브 링크가 왜 저리나오는지 ㅎㅎ...
@sungzunjung5933
@sungzunjung5933 3 месяца назад
답변에 따라서 디버깅을 다시 해보니 말씀하신 것처럼 두번째 cdcWrite 함수에서 busy가 걸리네요. 문제의 원인을 확인해보기 위해서는 레지스터를 하나씩 살펴보는게 좋을까요? usb_cdc는 관련 레지스터가 많아서 복잡하네요.. 아니면 비슷한 문제를 해결한 경험이 있으신가요?
@chcbaram
@chcbaram 3 месяца назад
@@sungzunjung5933 비지체크 하는 방식으로 전송하실려면 아래 링크 내용 참조 바랍니다. www.notion.so/higenis/YMODEM-4b711de3b69342ce971b2defa34b9713?pvs=4#3cf5b59985ae445fb25b64613a496172
@sungzunjung5933
@sungzunjung5933 3 месяца назад
@@chcbaram 감사합니다. 그리고 코드를 다시 생성하고 시작하였더니 제대로 동작합니다. busy에서 빠진 이유는 아직 잘 파악은 안되네요. 그래도 다시 동작하니 따라 갈 힘이 생겼습니다. 좋은 강의 감사합니다.
@qqpp6017
@qqpp6017 4 месяца назад
영상들 잘 봤습니다. 저도 펌웨어 엔지니어를 하고 있지만 역시 배움에는 끝이 없고 고수들이 많이 있다는 걸 다시 느낍니다. 진짜 좋은 영상이 많아서 감동했습니다. 대부분 외국 영상이 많은데 우리나라도 조금 더 이쪽에 관심을 가져줬으면 합니다. 정부 지원 사업으로 엔지니어 육성한다 하면 엔지니어가 아닌 코더 육성에 가까운 지원이나 프로그램들이 많이 있어서 이렇게 하드웨어에 관한 지원과 관심이 너무 부족하다고 느끼고 있습니다. 회로 설계, 아트웍 이런 하드웨어 지원 사업이 늘어나고 관련 인력이 늘어나야 국내 제조업에 도움이 되고 그러는데 하드웨어는 납땜도 해야 하고 잘못되면 코딩과 다르게 바로 수정이 되는 것도 아니고 돈과 시간이 많이 들어가니까 부담감도 클 수 밖에 없습니다. 그래서 특히 인기가 없는 직종인데 그렇다고 펌웨어 엔지니어의 임금이 그렇고 특별히 높은 것도 아니고 주변에서 한다고 하면 도시락 싸들고 말리고 싶은 기분입니다. ㅜㅜ 죄송합니다. 이렇게 영상 올려주신거 보니까. 이런 분들이 있어서 그나마 우리나라에도 펌웨어 엔지니어가 조금씩 이지만 나오고 있구나 라는 생각이 들어서 푸념을 늘어놔 봤습니다.
@chcbaram
@chcbaram 4 месяца назад
의견 감사합니다. 시간이 갈수록 임베디드쪽을 하실려는 분이 줄어드는 것은 사실인것 같습니다. 그래서 계속 제가 하는 것도 공유하는 이유중에 하나가 진입장벽이 조금이라도 낮아지지 않을까 하는 생각입니다. 저는 프로그래밍을 좋아하기도 하고 특히 하드웨어를 다루는 펌웨어를 더 좋아합니다. 그래서 아마도 더 나이가 들어도 똑같은걸 하고 있을 것 같구요. 좋게 생각하면 나이들어서도 할 수 있는 취미가 있는 것일 것 같네요. 앞으로 임베디드쪽에 많이 들어오지는 않더라도 계속 할려는 사람이 있기만 해도 좋을 것 같습니다.
@kwonwang2
@kwonwang2 4 месяца назад
ART-PI 보드를 사서, Baram 님의 동영상을 등대 삼아 열심히 따라하면서, 배워가고 있는 중입니다. 이번 동영상 littlsFS 따라하는 도중 error 가 발생 했습니다. littleFS 실행 도중 아래와 같은 메시지가 나와서 보니, 현상은 lfs_config cfg 구조체의 값중에 몇몇이 바뀌는 것 같은 현상입니다. 예를 들면, read_size 가 2415946941 같은 이상한 값이 찍힙니다. 하지만, lfs_config cfg 구조체 const 이므로 그 값이 바뀌지 않아야 하는데, 실행 중간에 이런 현상을 보이는 것은 어떤 이유 인지, 염치 없지만 고견을 듣고자 합니다. 구조체 셋팅 값 ====================== #define LFS_BUF_CACHE_SIZE 256 static uint8_t read_buffer[LFS_BUF_CACHE_SIZE]; static uint8_t prog_buffer[LFS_BUF_CACHE_SIZE]; static uint32_t lookahead_buffer[LFS_BUF_CACHE_SIZE/4]; const struct lfs_config cfg = { // block device operations .read = fsDeviceRead, .prog = fsDeviceProg, .erase = fsDeviceErase, .sync = fsDeviceSync, #ifdef LFS_THREADSAFE .lock = fsDeviceLock, .unlock = fsDeviceUnlock, #endif // block device configuration .read_size = LFS_BUF_CACHE_SIZE, //LFS_BUF_CACHE_SIZE = 256 .prog_size = LFS_BUF_CACHE_SIZE, .block_size = 4096, .block_count = FS_MAX_SIZE/4096, .cache_size = LFS_BUF_CACHE_SIZE, .lookahead_size = LFS_BUF_CACHE_SIZE, .block_cycles = 100000, // Optional statically allocated read buffer. Must be cache_size. // By default lfs_malloc is used to allocate this buffer. .read_buffer = read_buffer, // Optional statically allocated program buffer. Must be cache_size. // By default lfs_malloc is used to allocate this buffer. .prog_buffer = prog_buffer, // Optional statically allocated lookahead buffer. Must be lookahead_size // and aligned to a 32-bit boundary. By default lfs_malloc is used to // allocate this buffer. .lookahead_buffer = lookahead_buffer }; ================================================= error 메시지 ========================================= fsInit() lfs 2.4 ../src/lib/littlefs/lfs.c:4951: trace: lfs_mount(0x2400d850, 0x2400002c {.contex =0, .read=0x90006bc9, .prog=0x90006c15, .erase=0x90006c61, .sync=0x90006ca1, .r ead_size=2415946941, .prog_size=2415946993, .block_size=256, .block_count=256, . lock_cycles=4096, .cache_size=1024, .lookahead_size=100000, .read_buffer=0x100, .prog_buffer=0x100, .lookahead_buffer=0x2400d8c8, .name_max=604035528, .file_ma =604035784, .attr_max=0})
@francais9704
@francais9704 4 месяца назад
경북대학교 전자공학부에서 나왔습니다 dgm파이팅!
@정섭-s4u
@정섭-s4u 4 месяца назад
감사합니다
@2kilhun
@2kilhun 4 месяца назад
감사합니다 오랜만에 영상을 보니 더 기쁩니다