Chia sẻ USB HID Bootloader STM32F103C8T6

NgoHungCuong

http://ngohungcuong.com
#1
STM32 có những dòng tích hợp sẵn USB BOOTLOADER nên có thể phát triển ứng dụng cũng như cập nhật Firmware sau này mà không cần dùng mạch nạp.
Tuy nhiên STM32F103C8T6 là con được dùng khá nhiều lại không có USB bootloader.
Vì vậy để thuận tiện cho việc phát triển ứng dụng cũng như cập nhật Firmware mình đã viết USB HID Bootloader cho nó:
- Sử dụng USB HID để đơn giản và không phải cài đặt Driver như DFUSE của hãng ST
- Chiếm 8KB đầu tiên của Flash, người dùng còn 64-8=56KB, vẫn viết code thoải mái.
fig1.png
* Cách sử dụng:
- Nạp file USB_STM32F103.hex vào STM32F103C8T6.
- chân PA0 dùng để kiểm tra chế độ mỗi khi khởi động.
+ Nếu chân PA0 ở mức cao thì sẽ chạy ứng dụng
+ Nếu chân PA0 ở mức thấp thì sẽ vào chế độ Bootloader.
- Chạy phần mềm (file USB HID Bootloader STM32F103C8T6.exe)
Kéo file cần cập nhật vào giao diện chương trình hoặc bấm nút ... để tìm đến file cần cập nhật
- Chọn Update chờ cập nhật xong.
Hiện tại phần mềm chỉ hỗ trợ file BIN
 

Đính kèm

NgoHungCuong

http://ngohungcuong.com
#2
Cách sử dụng Keil C để biên dịch, tạo ra file BIN dùng với Bootloader.
Do bootloader chiếm 8KB đầu tiên của Flash nên cần chỉnh lại một số chỗ:
- Thứ nhất cần cấu hình cho code sinh ra không được ở vị trí 8KB đầu tiên
Vào Target Options...
Ở ô IROM1 sửa thành 0x8002000
fig2.png

- Thứ hai cần cấu hình lại bảng Vector ngắt:
Mở file system_stm32f10x.c
Tìm đến dòng #define VECT_TAB_OFFSET
Sửa từ 0 thành 0x2000
fig3.png

-Thứ 3 cấu hình để tạo ra file BIN
Vào Target Options...
Chọn muc User
Ở phần Run User Programs after Build/Rebuild: Tick chọn Run #1 và gõ vào fromelf --bin ".\out\@L.axf" --output ".\out\@L.bin"
Giả sử ở đây kết quả biên dịch được để trong thư mục Out
fig4.png

Biên dịch
fig5.png

- Kết quả có được file BIN
fig6.png
 

huunho

Thạc sỹ
#3
Bài viết rất hay. có thể cập nhật firmware mà không cần mạch nạp, Mình thiết nghĩ ST đang dùng cách tương tự như vậy như hay hơn ở chỗ họ không cần dùng tới chân A0, có lẽ Code của mạch nạp ST link V2 chạy kiểu như: khi được cấp nguồn, nó sẽ chạy bootloader và hỏi có cập nhật firmware không?
-Có: tiếp tục chạy bootloader
-Không: chạy ứng dụng
 

hienclubvn

Học sinh phổ thông
#5
Bài viết rất hay. có thể cập nhật firmware mà không cần mạch nạp, Mình thiết nghĩ ST đang dùng cách tương tự như vậy như hay hơn ở chỗ họ không cần dùng tới chân A0, có lẽ Code của mạch nạp ST link V2 chạy kiểu như: khi được cấp nguồn, nó sẽ chạy bootloader và hỏi có cập nhật firmware không?
-Có: tiếp tục chạy bootloader
-Không: chạy ứng dụng
- Cái này là tùy option của mình thôi. Đã làm được A0 thì mấy cái khác cũng tương tự.
- Mạch STLink thì nó dùng Driver (Usb Bulk) nên muốn dùng phải cài Driver. Ở đây bác Cường chuyển về CustomHID cho nó đơn giản, đỡ phải install Driver.
- Có 3 hình thức để nạp fw mới mà thông dụng mình hay gặp:
+ 1: Actived bằng Button giống như cách Code mẫu ST cung cấp.
+ 2: App trên PC tác động xuống (MCU ghi nhớ), rút USB ra cắm lại để vào chế độ Usb bootloader (STLink đang dùng).
+ 3: Complier trên IDE truyền xuống MCU, MCU tự tác động vào chân D+ để thoát khỏi trình Windows (reset lại USB). Cách này STM32duino đang sử dụng. (ko cần rút cắm, nhấn nạp tự reset, thay cho công việc Plug&Play)
 

eva

Kỹ sư
#6
MikroC thì chọn cách ... Nếu quá 3 giây thì nhảy qua bootloader.
 

Quảng cáo Google