Trong bài này, mình sẽ hướng dẫn các bạn thiết kế mạch nguyên lý với STM32, cách thiết kế sao cho STM32 hoạt động ổn định và ít lỗi xảy ra nhất có thể.
Bài này nằm trong Serie Học STM32 từ A tới Z
Thiết kế nguồn STM32
Cấu trúc nguồn cấp cho STM32

Vi điều khiển yêu cầu nguồn đầu vào (VDD) từ 2V đến 3.6V. Bên trong chip có mạch ổn áp để tạo ra điện áp 1.8V cho lõi. Khối thời gian thực (RTC) và các thanh ghi Backup sẽ được cấp nguồn từ chân VBAT khi mất nguồn VDD.
Bộ ổn áp bên trong luôn được bật sau khi reset. Nó hoạt động ở ba chế độ khác nhau tùy thuộc vào chế độ hoạt động của chip:
● Ở chế độ Run, bộ ổn áp cấp nguồn đầy đủ cho miền 1.8V (lõi, bộ nhớ và các ngoại vi số)
● Ở chế độ Stop, bộ ổn áp cấp nguồn công suất thấp cho miền 1.8V, để giữ nguyên nội dung của thanh ghi và SRAM
● Ở chế độ Standby, bộ ổn áp bị tắt. Nội dung của thanh ghi và SRAM bị mất, ngoại trừ các mạch liên quan tới Standby và các thanh ghi Backup.
Cấu trúc nguồn cấp cho STM32 bao gồm:
- VDD – VSS: cấp nguồn cho các chân I/O và bộ ổn áp tạo ra miền 1.8V
- VDDA – VSSA – VREF: cấp nguồn cho bộ chuyển đổi ADC, các khối analog,…
- VBAT: cấp nguồn cho bộ RTC, thanh ghi Backup…
Cách cấp nguồn cho STM32
- Nếu sử dụng ADC thì VDDA cần trong khoảng 2.4V đến 3.6V
- Nếu không sử dụng ADC thì VDD trong khoảng 2V đến 3.6V
- Các chân VDD phải được nối tụ decoupling (mỗi chân VDD nối với 1 tụ 104 Ceramic) và trên mạch cần có thêm 1 tụ giá trị từ 4.7uF đến 10uF Tantalum hoặc Ceramic.
- Chân VBAT có thể được nối với pin bên ngoài (điện áp pin VBAT từ 1.8V đến 3.6V, thường dùng pin CMOS). Nếu không sử dụng pin ngoài thì phải nối VBAT lên VDD, kèm 1 tụ decoupling Ceramic 104.
- Chân VDDA phải được kết nối với cặp tụ decoupling: 1 tụ Ceramic 103 (10nF) và 1 tụ Tantalum hoặc Ceramic giá trị 1uF
- Chân VREF+ có thể kết nối với VDDA. Nếu sử dụng nguồn tham chiếu khác thì cần 1 cặp tụ decoupling nối với chân này: 1 tụ Ceramic 103 (10nF) và 1 tụ Ceramic giá trị 1uF. VREF+ cần trong khoảng từ 2.4V đến VDDA.
- VDDA có thể nối với VDD (nên lọc qua cuộn cảm hoặc hạt ferrite nếu nguồn VDD nhiều nhiễu).
- Không nên nối VREF+ với VDDA qua điện trở lớn (cỡ kΩ), vì dòng tiêu thụ của ADC sẽ làm sụt điện áp tham chiếu và kết quả đo bị sai. Nếu cần lọc nhiễu thì dùng hạt ferrite.
Lưu ý: Các chip STM32F103 vỏ 48 chân (như STM32F103C8T6 trên KIT Blue Pill) và 64 chân không có chân VREF+ riêng, VREF+ đã được nối sẵn với VDDA bên trong chip. Vì vậy điện áp tham chiếu ADC chính là VDDA, nguồn VDDA nhiễu bao nhiêu thì kết quả ADC nhiễu bấy nhiêu.

Tụ Decoupling là gì?
Tụ decoupling (decoupling capacitor) hoạt động như một bình chứa năng lượng nhỏ đặt ngay cạnh IC. Bạn sẽ thấy loại tụ này luôn được đặt càng gần IC trên layout PCB càng tốt. Sau khi được nạp đầy, công việc của nó chỉ đơn giản là chống lại mọi thay đổi đột ngột của điện áp nguồn cấp. Khi đặt một tụ decoupling, nó sẽ làm một trong hai việc:
Nếu điện áp đầu vào giảm xuống, tụ decoupling sẽ xả ra để cung cấp đủ năng lượng cho IC, giữ điện áp ổn định.
Nếu điện áp tăng lên, tụ decoupling sẽ hấp thụ phần năng lượng dư thừa, điều này cũng giữ cho điện áp ổn định.
Giống như bể nước nhỏ trên tầng thượng vậy: dù nước từ đường ống chính lúc mạnh lúc yếu, vòi nước trong nhà vẫn chảy đều vì luôn có bể dự trữ ngay sát bên.
Tất cả những điều này là cần thiết vì trên bo mạch có rất nhiều nhiễu điện, và nguồn 3.3V mà chúng ta nghĩ là ổn định thực ra vẫn nhấp nhô lên xuống khi đi từ linh kiện này sang linh kiện khác.
Các IC số như vi điều khiển cần điện áp nguồn càng ổn định càng tốt, vì vậy khi bạn đặt tụ decoupling bên cạnh IC, bạn sẽ bảo vệ được các chip nhạy cảm đó bằng cách lọc bỏ nhiễu và tạo ra nguồn ổn định. Điều gì sẽ xảy ra nếu bạn không sử dụng tụ decoupling bên cạnh IC? Vi điều khiển có thể bị reset bất chợt, chạy sai lệnh và hoạt động bất thường.

Cách sử dụng tụ decoupling
Sơ đồ dưới đây là một ứng dụng điển hình về sử dụng tụ decoupling.
Như bạn có thể thấy, có một tụ điện 10uF giúp san bằng các thay đổi tần số thấp của điện áp đầu vào (ổn định điện áp).
Và sau đó có một tụ điện 0.1uF giúp lọc các nhiễu tần số cao trong mạch. Kết hợp hai tụ điện này với nhau sẽ cung cấp điện áp ổn định, không bị gián đoạn cho vi mạch làm việc.
Khi thiết kế hãy đặt tụ decoupling gần IC nhất có thể, điều này làm giảm điện cảm của đường dây dẫn và giúp tụ đáp ứng được tức thời.

Thiết kế mạch reset STM32
STM32 đã có sẵn điện trở kéo lên bên trong cho chân NRST, nghĩa là các bạn không thiết kế mạch reset thì STM32 vẫn có thể hoạt động được.

Trong thực tế chúng ta sẽ thiết kế thêm nút nhấn và tụ 104 từ NRST xuống GND, để có thể reset bằng tay mà không cần ngắt nguồn, đồng thời tụ giúp chân reset không bị nhiễu gây reset nhầm.

Thiết kế mạch dao động thạch anh cho STM32
STM32 có thể sử dụng bộ dao động nội HSI bên trong nó, nên bạn có thể không cần thiết kế mạch dao động.
Để thêm mạch dao động bên ngoài cho STM32 chúng ta có 2 nguồn:
- Nguồn dao động bên ngoài (External Clock)
- Nguồn dao động thạch anh (Crystal)

Trong thực tế mình hay sử dụng mạch dao động gồm thạch anh và tụ như sau:

Thiết kế mạch BOOT
STM32 có 2 chân BOOT để chọn chế độ khởi động (BOOT1 nằm chung với chân PB2):

- BOOT0 = 0: boot từ Flash, thực thi chương trình do người dùng viết và nạp vào.
- BOOT0 = 1 và BOOT1 = 0: chạy chương trình trong bộ nhớ hệ thống, chính là chương trình Bootloader của hãng ST
- BOOT0 = 1 và BOOT1 = 1: chạy chương trình từ RAM.
Với thiết kế thông thường thì có thể nối chân BOOT0 qua 1 điện trở 10K xuống GND để khi cấp nguồn chip sẽ chạy chương trình người dùng nạp vào luôn:

Thiết kế mạch nạp
STM32 hỗ trợ 2 chuẩn nạp/debug là JTAG và SWD. Khi thiết kế mạch in cho STM32, chúng ta phải đưa ra các header để có thể nạp chip ngay trên board.
Với mạch JTAG thiết kế như sau:

Với mạch SWD thiết kế như sau (chỉ cần SWDIO – PA13, SWCLK – PA14, GND, thêm 3.3V và NRST nếu có):

Lưu ý: Nên đưa cả chân NRST ra header nạp. Nếu lỡ nạp chương trình cấu hình PA13/PA14 thành GPIO (ví dụ quên chọn Debug Serial Wire trong CubeMX), ST-Link sẽ không kết nối được nữa. Khi đó phải dùng chế độ “Connect Under Reset” (cần chân NRST), hoặc kéo BOOT0 lên 1 rồi nạp lại.
Sơ đồ nguyên lý của mạch Bluepill

Link hướng dẫn của hãng (AN2586): Hardware design STM32
Kết
Thiết kế mạch cho STM32 hoạt động cũng khá đơn giản, các bạn nhớ làm theo hướng dẫn của mình nhé. Và quan trọng nhất là nguồn cấp cho vi điều khiển cần ổn định và đủ điện áp.
Nếu thấy bài viết này hay, hãy chia sẻ tới những người bạn học hay đồng nghiệp của mình. Và nếu thắc mắc điều gì, hãy để lại bình luận nhé.
Và cùng gia nhập những người nghiện lập trình tại đây nhé: Hội anh em nghiện lập trình


Sinh viên khai báo thêm 2 button sử dụng
ngắt ngoài. Button 1 khi bấm sẽ thực hiện ngắt và đếm lên, button 2 khi bấm sẽ thực hiện
đếm xuống. Giá trị hiển thị trên led từ 0-99.giúp em giải code bài này với ạ!!