Nội dung liên quan
STM32 / Firmware
STM32 Bootloader: Execute from RAM, UART Update và Jump to Application
Xây dựng bootloader thực tế trên STM32G0: execute from RAM để erase flash không freeze, nhận firmware qua UART, jump đúng cách vào application với VTOR và MSP.
Flash STM32G0: Linker Script, EEPROM Emulation và Dual Bank
Từ linker script chia vùng Flash, erase/write API, tại sao single-bank freeze, đến EEPROM emulation thực tế trên STM32G0 dual bank - không dùng thư viện ST, tự viết cho gọn.
FreeRTOS trên STM32: Task, Queue, Signal và cách tổ chức firmware cho cả team
Triển khai dự án FreeRTOS trên STM32.
USB Device STM32 nâng cao: Vendor Request, Bulk, DMA và Debug với JTAG
USB Device STM32: xử lý vendor request và truyền qua DMA cho bulk và interrupt.
USB Descriptor: Phân tích từng field và HID Report Descriptor từ góc firmware
Phân tích USB Descriptor, HID Report Descriptor của thiết bị composite CDC+HID.
USB Device trên STM32: CDC, HID và cách dùng ST Middleware thực tế
USB Device trên STM32 với CDC và HID trong dự án thực tế.
USB Transfer Types: Interrupt, Bulk, Control và Isochronous từ góc firmware
Giải thích về 4 loại USB transfer.
Flash, EEPROM và RAM khác nhau như thế nào?
Giải thích nguyên lý hoạt động của Flash, EEPROM và RAM.
Flash Operations STM32: Erase, Write, Polling và tại sao program đứng
Cách thao tác Flash STM32 qua HAL: unlock, erase, write, polling vs interrupt, và nguyên nhân program freeze khi xóa Flash.
Linker Script STM32: MEMORY, sections và tại sao .data cần hai địa chỉ
Giải thích linker script STM32 căn bản: MEMORY region, .text/.data/.bss, LMA vs VMA, startup copy.
Reset Vector và Bootloader trên Cortex-M: VTOR, MSP và jump sequence
Reset vector là gì, VTOR hoạt động ra sao, và chuỗi bước cần thiết để bootloader jump đúng cách vào application - tránh crash sau khi có interrupt đầu tiên.
Startup Code STM32: Reset Handler, Vector Table và những gì xảy ra trước main()
Giải thích startup code STM32: vector table, reset handler, MSP, copy .data, zero .bss - những gì firmware phải làm trước khi gọi main().
STM32G0 Dual Bank Flash: Read-While-Write và EEPROM Emulation không freeze
STM32G0B1 dual bank mode: DBANK option bit, read-while-write, tại sao erase Bank 2 không block code đang chạy ở Bank 1, và gotcha về prefetch khi jump giữa bank.
UART non-blocking logger trên STM32 với DMA + Ring Buffer
Thiết kế debug UART non-blocking cho STM32: tránh printf, xử lý mất log với DMA, dùng ring buffer và DMA callback.
Redirect printf bằng _write() trên STM32 là gì?
Giải thích cách printf trong newlib/newlib-nano đi qua _write() và được redirect ra UART trên STM32.