Chia sẻ USB HID Bootloader STM32F103C8T6

Thảo luận trong 'Họ ARM'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. NgoHungCuong

    NgoHungCuong http://ngohungcuong.com

    Tham gia ngày:
    19/8/12
    Bài viết:
    4,063
    Đã được thích:
    9,154
    Điểm thành tích:
    69
    Giới tính:
    Nam
    Nghề nghiệp:
    Thất nghiệp
    Nơi ở:
    Lâm Thao - Phú Thọ
    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.
    * 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
     

    Các file đính kèm:

    suvinh92, qc.phuongnam, thanh_nhanbk4 others thích bài này.
  2. NgoHungCuong

    NgoHungCuong http://ngohungcuong.com

    Tham gia ngày:
    19/8/12
    Bài viết:
    4,063
    Đã được thích:
    9,154
    Điểm thành tích:
    69
    Giới tính:
    Nam
    Nghề nghiệp:
    Thất nghiệp
    Nơi ở:
    Lâm Thao - Phú Thọ
    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.
    - 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.
    -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.
    Biên dịch
    fig5.
    - Kết quả có được file BIN
    fig6.
     
    huunho thích bài này.
  3. huunho

    huunho Thạc sỹ

    Tham gia ngày:
    16/1/14
    Bài viết:
    3,205
    Đã được thích:
    1,437
    Điểm thành tích:
    113
    Giới tính:
    Nam
    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
     
    hienclubvnNgoHungCuong thích bài này.
  4. Hungcoibkhn

    Hungcoibkhn Học sinh phổ thông

    Tham gia ngày:
    12/9/16
    Bài viết:
    5
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    rất tuyệt vời <3
     
  5. hienclubvn

    hienclubvn Học sinh phổ thông

    Tham gia ngày:
    23/7/13
    Bài viết:
    6
    Đã được thích:
    2
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Hanoi, Vietnam
    - 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)
     
    NgoHungCuong thích bài này.
  6. eva

    eva Kỹ sư

    Tham gia ngày:
    5/2/13
    Bài viết:
    396
    Đã được thích:
    445
    Điểm thành tích:
    63
    Giới tính:
    Nam
    MikroC thì chọn cách ... Nếu quá 3 giây thì nhảy qua bootloader.
     
  7. hoangvanloc

    hoangvanloc Học sinh trung cấp

    Tham gia ngày:
    9/9/12
    Bài viết:
    42
    Đã được thích:
    14
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Em thấy file .hex cũng được mà. File .hex khác file .bin không a?
     
    phongthanh thích bài này.

Chia sẻ trang này