Artful Bytes
Artful Bytes
  • Видео 30
  • Просмотров 433 737
How a Microcontroller starts
We explore the startup of a microcontroller using STM32 as an example. First, we look at the manufacturer's assembly code, then we write it from scratch in C.
00:00 Overview
01:25 Create a basic project in STM32CubeIDE
02:14 Review STM32 startup code (assembly)
08:58 Write startup code from scratch (C)
10:22 Discard libc, startfiles and default linker script
14:27 Startup file
16:05 Linker script
18:22 Debug
18:55 C runtime init (CRT0)
23:56 Link with libc (Newlib)
24:42 __libc_init_array (constructors)
26:49 system_init and _start
27:35 Final thoughts
Code: github.com/artfulbytes/how_a_microcontroller_starts_video
🌍 Related links
embeddedartistry.com/blog/2019/04/08/a-general-overview-of-what-happens-be...
Просмотров: 73 996

Видео

The End | Embedded System Project Series #28
Просмотров 5 тыс.Год назад
In this final video of the series, I summarize my thoughts on the project. 0:00 What it was about 1:10 Writing from scratch 3:16 Fewer motors 4:05 Simpler sensors 4:56 Better microcontroller 6:26 Simpler simulation 6:53 What's next? 🌍 Related links Project code - github.com/artfulbytes/nsumo_video Simulator - github.com/artfulbytes/bots2d 🌍 Find me here GitHub - github.com/artfulbytes Website -...
Simulation to Real-world Demo | Embedded System Project Series #27
Просмотров 2,7 тыс.Год назад
I finish up the state machine and demonstrate that it works, first in my simulator, Bots2D, and then on my actual robot, Nsumo. This concludes the project. 0:00 Overview 1:03 Bots2D setup 11:50 Simulation 1 (keyboard control) 12:39 Integrate app code (controller) 15:30 Simulated low-level drivers 25:28 Simulation 2 (Nsumo not moving) 26:50 Input history 31:48 Finish the state machine 38:20 Flas...
How to Code a State Machine | Embedded System Project Series #26
Просмотров 15 тыс.Год назад
The application logic of my robot (as many other embedded systems) can be effectively represented as a finite-state machine. In this video, I sketch out the state diagram with PlantUML and prepare the corresponding skeleton code in C. 0:00 Overview 1:56 Draw diagram with PlantUML 12:40 How I will code it 13:30 Three previous commits 16:09 Files 17:25 State machine logic 34:48 State wait 36:35 S...
I made a Robot 2D Simulator with C++ | Embedded System Project Series #25
Просмотров 6 тыс.Год назад
I explain how I made a 2D simulator for robotics from scratch in C . I'm going to use this to help me write the application code for my sumo robot. 0:00 Background 1:40 Goals 2:48 How? 4:35 Physics (Box2D) 7:00 Graphics (OpenGL) 10:10 Software Architecture 13:13 Controller code 15:00 Main loop 16:14 Reflection 🌍 Related links Bots2D code - github.com/artfulbytes/bots2d Bots2D blog post - www.ar...
How to Board Bring-up | Embedded System Project Series #24
Просмотров 5 тыс.Год назад
I explain and demonstrate board bring-up by doing a "fake" bring-up of the PCB on my actual robot. To verify the hardware, I run the code I've developed using the development board throughout this video series. While at it, I also fix some issues I discovered in earlier videos. Board bring-up is an important stage of developing an embedded system. The goal is to verify (asap) that the untested ...
I2C driver in C (with VL53L0X sensor) | Embedded System Project Series #23
Просмотров 4,8 тыс.Год назад
My sumobot has five range sensors (VL53L0X) to detect the sumobot enemy. In this video, I write an I2C driver to talk to these sensors and verify the traffic with a logic analyzer. I also add an existing driver on top as well as a software layer (enemy) for a nicer application interface. 0:00 intro 1:37 I2C driver 5:44 I2C init 12:00 I2C write 19:51 I2C read 25:54 Test function 29:00 Logic anal...
ADC driver with DMA in C | Embedded System Project Series #22
Просмотров 2,5 тыс.Год назад
My sumobot has four line sensors to detect the white border that surrounds the platform. In this video, I write an ADC driver to sample the values from these sensors. To reduce CPU load, I employ a sequential sampling strategy where the ADC peripheral samples and writes all channel values to memory via DMA before interrupting the CPU. Finally, I add additional software abstractions to turn the ...
Motor Control with PWM in C | Embedded System Project Series #21
Просмотров 4,7 тыс.Год назад
I write C code to control four brushed DC motors using two motor drivers (TB6612FNG) and a microcontroller (MSP430). Each motor driver requires two control inputs and one pulse-width modulation (PWM) input. I create three abstraction layers: a PWM driver at the bottom, a motor driver in the middle, and a simplified drive interface at the top. 21 videos in and something is finally moving. 0:00 W...
NEC Protocol Driver (Infrared remote) | Embedded System Project Series #20
Просмотров 6 тыс.Год назад
I develop a simple driver to decode the signal between an IR remote and my robot. The square-like signal follows the NEC protocol, which I decode by detecting the edges through GPIO interrupts, and measure the time between them using the microcontroller's timer peripheral. 0:00 Intro 1:30 New project 4:00 Driver interface (ir_remote.h) 5:55 Timer peripheral 15:27 GPIO interrupt 16:45 NEC protoc...
Printf on a Microcontroller | Embedded System Project Series #19
Просмотров 4,1 тыс.Год назад
I add a printf implementation suitable for microcontrollers so that I can print formatted strings to the terminal. Underneath, it calls the UART driver I implemented in the last video. I further wrap the printf function in a TRACE macro to prefix every trace with filename and line number. Finally, I add trace to my assert function, but only trace the program counter (PC) to save space and show ...
Write a UART driver (Polling and Interrupt) | Embedded System Project Series #18
Просмотров 22 тыс.Год назад
I explain what UART is and show how I use it to print text from my microcontroller to my desktop computer. I first implement a UART driver based on polling and then improve on it by making it interrupt-driven with a ring buffer. This driver will serve as the foundation for when I implement log tracing (printf) in my next video. 0:00 Goal 0:50 Outline 2:30 What is UART? 4:25 RS232 5:43 Why UART?...
Microcontroller Interrupts | Embedded System Project Series #17
Просмотров 26 тыс.Год назад
I explain how microcontroller interrupts work by mixing theory with a code example. For fun, I let ChatGPT generate my code example. I also add some functions in my project that lets me add new GPIO interrupts more easily. Finally, I bump the clock speed of my microcontroller from 1 MHz to 16 MHz, not because I need to, but because I can. 0:00 Outline 3:12 Why polling is bad 9:40 How does inter...
How Microcontroller Memory Works | Embedded System Project Series #16
Просмотров 68 тыс.Год назад
I explain how microcontroller memory works with a code example. I use my IDE's memory browser to see where different variables end up in memory, and I demonstrate two command line tools to track how much flash memory my code occupies. Overall, knowing how memory works is important because microcontrollers have a limited amount of it, and if we are not mindful of how we write our code, we may ru...
My Small Test Functions | Embedded System Project Series #15
Просмотров 1,6 тыс.Год назад
During development, I tend to add scratch functions to test a particular part of the code. In this video, I try to handle these functions in a less ugly way. 0:00 Background 1:20 Move the test functions 2:50 Add TEST argument to make 5:15 Fix errors 5:45 Suppress unused functions 7:02 Ugly workaround 7:50 Build all functions in CI 9:53 git commit 11:00 Last words #embeddedsystems #cprogramming ...
Assert on a Microcontroller | Embedded System Project Series #14
Просмотров 3,5 тыс.Год назад
Assert on a Microcontroller | Embedded System Project Series #14
Handling multiple Hardware Versions | Embedded System Project Series #13
Просмотров 2,7 тыс.2 года назад
Handling multiple Hardware Versions | Embedded System Project Series #13
How I program GPIOs in C | Embedded System Project Series #12
Просмотров 12 тыс.2 года назад
How I program GPIOs in C | Embedded System Project Series #12
Documentation and Clang format (+2 bugs) | Embedded System Project Series #11
Просмотров 3,2 тыс.2 года назад
Documentation and Clang format ( 2 bugs) | Embedded System Project Series #11
Simple CI/CD with GitHub Actions and Docker (Compile+Analysis) | Embedded System Project Series #10
Просмотров 9 тыс.2 года назад
Simple CI/CD with GitHub Actions and Docker (Compile Analysis) | Embedded System Project Series #10
Static Analysis for C/C+ with cppcheck (+Makefile) | Embedded System Project Series #9
Просмотров 11 тыс.2 года назад
Static Analysis for C/C with cppcheck ( Makefile) | Embedded System Project Series #9
How I version control with git (Best Practices) | Embedded System Project Series #8
Просмотров 7 тыс.2 года назад
How I version control with git (Best Practices) | Embedded System Project Series #8
The BEST Project Structure for C/C++/MCU | Embedded System Project Series #7
Просмотров 16 тыс.2 года назад
The BEST Project Structure for C/C /MCU | Embedded System Project Series #7
How to Create a Software Architecture | Embedded System Project Series #6
Просмотров 27 тыс.2 года назад
How to Create a Software Architecture | Embedded System Project Series #6
Microcontroller Programming without IDE (Makefile + Toolchain) | Embedded System Project Series #5
Просмотров 25 тыс.2 года назад
Microcontroller Programming without IDE (Makefile Toolchain) | Embedded System Project Series #5
Install an IDE and Blink an LED (Code Composer Studio + MSP430) | Embedded System Project Series #4
Просмотров 11 тыс.2 года назад
Install an IDE and Blink an LED (Code Composer Studio MSP430) | Embedded System Project Series #4
PCB Design Walkthrough Sumo Robot | Embedded System Project Series #3
Просмотров 9 тыс.2 года назад
PCB Design Walkthrough Sumo Robot | Embedded System Project Series #3
Picking the Parts for a Small Robot | Embedded System Project Series #2
Просмотров 15 тыс.2 года назад
Picking the Parts for a Small Robot | Embedded System Project Series #2
Intro and Overview | Embedded System Project Series #1
Просмотров 32 тыс.2 года назад
Intro and Overview | Embedded System Project Series #1
A Channel about Embedded Systems
Просмотров 5 тыс.2 года назад
A Channel about Embedded Systems

Комментарии

  • @Prabagaran-s3b
    @Prabagaran-s3b 5 часов назад

    @artful bytes can you make vedio for linkerscrpit

  • @Jonathan-ru9zl
    @Jonathan-ru9zl 2 дня назад

    Thanks for the video! Why did you switch to vscode? Is it possible to replicate it in stm32cubeIDE?

    • @artfulbytes
      @artfulbytes 2 дня назад

      Personal preference. You can replicate this in any editor.

  • @sepehrkarimi9340
    @sepehrkarimi9340 3 дня назад

    Thanks a lot for creating this video. I really learned something, and it helped me understand the issue behind one of my programs' failure. Thank you!

  • @vesakk72
    @vesakk72 5 дней назад

    👏👏👏

  • @Egon3k
    @Egon3k 6 дней назад

    i learnt more in these 30 minutes than in 3 years of studies - thanks a lot man

  • @dantel8995
    @dantel8995 6 дней назад

    gold

    • @dantel8995
      @dantel8995 6 дней назад

      bro talks about everything and its not waste of time to watch

  • @swedishpsychopath8795
    @swedishpsychopath8795 8 дней назад

    TLDR: He never explains HOW a microcontroller starts. He only shows what the STMicro-controller does AFTER it is started. So basically a click-bait title (at the time of my comment: "How a Microcontroller starts").

  • @Arkvis10
    @Arkvis10 10 дней назад

    Well sometimes you seem to skip explaination or skip focus on important things and spend time on unnecessary things... If this was nkt done then the imapct of the videos coukd have been way more ...But either way i will also say overall everything is very well put!

  • @adityashinde6626
    @adityashinde6626 11 дней назад

    bro i need complete embedded system course please upload as soon as possible.

  • @codsweat5152
    @codsweat5152 12 дней назад

    Is there a roadmap to do this I Alr know C nd some arduino

  • @sulikszabolcs
    @sulikszabolcs 15 дней назад

    The content is great. However this is not an action movie, no need for fast cuts. This is a bit heavy topic, it'd be better to slow down a bit.

    • @matthias7534
      @matthias7534 3 дня назад

      Options > Playback speed > 0.75x

  • @diegoporras7769
    @diegoporras7769 18 дней назад

    6:01 I think the SP is actually changing after the mov sp, r0 Amazing video so far, watching till the end.

    • @diegoporras7769
      @diegoporras7769 18 дней назад

      From …17F8 to …1800

    • @artfulbytes
      @artfulbytes 17 дней назад

      @@diegoporras7769 The sp increases from 0x200017f8 to 0x20001800 after stepping over the first instruction (ldr and not mov). I haven't checked, but I think it may be a debug artifact, i.e. register view not refreshing properly until stepping over the first instruction.

  • @timello
    @timello 21 день назад

    Really nice content!

  • @____blank____
    @____blank____ 21 день назад

    This is brilliant. I started watching embedded tutorials on ROS2, stm32 HAL, etc. Those toolchains are too bloated and cover up too many things under the hood, which is bad for learning. I love your approach and clarity.

  • @windigo000
    @windigo000 24 дня назад

    just wow. very cool. 👍 will it run PHP tho 🤣

  • @ManitRubiks
    @ManitRubiks 25 дней назад

    The value of sp increases from 0x200017f8 to 0x20001800 on running the first two assembly code lines. If estack was 0x20001800, then why was sp initialized by HW to 0x200017f8?

    • @artfulbytes
      @artfulbytes 25 дней назад

      The sp increases from 0x200017f8 to 0x20001800 after stepping over the first instruction. I haven't checked, but I guess it may be a debug artifact, i.e. register view not refreshing properly until stepping over the first instruction.

    • @ManitRubiks
      @ManitRubiks 25 дней назад

      @artfulbytes that's possible - may be due to debug interface Ldr command doesn't change the value of sp so it does not make sense that it changes after ldr.

  • @歪果仁-q4x
    @歪果仁-q4x 25 дней назад

    long time no see !!!!

  • @dohack
    @dohack 26 дней назад

    Welcome back, keep uploading :)

  • @1van_ka
    @1van_ka Месяц назад

    It’s the most useful video i’ve ever seen. My life will never be the same. Awesome, please, do more like this. Maybe compile smallest linux kernel for stm32?🤓

  • @fixfaxerify
    @fixfaxerify Месяц назад

    Awesome!

  • @NotSionnix
    @NotSionnix Месяц назад

    Hi! Could you explain in more detail why you copy the values from adc_dtc_block to adc_dtc_block_cache once more? The way I understand it is your ADC finishes sampling the sequence of channels and once that is finished the DMA autonomously transfers data to adc_dtc_block without the processor having to be involved. Once this is done, it raises a DMA transfer finished interrupt, and then inside of that ISR, it transfers the values from adc_dtc_block to adc_dtc_block_cache. My question is, isn't this doing double the work and couldn't you just access the values directly from adc_dtc_block? I know in the video you said you didn't want the application to touch the same array the DMA is touching and my understanding is it's easier to briefly disable interrupts and access it from adc_dtc_block_cache than disable DMA or the ADC while trying to read from adc_dtc_block directly, but I'm not sure if I understood it correctly. Would appreciate any insight. Sorry for the all the questions, it's my first time getting deep into embedded and DMA has been quite confusing to get set up haha. As always the video series has been really enlightening and using it as a reference to do my own project has been a godsend! Thanks!

    • @artfulbytes
      @artfulbytes Месяц назад

      ADC/DMA won't run while we are in the interrupt function, so it's safe to touch adc_dtc_block there. After we are done copying the values to adc_dtc_block_cache, we manually start the adc/dma/sampling again (see adc_enable_and_start_conversion). If we were to access the adc_dtc_block in adc_get_channel_values, then we would risk accessing it at the same time as the DMA. An added bonus of having the additional array is that we get them in the right order as well (DMA writes them in opposite order.

    • @NotSionnix
      @NotSionnix Месяц назад

      @artfulbytes that clears it up thanks so much for answering all my questions!

  • @mikael8276
    @mikael8276 Месяц назад

    Your hands are doing constant sign language.

  • @ltd5480
    @ltd5480 Месяц назад

    Can you do a long series like you did the past but with STM32 microcontrollers, I really wanted to write code on it from scratch, and understand all the concept MCU-related also, but I can’t find any suitable resources than yours. Thank you for bringing this such a nice educational videos!

  • @marekwolanin8335
    @marekwolanin8335 Месяц назад

    The use of simple data types (such as uint8_t) and the direct manipulation of pointers and ISR function registration indicates your attempt to write code that is intended to run very efficiently on small, resource-limited Atmel microcontrollers. Rather than being called, inline functions are inserted directly at the call point, eliminating the overhead associated with calling the function (stack preparation, jumping to the function and returning). This can save several CPU cycles. As I wrote this is a good resource if you need to stuff a lot of code into a limited microcontroller.

  • @subashgowtham6165
    @subashgowtham6165 Месяц назад

    Best explanation of interrupts I have ever seen! Please keep making such quality content.

  • @broadestsmiler
    @broadestsmiler Месяц назад

    Super informative! I do not work with embedded systems, but I found it fascinating to see how the start up process works here. Thank you!

  • @NithinJune
    @NithinJune Месяц назад

    9:38 Just curious what reason is there not to use -std=c23 every time?

    • @artfulbytes
      @artfulbytes Месяц назад

      Compiler/toolchain may not support it yet, compatibility with existing code (e.g. stm32 HAL), potential issues/bugs. So unless you really need the latest C features, probably safer to stick with something more established. With that said, I have not tested it extensively.

    • @NithinJune
      @NithinJune Месяц назад

      @ interesting…

  • @syedfawad8245
    @syedfawad8245 Месяц назад

    So I am lost at 10:48, in the GCC tool chain folder, if I go to the included folder, I don't have the msp430.h file. Can someone guide me if I am doing something wrong? When I execute the command find -name "msp430.h". As per the video, I get only one path that is the first path in the video.

    • @artfulbytes
      @artfulbytes Месяц назад

      Where did you download the toolchain? Are there any other msp430 related files in there? Could also be that you have another version of the toolchian and that they have done some refactoring since I made this video.

  • @404animator
    @404animator Месяц назад

    Watching the video in 2024 with my headphones in Ukraine. And could not distinguish at first either it's background noise from video or Russian rockets exploding in city I live. It appeared to be both

  • @sauravkumaragarwal6598
    @sauravkumaragarwal6598 Месяц назад

    This is the type of content, I want to pay the internet bill for. Thanks a lot bro❤

  • @albertkennis
    @albertkennis Месяц назад

    Deep. Learned so much!

  • @Jonathan-ru9zl
    @Jonathan-ru9zl Месяц назад

    Hi! In 7:14, doesn't debug trace usually move forward in a program?

    • @artfulbytes
      @artfulbytes Месяц назад

      Is it not moving forward? You mean in the terminal below right? I may have cut the video a bit weird in certain places so they don't always line up.

    • @Jonathan-ru9zl
      @Jonathan-ru9zl Месяц назад

      @@artfulbytes No, I meant actually in the code. Maybe not in this case, but sometimes I see that the debug trace doesnt progress sequentially, especially in low level code (goes back and forth)

    • @artfulbytes
      @artfulbytes Месяц назад

      ​@@Jonathan-ru9zl Normally the program counter just increments, but there are branch/jump instructions such as bcc, which can jump to a specific address. For example, these instructions are used when repeating a code block such as in a loop, or when jumping to a function.

  • @pritonce6562
    @pritonce6562 Месяц назад

    I programmed an STM32 for the first time 2 days ago. This really gave me a so much deeper insight into how these controllers work. Honestly loving how simple stupid it really is. I am also once again surprised and also not surprised that we can just use C to generate the startup assembly only using a few compiler flags.

  • @RajaGupta-iw7wg
    @RajaGupta-iw7wg Месяц назад

    These videos are a gem 💎 This will teach you lot more about embedded system than any beginner course on internet will do. Hat's off to you and thanks for doing it for the enthusiastic people like us. Really appreciate the efforts you made.. and Your video are vety detailed and interesting to watch.

  • @dabunnisher29
    @dabunnisher29 Месяц назад

    This project just got me subscribed and liked. Thank you.

  • @m-electronics5977
    @m-electronics5977 Месяц назад

    What Desktop Environment so you use?

    • @artfulbytes
      @artfulbytes Месяц назад

      ubuntu linux

    • @m-electronics5977
      @m-electronics5977 Месяц назад

      @ But the default from Ubuntu? It doesn't look like that

    • @artfulbytes
      @artfulbytes Месяц назад

      ​@@m-electronics5977 i3 window manager

  • @subashgowtham6165
    @subashgowtham6165 Месяц назад

    Thank you for the amazing content 🎉

  • @AkashModi-l1h
    @AkashModi-l1h Месяц назад

    Amazing Video. Thank you for creating this.

  • @aleksandarglisic9384
    @aleksandarglisic9384 Месяц назад

    I wish I could've seen this two years ago 😅

  • @thargor2k
    @thargor2k Месяц назад

    Great video! Two small notes: most recent controllers will actually run vendor code from a ROM before jumping into user code - you sadly can't debug that in many cases since the debugger gets enabled after that... What is done there? E.g. loading calibration values that must be loaded in all circumstances. And the other: even without linking the C standard library you may have to provide memset/memcpy/... since gcc will (at some optimization levels) replace loops with those functions - independent of command line flags

    • @artfulbytes
      @artfulbytes Месяц назад

      Thanks, appreciate the input! Lots of details to keep track of and I try to get away with brushing over many of them :)

    • @thargor2k
      @thargor2k Месяц назад

      No shade, makes total sense - as I said its a great video as it is Just thought it might be interesting to some - surprised me a bit in the beginning but makes sense that there might be some other code hidden...

  • @ltkdt
    @ltkdt Месяц назад

    Nice to see this channel uploading again! Hope to see more content on low-level stuffs!

  • @matsvandamme1
    @matsvandamme1 Месяц назад

    hi, can you please advise if the capturing of NEC pulses could also be achieved by using the capture mode of the 16-bit Timer?

    • @artfulbytes
      @artfulbytes Месяц назад

      Yes should work, and might even simplify the code a bit.

    • @matsvandamme1
      @matsvandamme1 Месяц назад

      Cheers

  • @陈歌珊
    @陈歌珊 Месяц назад

    welcome back for detailed teaching

  • @frankapala6979
    @frankapala6979 Месяц назад

    simply wow

  • @stainlessCode
    @stainlessCode Месяц назад

    Excellent, very straightforward explanation that completely cleaned up my confusions. I'm trying to bringup my own programming language on RP2040, that was super helpful to me. Although I have a few questions about bootloaders: * how and where do they fit into the whole picture * why someone would need one * how to deal (or not) with them from the point of view of writing everything from scratch. Basically how to write a barebones C program that will work under a bootloader.

    • @artfulbytes
      @artfulbytes Месяц назад

      It depends :) But I think it makes sense to think of a bootloader as another small standalone program that runs before your main program. So, just like you need startup code to make the MCU ready to run the main program, you need startup code before the bootloader program. A bootloader is optional, but it's often used to separate the update mechanism from the main program, and to allow the main program to be upgraded without a dedicated debugger. If your bootloader is simple and perhaps not written in C, it may not require as much startup code though. In practice it may be like this: startup code 1->bootloader->startup code 2->main program.

    • @stainlessCode
      @stainlessCode Месяц назад

      @@artfulbytes Thanks for the reply, that makes sense. But what I still do not fully understand is if the bootloader has to live somewhere in the flash, it will basically have to take the space of the interrupt table, so the main program cannot provide ISRs directly via a table. Is that correct? So the bootloader has to provide the interrupt stubs, and then before loading the main program the bootloader has to do some kind of dynamic linking to wire up main program's ISRs, or am I compeletely wrong here?

    • @artfulbytes
      @artfulbytes Месяц назад

      @@stainlessCode STM32 allows you to change the address of the interrupt vector table (IVT) by writing to a register (VTOR). And yes bootloader would live in flash and it can have its own IVT and startup code. You would then place your main program including its IVT somewhere else in flash memory. Then just before the bootloader jumps to the main program it can write to VTOR to change the address to the IVT of the main program. Moving the IVT is not possible on all MCUs and in those cases you may have to partly share the IVT or solve it some other clever way.

    • @stainlessCode
      @stainlessCode Месяц назад

      @@artfulbytes I see, that makes sense, thank you for the reply!

  • @magnoliacomputerscience7334
    @magnoliacomputerscience7334 Месяц назад

    Amazing video! Great work!! I learned a lot!

  • @thaithinhtran5055
    @thaithinhtran5055 Месяц назад

    Very clearly, thanks man. I also devevop the bare metal embedded at the MCU company. This is very valuable lesson.

  • @Prabagaran-s3b
    @Prabagaran-s3b Месяц назад

    I have stm32 bule phill it comes under arm Cortex m3 architecture I but doesn't reach main it goes half fault . I don't where the mistake is where any problem in openocd

    • @artfulbytes
      @artfulbytes Месяц назад

      You can step from the beginning like I did in the video to identify the instruction that causes the hard fault.

  • @Prabagaran-s3b
    @Prabagaran-s3b Месяц назад

    Can you make video about make files for stm32.

  • @RicardoBHubner
    @RicardoBHubner Месяц назад

    Eu não entendi nada, mas entendi tudo. ótimo trabalho amigo.