Skip to main content

STM32F103C8T6, #3 ADC

ADC tiếng anh là Analog-to-digital converter, tức là chuyển từ tín hiệu tương tự sang tín hiệu số. Ví dụ ADC 12 bit có giá trị trong vòng 0 - 4096, với mức đo hiệu điện thế từ 0 -3.3V chẳng hạn. Khi đó nếu 0V thì đọc giá trị digital sẽ là 0, nếu 3.3V thì đọc giá trị sẽ là 4096, nếu 1.65V thì sẽ có giá trị 2048,...

Ứng dụng ADC để đo các đại lượng analog như nhiệt độ, độ sáng... Chẳng hạn cặp nhiệt K (K-type thermal couple), khi nhiệt độ thay đổi thì hiệu điện thế hai đầu cặp nhiệt sẽ thay đổi. Lúc đó có thể dùng bộ ADC để đọc giá trị thay đổi rồi dựa vào đó điều khiển thiết bị.

Để sử dụng ADC trên STM32F103C8T6 thực hiện các bước như sau:

1. Tạo dự án mới trong STM32CubeMX, chọn IN3 trong ADC1, chọn Asynchronous cho USART1, ngoài ra cần chọn Serial Wire cho mục SYS/Debug, và chọn chân PC13 là GPIO_Output để tắt bật đèn LED nếu cần.

2. Trong tab Configuration, chọn NVIC và bật các ngắt như hình dưới

3. Để bắt đầu đọc tín hiệu analog thì cần gọi hàm HAL_ADC_Start_IT(&hadc1); Tín hiệu analog sẽ được đọc trong hàm HAL_ADC_ConvCpltCallback. Trong ví dụ này sau khi đọc được giá trị analog sẽ gửi qua UART để hiển thị lên máy tính.

Code đầy đủ có thể tải về từ đây https://drive.google.com/open?id=1CFIhKN33CQTCIXlEdzgco0CDBvEYeKBV.

Comments

Popular posts from this blog

STM32F103C8T6, Lỗi không nạp được code

TÌNH TRẠNG Sau khi nạp code lần đầu, STM32 ST-Link Utility sẽ không kết nối được nữa và hiện lên thông báo lỗi: Cannot connect to target! Please select "Connect Under Reset" mode from Target -> Settings menu and try again. If you are trying to connect to low frequency application, please select a lower SWD Frequency mode from Target -> Settings menu. Tình trạng này có thể xảy ra với tất cả các dòng F1 và cách khắc phục cũng tương tự nhau. KHẮC PHỤC 1. Trong STM32CubeMX cần phải chọn lại trong SYS > Debug là Serial Wire sau đó generate lại code. 2. Board arm kết nối ST-Link Utility không được, lúc đó hãy nhấn giữ nút Reset trên board rồi nhấn nút Connect trên ST-Link Utility, chờ khoảng 3-5 giây sau đó thả nút Reset. Có thể bạn sẽ phải làm vài lần như vậy mới có được 1 lần kết nối thành công. 3. Sau khi kết nối thành công, nạp code mới có config Debug là Serial Wire ở trên. Khi đó board sẽ kết nối bình thường cho các lần tiếp theo.

STM32F103C8T6, #1 UART

UART là viết tắt của Universal Asynchronous Receiver – Transmitter, tạm dịch là truyền nhận bất đồng bộ. Trên máy tính thì chúng ta có thể hiểu nôm na là giao tiếp qua cổng COM. Các máy tính hiện nay nếu không có cổng COM thì chúng ta có thể sử dụng các thiết bị chuyển giao tiếp USB => COM. UART trên STM32F103C8T6 còn được gọi là TTL serial, giao thức này sử dụng mức tín hiệu giới hạn trong mức 0V - Vcc, nếu vi điều khiển 3.3V thì mức giới hạn là 0V-3.3V. Cổng COM trên máy tính có mức tín hiệu dao động -13V đến +13V. Cho nên bạn không thể nối trực tiếp từ vi điều khiển đến cổng COM máy tính nhé. Thay vào đó có thể sử dụng chip chuyển mức tín hiệu như là MAX232 chẳng hạn (google với từ khóa RS232 to TTL). Hoặc bạn cũng có thể sử dụng một mạch chuyển đổi USB to TTL serial (FT232RL). Board mà chúng ta sử dụng trong bài viết này sẽ là kit ra chân của STM32F103C8T6 như hình dưới, board này còn có tên gọi là blue pill. Để nạp chương trình cho board này chúng ta cần có mạch

STM32F103C8T6, #6 SPI

SPI là một chuẩn giao tiếp do Motorola đưa ra, được dùng chủ yếu để giao tiếp tầm gần giữa các module trong cùng một hệ thống. SPI có thể truyền dữ liệu hai chiều tại cùng một thời điểm. Đây là một giao thức master/slave, có nghĩa là sẽ có duy nhất một trạm đóng vai trò là master và một hoặc nhiều trạm đóng vai trò là slave. Chỉ master được phép điều khiển việc truyền nhận. SPI có 4 dây là clock, dây gửi dữ liệu, dây nhận dữ liệu, và dây chọn slave (trong trường hợp có nhiều slave kết nối vào master). Nguyên lý hoạt động là cứ 1 xung clock thì chip sẽ đọc giá trị tại dây data. SCK - dây clock MISO - master in, slave out MOSI - master out, slave in SS - slave select SPI được sử dụng khá phổ biến, chẳng hạn trong chip NRF24L01 hoặc trong các loại màn hình LCD, OLED, TFT. Bài viết này sẽ hướng dẫn bạn cách viết code 1 chương trình SPI đơn giản giao tiếp giữa hai board SM32F103C8T6. Master trên cổng spi1, slave trên cổng spi2, master sẽ định kỳ cứ 2s gửi 1 byte dữ liệu xuống sla