Bài 9: Lập Trình STM32 ADC Nhiều Kênh Với DMA - Khuê Nguyễn
Có thể bạn quan tâm
Lập trình STM32 đọc ADC nhiều kênh kết hợp DMA sẽ giúp bạn hiểu được:
- Cách sử dụng chế độ Scan Mode
- Cách sử dụng DMA cho ADC
- Cách lập trình ADC nhiều kênh trên STM32
Bài 9 trong serie Học lập trình STM32 từ A tới Z
Table of Contents
- ADC nhiều kênh sử dụng chế độ Scan Mode
- Cấu hình ADC nhiều kênh trên STM32 CubeMX
- Lập trình ADC nhiều kênh chế độ Scan Mode
- Kết
ADC nhiều kênh sử dụng chế độ Scan Mode
Chế độ Scan chỉ được bật khi sử dụng 2 kênh ADC trở lên.
Nếu Bit CONT được set lên 1, sau khi scan hết các kênh ADC tự động lặp lại thao tác Scan.
Nếu bit CONT ko được bật, sau khi ADC scan hết các kênh sẽ dừng lại.
Sau khi thực hiện chuyển đổi ADC tại mỗi kênh, cờ EOC sẽ được bật, ngắt hoặc DMA sẽ được sinh ra, giá trị thu được sẽ lưu vào thanh ghi DR.
Khi thực hiện chuyển đổi xong tại kênh tiếp theo, giá trị sẽ ghi đè lên thanh ghi DR
Khi sử dụng DMA giá trị chuyển đổi sẽ được chuyển tới SRAM trước khi vào bộ DMA

Cấu hình ADC nhiều kênh trên STM32 CubeMX
Trong bài này chúng ta sẽ sử dụng ADC Scan mode 2 kênh CH0 và CH1, không sử dụng mode CONT và dùng DMA để lưu giá trị
Bật project, chọn chip STM32F103C8, trong Sys, chọn Debug: Serial Wire. Chi tiết trong Bài 3
Phần Mode tick chọn CH0 và CH1

Phần Configurations, Tab Parameter
Num of Conversion: 2 Chọn số kênh cần chuyển đổi
Khi đó Scan Mode sẽ tự động Enable
Continuous Mode: Disable tắt chế độ Cont
Tại Rank 2: Chọn thêm Chanel 1, Chọn chu kì lấy mẫu cho mỗi Chanel tại Samping Time
Rank là thứ tự chuyển đổi, cao nhất là 1 lớn nhất là 10, bộ ADC sẽ Scan từ kênh có Rank là 1 đến n với n là số kênh các bạn cần chuyển đổi.

Trong DMA:
Mục DMA Request thêm kênh ADC1 các mục còn lại sẽ tự động được cài đặt theo
Mode: Circular với mode này dữ liệu sẽ liên tục được gửi qua lại giữa ADC và Vùng nhớ sử dụng DMA
Data Width: Half Word 16 bit

Ok. Xong phần Config các bạn đặt tên, chọn tool chain là ARM-MDK V5 rồi Gen code ra thôi

Lập trình ADC nhiều kênh chế độ Scan Mode
Mở project các bạn thêm biến u16_ADCScanVal[2];

Rồi khởi động ADC với DMA và trỏ DMA tới biến vừa tạo chứa giá trị ADC. Vì là chế độ Single nên bạn phải để trong While(1) mỗi lần chuyển đổi cách nhau 100ms

Phần cứng mình sẽ kết nối với joystick để đọc 2 giá trị X và Y nhé. Các bạn kết nối 5V với 3.3V, GND, VRX với PA0(ADC kênh 0), VRY với A1(ADC kênh 1)

Bật debug lên, tìm tới biến khởi tạo và Add to Watch 1

Nhấn F5 để Run và xem kết quả

Với chế độ Scan Continuous ta chỉ cần Enable bit CONT lên bằng câu lệnh.
hadc1.Init.ContinuousConvMode = ENABLE;

Sau đó chuyển lệnh Start lên trên While (1)

Như vậy ADC sẽ hoạt động liên tục.
Khi cần dừng bộ ADC chúng ta sử dụng lệnh
HAL_ADC_Stop(&hadc1);
Kết
ADC nhiều kênh được sử dụng rất nhiều trong việc đọc tín hiệu từ các loại cảm biến Analog. Bộ ADC là một ngoại vi cơ bản, bắt buộc phải nắm rõ khi học lập trình vi điều khiển, cụ thể hơn là lập trình STM32
5/5 - (2 bình chọn)Từ khóa » Dma Trong Stm32 Là Gì
-
STM32F1: DMA Phần 1: ADC Với STM32 - DevIOT
-
Dma Là Gì - Hướng Dẫn Lập Trình Dma Với Stm32 - WEB GIẢI ĐÁP
-
Dma Là Gì - Hướng Dẫn Lập Trình Dma Với Stm32 - Thienmaonline
-
Dma Là Gì - Hướng Dẫn Lập Trình Dma Với Stm32
-
BÀI 10: DMA VỚI STM32F103 - Chia Sẻ Các Vấn đề điện Tử
-
Cơ Chế Dma Là Gì ? Hướng Dẫn Lập Trình Dma Với Stm32
-
Hướng Dẫn Sử Dụng Chức Năng UART IDLE DMA - TAPIT
-
Đọc ADC Nhiều Kênh Trên SMT32 Sử Dụng DMA - TAPIT
-
Thế Nào Là Dma Là Gì ? Trong Tin Học Dma Là Gì
-
Sự Khác Nhau Khi Sử Dụng Polling, Interrupt Và DMA Trong Giao Tiếp ...
-
Direct Memory Access ( Dma Là Gì ? Định Nghĩa Và Giải Thích Ý ...
-
Top 9 Dma Là Gì - Mobitool
-
Bài 9: Lập Trình STM32 ADC Nhiều Kênh Với DMA - Chickgolden
-
Direct Memory Access – Wikipedia Tiếng Việt