BÀI 00 : GIỚI THIỆU VỀ STM32F103C8T6.
- Giới thiệu sơ lược
- 1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug.
- 2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình.
- Có chân Output riêng cho các chân mạch nạp trên MCU1.
- Có chân Output đầy đủ cho các chân MCU2.
- Chân cấp nguồn ngoài riêng cho MCU2 nếu không sử dụng nguồn từ USB.
- Thạch anh 32,768khz dùng cho RTC và Backup.
- Chân nạp dùng cho chế độ nạp boot loader.
- Nút Reset ngoài và 1 led hiển thị trên chân PB9, 1 led báo nguồn cho MCU2.
- Cấu hình chi tiết của STM32F103C8T6:
- ARM 32-bit Cortex M3 với clock max là 72Mhz.
- Bộ nhớ:
- 64 kbytes bộ nhớ Flash(bộ nhớ lập trình).
- 20kbytes SRAM.
- Clock, reset và quản lý nguồn.
- Điện áp hoạt động 2.0V -> 3.6V.
- Power on reset(POR), Power down reset(PDR) và programmable voltage detector (PVD).
- Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz.
- Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz.
- Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC.
- Trong trường hợp điện áp thấp:
- Có các mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
- Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng lưu trữ data khi mất nguồn cấp chính.
- 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ.
- Khoảng giá trị chuyển đổi từ 0 – 3.6V.
- Lấy mẫu nhiều kênh hoặc 1 kênh.
- Có cảm biến nhiệt độ nội.
- DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can thiệp quá sâu của CPU.
- 7 kênh DMA.
- Hỗ trợ DMA cho ADC, I2C, SPI, UART.
- 7 timer.
- 3 timer 16 bit hỗ trợ các mode IC/OC/PWM.
- 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ như ngắt input, dead-time..
- 2 watdog timer dùng để bảo vệ và kiểm tra lỗi.
- 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như hàm Delay….
- Hỗ trợ 9 kênh giao tiếp bao gồm:
- 2 bộ I2C(SMBus/PMBus).
- 3 bộ USART(ISO 7816 interface, LIN, IrDA capability, modem control).
- 2 SPIs (18 Mbit/s).
- 1 bộ CAN interface (2.0B Active)
- USB 2.0 full-speed interface
- Kiểm tra lỗi CRC và 96-bit ID.
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0,F1,F2,F3,F4….. Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3. STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz. Giá thành cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự. Mạch nạp cũng như công cụ lập trình khá đa dạng và dễ sử dụng.
Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi game, GPS cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần, máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…
Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR Embedded Workbench, Keil C… Ở đây mình sử dụng Keil C nên các bài viết sau mình chỉ đề cập đến Keil C.
Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như: STM32snippets, STM32Cube LL, STM32Cube HAL, Standard Peripheral Libraries, Mbed core. Mỗi thư viện đều có ưu và khuyết điểm riêng, ở đây mình xin phép sử dụng Standard Peripheral Libraries vì nó ra đời khá lâu và khá thông dụng, hỗ trợ nhiều ngoại vi và cũng dễ hiểu rõ bản chất của lập trình.
Mạch nạp: có khá nhiều loại mạch nạp như : ULINK, J-LINK , CMSIS-DAP, STLINK… ở đây mình sử dụng Stlink vì giá thành khá rả và debug lỗi cũng tốt.
Board để lập trình: các bạn có thể mua sẵn 1 số kit ra chân đã có sẵn trên thị trường hoặc thiết kế 1 cái board dành riêng cho bản thân mình. Ở đây mình đã thiết kế 1 board đã tích hợp sẵn mạch nạp, mình cũng đã test và chạy khá ổn, debug bằng Keil C khá giống với phiên bản STlink V2 trên thị trường. Nói chung là sử dụng đồ tự làm khá thú vị. Đây là board của mình:
Sơ lược về Board trên:
Thành phẩm:
Board có thể sử dụng một số loại MCU 48 pin của ST(vì sơ đồ chân cũng khá tương đồng giữa các dòng F0, F1, F2, F3, F4) như : STM32F100C8T6, STM32F103C8T6, STM32F303CCT6 ...
Chào bạn. Bạn có thể cho mình hướng dẫn để tạo board với các cấu hình mà bạn sử dụng trong bài học không ạ? Mình cảm ơn!
ReplyDeleteChào bạn! Mình chưa hiễu rõ ý của bạn lắm. Ý của bạn là tạo project mới hay vẽ lại board.
DeleteXin lỗi bạn vì giờ mới trả lời. Ý mình là vẽ lại board ạ.
DeleteBoard đấy anh tự thiết kế hở anh
ReplyDeleteĐúng rồi, board này mình tự thiết kế.
DeleteGiới thiệu về Lư Khúc Thành - một editor của tai thỏ
ReplyDeleteAnh có thể chia sẻ sơ đồ nguyên lý được không ah?
ReplyDeleteĐây là schematic mình vẽ : https://drive.google.com/file/d/15ufMRqhP9HlmhxSNNQAuV6v50qujpCeI/view?usp=sharing. Bạn có thểm tham khảo thêm các board của ST như : Nucleo, Discovery ... Để rõ hơn. Cảm ơn bạn đã quan tâm!
DeleteNếu được thì anh gửi qua email em là phamhoanghd9x@gmail.com
ReplyDeleteCảm ơn anh.
Đây là schematic mình vẽ : https://drive.google.com/file/d/15ufMRqhP9HlmhxSNNQAuV6v50qujpCeI/view?usp=sharing.
DeleteBạn có thểm tham khảo thêm các board của ST như : Nucleo, Discovery ... Để rõ hơn. Cảm ơn bạn đã quan tâm!
cho em xin thư viện altium của stm32f103c8t6 với ạ
ReplyDeletethư viện đây nha bạn: https://drive.google.com/drive/folders/1GaqcOU2HW-PzEUxWKfuPU25FK46n14Ky?usp=sharing.
Deletetaì liệu có chứa các thanh ghi của mcu là ở đâu vậy ạ?
ReplyDeletetài liệu này phụ thuộc từng dòng MCU nha bạn. Ở đây thì bạn tìm kiếm là user manual + tên dòng chip. Đa phần các tài liệu là tiếng Anh nha bạn.Ở đây mình có đính kèm link user manual của STM32f103C8 : https://drive.google.com/file/d/1TPOgl28HGvVt5atB8pxeiyCl7JAGlrOX/view?usp=sharing
DeleteCái này anh nạp phần mềm nạp của con st_link vào kiểu gì vậy anh
ReplyDeleteChào bạn,phần mềm nạp cho MCU st_link là file hex(file này tìm trên mạng nha bạn). dùng 1 cái st_link khác nạp file hex này vào MCU st_link, phần mềm sử dụng là STM32 ST-LINK Utility. File hex này chỉ cần nạp 1 lần duy nhất. Sau khi nạp, bạn có thể update firmware của nhà sản xuất.
DeleteAnh lấy file hex ở đâu vậy ạ, file hex này là của ST-link hay ST-link V2
DeleteFile hex này là file hex của ST-link V2 nha bạn. Bạn có thể tham khảo bài viết tại đây :http://www.dientuvietnam.net/forums/forum/vi-%C4%91i%E1%BB%81u-khi%E1%BB%83n-mcu-b%E1%BB%99-%C4%91i%E1%BB%81u-khi%E1%BB%83n-t%C3%ADn-hi%E1%BB%87u-s%E1%BB%91-dsc/core-32-bit/200376-diy-st-link-v2
Deleteanh cho em hỏi e có thể nhận hay tìm thư viện Standard Peripheral Libraries của stm32f4 ở đâu ạ và thư viện của anh là dùng chung cho cả họ f1 ạ
ReplyDeleteChào bạn,
DeleteBạn vào link "https://www.st.com/en/evaluation-tools/stm32f4discovery.html#tools-software" . Tìm đến mục "MCU & MPU EMBEDDED SOFTWARE", ở đây sẽ có gói "STM32CubeF4" là thư viện HAL, "và STSW-STM32068" là thư viện Standard mà bạn cần tìm. Chú ý là cần tài khoản của ST để download.
Chào mọi người. Laptop của mình xài windows 10. Mình muốn download stm32 về để kết nối với tay cầm taranis x9d plus nhưng máy tính không nhận driver này. Cho hỏi mình phải làm sao? Cám ơn
ReplyDeletecho em xin thư viện altium của stm32f103c8t6 với ạ
ReplyDeleteTrong bài em có thấy rằng cấp nguồn vào chân vbat để chạy rtc và lưu dữ liệu khi mất nguồn cấp ,vậy khi mình nạp xong rồi rút mạch nạp thì dữ liệu có còn giữ hay không hay là mình vừa cấp nguồn qua vbat và vừa cấp nguồn qua mạch nạp, và anh có thể giải thích cụ thể về mini usb dùng cấp nguồn ngoài, xin cảm ơn
ReplyDeleteChào bạn, khi cấp nguồn cho chân Vbat, dữ liệu mà bạn muốn lưu trữ phải được lập trình và ghi sẵn vào các thanh ghi được quy định bởi nhà sản xuất trước khi VDD bị ngắt. Nguồn ở chân Vbat sẽ được dùng để duy trì hoạt động, lưu trữ cho RTC và các thanh ghi backup đó. Các hoạt động khác và giá trị sẽ bị ngưng khi không có nguồn ở chân VDD.
DeleteCó 3 trường hợp thiết kế với chân Vbat này:
#1 : Cấp chung nguồn chân Vbat với VDD : có thể sử dụng để test chức năng backup.... nhưng khi nguồn VDD mất, bộ nhớ backup và RTC bị xóa.
#2 : Không cấp nguồn Vbat, cấp nguồn VDD bình thường : MCU vẫn hoạt động bình thường, chức năng backup sẽ không hoạt động được.
#3 : Cấp nguồn Vbat và VDD bằng 2 nguồn riêng biệt: Khi VDD mất nguồn, Vbat còn các thanh ghi backup sẽ được lưu giá trị trước đó dc ghi vào, bộ RTC vẫn chạy.