NẠP CODE VỚI BOOT LOADER STM32
- Boot loader là gì
- Main flash memory: chuẩn này là chuẩn nạp code thông thường của MCU(dùng các mạch nạp như Stlink, Jlink….) thiết kế của nó là chân BOOT0 sẽ được nối đất. Vì lý do này nên chân BOOT đươc thiết kế là nối xuống GND thông qua trở kéo nguồn. Không có sự kết nối này, các mạch nạp sẽ không nhận dạng được IC được nạp và sẽ bị báo lỗi không tìm thấy MCU.
- System memory : đây là chuẩn nạp code đặc biệt của MCU thông qua những chương trình nạp mà nhà sản xuất cung cấp. Tùy vào dòng MCU mà có các ngoại vi nạp khác nhau như : UART, SPI, USB, I2C.. Ở STM32F103C8T6 chuẩn nạp này chỉ được áp dụng ở UART1 trên chân PA9,PA10. Điều kiện là chân BOOT0 nối nguồn 3V3 và chân BOOT1(PB2) nối GND.
- Embedded SRAM: chuẩn này cho phép truy cập địa chỉ SRAM nội bên trong IC. Điều kiện là chân BOOT0 nối nguồn 3V3 và chân BOOT1(PB2) nối 3V3. Chuẩn này mình chưa sử dụng, hy vọng có ai đó bổ sung chuẩn này.
- Sử dụng boot loader với chuẩn UART.
- Máy tính nhận cổng COM của các module UART(đã cài đặt driver….)
- Cấp nguồn cho module UART, board STM32.
- Chân BOOT0 nối 3V3, chân BOOT1 nối GND.
- Có file code nạp đuôi ở 3 dạng file .s19; .hex; .bin.
- Kiểm tra các bus nối đã được kết nối, không bị lỏng bất cứ chân nào.
- Tạo file hex trong Keil C.
- Đấu nối các dây kết nối.
- Mở phần mềm flash loader demo và thực hiện theo như sau.
- Chọn cổng COM tương ứng với cổng COM của module UART. Các thông số khác giữ nguyên, ngoại trừ baud rate(có thể thay đổi). Nhấn Next để tiếp tục.
- Kích thước bộ nhớ flash của MCU sẽ xuất hiện. Nhấn next để tiếp tục.
- Loại MCU và các page nhớ xuất hiện, nhấn Next để tiếp tục.
- Xuất hiện Tab tiếp theo với nhiều lựa chọn, ở đây mình chọn là Nạp code mới và chọn đường dẫn đến file hex mà mình đã chuẩn bị. Nhấn Next để tiếp tục
- Nhấn Next để nạp, sau khi nạp xong sẽ có thông báo đã nạp xong.
- Sau khi nạp xong, đưa mạch trở về trạng thái Main flash memory(BOOT0 nối đất, BOOT1 tùy chỉnh). Reset mạch, mạch chạy bình thường.
Nhìn sơ đồ chân của vi điều khiển STM32 có khi nào các bạn thắc mắc chân BOOT0, BOOT1 để làm gì không?? Không tự dưng mà nhà sản xuất lại thiết kế chúng mà không có ứng dụng gì. Mục đích của chân này để phân chia các chuẩn nạp code cho MCU tùy thuộc vào mục đích của người sử dụng. Các loại STM32Fxx khác cũng gần giống như STM32F1, hệ thống các chuẩn nạp được phân chia như sau:
Có 3 chuẩn mode như hình ở trên:
Chương trình nạp: flash loader demo.
Module UART: các module UART có bán trên thị trường : USB sang UART dùng PL2303, CH340, CP2102, FT232RL….
Yêu cầu phần cứng:
Các bước thực hiện:
Mở keil C lên vào options for Target bằng các kích vào biểu tượng hoặc project -> Options for target, vào tab Output, click vào ô Create hex file sau đó nhấn Rebuild(F7).
Như vậy là file hex đã được tạo, kiểm tra trong thư mục Object của project.
Lưu ý: Bạn có thể mất vài lần cắm nếu phần mềm không kết nối được với MCU do một vài lỗi(Cắm dây lỏng, đấu nối dây sai hay thiếu, mạch bị hư…). Hãy reset lại mạch và kiểm tra kỹ lại.
Ưu điểm của phương pháp này là không cần những mạch nạp đắt tiền vẫn nạp được code cho MCU, ứng dụng để tiết kiệm chân VĐK(PA14, PA13, PB3.. những chân cho mạch nạp) mà vẫn đầy đủ các chức năng cơ bản. Đó cũng là công nghệ giúp bảo mật các thiết kế(tìm hoài trên mạch không thấy chân nạp thông thường….).
Nhược điểm: khá nhiều thao tác(cắm, cắm, reset, lỏng dây..), rườm rà, không debug được lỗi, dễ xảy ra sai sót, cũng như không nhiều chức năng được thêm vào. Và thường chỉ được sử dụng khi không có mạch nạp.
Mở keil C lên vào options for Target bằng các kích vào biểu tượng hoặc project -> Options for target, vào tab Output, click vào ô Create hex file sau đó nhấn Rebuild(F7).
Như vậy là file hex đã được tạo, kiểm tra trong thư mục Object của project.
Lưu ý: Bạn có thể mất vài lần cắm nếu phần mềm không kết nối được với MCU do một vài lỗi(Cắm dây lỏng, đấu nối dây sai hay thiếu, mạch bị hư…). Hãy reset lại mạch và kiểm tra kỹ lại.
Dùng các chân UART khác của STM32f103 được ko Ad?
ReplyDeleteKhông được nhé bạn. Nhà sản xuất đã cố định chức năng này. Tùy thuộc vào từng dòng chip mà có thể nạp boot loader không phải là UART nha.Tra cứu thêm trong file AN2606 của nhà sản xuất nhé.
DeleteCho em hỏi là file AN2606 ở đâu vậy anh?
ReplyDeletebạn chỉ cần search google là sẽ ra tài liệu này. Nó là tài liệu liên quan đến "system memory boot mode" do nhà sản xuất cung cấp.
DeleteEm cảm ơn anh!!!
DeleteCái hướng dẫn này áp dụng được với stm32f4 không bạn ?
ReplyDeleteChào bạn, cái này áp dụng được cho STM32F4 nha bạn, nhưng bạn cần chú ý chân bootloader của từng dòng vi điều khiển riêng biệt.
DeleteSao mình ko kết nối được STM32F102
ReplyDeleteChào bạn,
Delete+ Bạn kiểm tra xem loại STM32F102 bạn sử dụng là loại cụ thể nào, nó hỗ trợ chuẩn nạp bootloader mặc định là loại nào(UART, USB....).
+ Nếu đã xác định được loại kết nối hỗ trợ, bạn kiểm tra mức logic của các chân boot, nguồn cấp, các dây có kết nối hay chưa...
Mình có thể tự viết chương trình bootloader không vậy anh.
ReplyDelete