Hệ thống nhúng – Giao tiếp chuột và bàn phím sử dụng Kit STM32F429-DISCOVERY

Mình đang làm báo cáo đè tài này nên tiện đây chia sẻ cho mọi người báo cáo kết thúc môn học của mình luôn. Đề tài giao tiếp chuột và bán phím với Kit. Ở đây mình sử dụng Kit STM32F429-DISCOVERY. Vì đây mình chỉ upload thôi nếu mọi người có thắc mắc gì có thể comment hoặc nhắn tin cho mình nha, blog mình không đi sâu vào nhúng nên bài này mình sẽ không đi quá sâu.


Sơ lược về vi xử lý: 

  • STM32F429ZIT6 có bộ nhớ Flash 2MB được tổ chức 2 banks cho phép đọc ghi song song, 256 KB RAM(LQFP144)
  • Bộ nhớ ngoài linh động với 32 bit bus dữ liệu: hỗ trợ bộ nhớ SRAM, PSRAM, SDRAM, Compact Flash/NOR/NAND
  • On-board ST-LINK/V2 với lựa chọn chế độ chuyển đổi giữa debug và chạy mạch.
  • ST-LINK/V2 ( có kết nối SWD để lập trình và gỡ lỗi) giúp cho việc nạp code vào mạch diễnra nhanh chóng hơn từ việc code từ Keil uVision và đưa qua ST-Link Utility và nạpcode vào mạch.
  • Nguồn cấp cho Board kit là qua USB hoặc từ nguồn điện bên ngoài 3V or 5V tiện lợi vìcó thể chuyển đổi từ cổng USB trên máy tính để cấp nguồn cho mạch.
  • Màn hình TFT LCD QVGA 2.4”: Bộ điều khiển LCD-TFT có độ phân giải lên tới VGA với Bộtăng tốc Chrom-ART chuyên dụng để tạo nội dung đồ họa nâng cao (DMA2D)
  • Bộ cảm biến chuyển động thích hợp trong mạch L3GD20
  • DMA đa năng: Bộ điều khiển DMA 16 luồng với hỗ trợ FIFO và hỗ trợ cụm
  • RTC: đo độ chính xác của giây, lịch trong phần cứng
  • Kết nối nâng cao
    • Thiết bị / máy chủ / bộ điều khiển OTGtốc độ cao USB 2.0 với PHY
    • Bộ điều khiển / máy chủ / OTG tốc độcao / tốc độ cao USB 2.0 với DMA chuyên dụng, PHY và ULPI tốc độ cao
    • 10/100 Ethernet MAC với DMA chuyên dụng:hỗ trợ phần cứng IEEE 1588v2, MII / RMII

Sơ lược về Kit:

  • Kit đã bao gồm mạch nạp nên khi nạp không cần sử dụng đến các thiết bị như ST-Linker mà có thể nạp code qua ứng dụng ST-Link Utility
  • Kit có tích hợp Micro Vi điều khiển (Micro Controller Unit – MCU) là đơn vị xử lý nhỏ, nó được tích hợp toàn bộ các bộ nhớ như ROM, RAM, các Port truy xuất, giaotiếp ngoại vi trực tiếp trên một con chip hết sức nhỏ gọn.
  • Màn hình QVGA TFT LCD 2.4” hiển thị màu
  • 6Led bao gồm:
    • LD1 (đỏ/xanh) cho giao tiếp USB
    • LD2 (đỏ) dành cho cấp nguồn 3.3V
    • 2 Led người dùng: LD3 (xanh) và LD4 (đỏ)
    • 2 Led USB OTG: LD5 (xanh) VBUS và LD6(đỏ) OC
  • 2 nút bấm: User và Reset
  • Cổng kết nối USB OTG với chuẩn micro-AB
  • Cảm biến con quay hồi quy xoay 3 trục xyz
  • Cổng USB cấp nguồn 3V hoặc 5V
  • Tính năng đầu tiên là tích hợp SD-Link/V2 hỗ trợ 2 chế độ nạp code chạy và debug
  • Tính năng mbed-enabled : nhằm đảm bảo các nhà phát triển có thể sử dụng các công nghệ Mbed (Mbed OS, Mbed Linux và các công cụ khác) trên một loạt các phần cứng đủ điều kiện.
  • Tính năng cảm biến con quay hồi quy xoay Kit theo 3 trục xyz
  • Tích hợp màn hình Led có hỗ trợ cảm ứng
  • Kết nối USB có các chức năng chính:
    • Cổng debug
    • Cổng COM ảo
    • Lưu trữ Mass
    • Nạp nguồn cho Kit
    • Giao tiếp USB OTG chuẩn micro-AB

Sơ đồ Kit các cổng nguồn và cổng USB giao tiếp như hình:

Code demo (tác giả có comment trong code nhé):

/**
 *	Keil project for USB HID Host
 *
 *
 *	Before you start, select your target, on the right of the "Load" button
 *
 *
 *	@author		Tilen Majerle
 *
 *
 *	@email		tilen@majerle.eu
 *
 *
 *	@website	http://stm32f4-discovery.com
 *
 *
 *	@ide		Keil uVision 5
 *
 *
 *	@packs		STM32F4xx Keil packs version 2.2.0 or greater required
 *
 *
 *	@stdperiph	STM32F4xx Standard peripheral drivers version 1.4.0 or greater required
 *
 *
 */

/* Include core modules */

#include "stm32f4xx.h"

/* Include my libraries here */

#include "defines.h"

#include "tm_stm32f4_disco.h"

#include "tm_stm32f4_delay.h"

#include "tm_stm32f4_usb_hid_host.h"

#include <stdio.h>

int main(void) {

	TM_USB_HIDHOST_Result_t USB_HID_Status;		/* USB HID Host status */

	TM_USB_HIDHOST_Keyboard_t Keyboard_Data;	/* Keyboard handler */

	TM_USB_HIDHOST_Mouse_t Mouse_Data;			/* Mouse handler */

	
	/* Initialize system */

	SystemInit();

	
	/* Leds init */

	TM_DISCO_LedInit();

	
	/* Delay init */

	TM_DELAY_Init();

	
	/* Init USB HID */

	TM_USB_HIDHOST_Init();


	while (1) {

		/* Process USB HID */

		/* This must be called periodically */

		TM_USB_HIDHOST_Process();
		
		/* Get connected device */

		USB_HID_Status = TM_USB_HIDHOST_Device();
		
		/* Switch status */

		switch (USB_HID_Status) {

			/* Keyboard connected */

			case TM_USB_HIDHOST_Result_KeyboardConnected:
				
				/* GREEN led ON */

				TM_DISCO_LedOn(LED_GREEN);
			
				/* Get keyboard data */

				TM_USB_HIDHOST_ReadKeyboard(&Keyboard_Data);

				/* Check if keyboard button is pressed */

				if (Keyboard_Data.ButtonStatus == TM_USB_HIDHOST_Button_Pressed) {

					if (Keyboard_Data.Button == 'a') {			/* Turn on RED led on 'b' button */

						TM_DISCO_LedOn(LED_RED);

					} else if 

(Keyboard_Data.Button == 'm') {	/* Turn off RED led on 'm' button */

						TM_DISCO_LedOff(LED_RED);

					}

				}

				
				break;

			
			/* Mouse connected */

			case TM_USB_HIDHOST_Result_MouseConnected:

				
				/* RED led ON */

				TM_DISCO_LedOn(LED_RED);

			
				/* Get mouse data */

				TM_USB_HIDHOST_ReadMouse(&Mouse_Data);

			
				/* Check buttons */

				if (Mouse_Data.LeftButton == TM_USB_HIDHOST_Button_Pressed) {	/* Left button */

					TM_DISCO_LedOn(LED_GREEN);
									/* Toggle GREEN led */

				}

				if (Mouse_Data.RightButton == TM_USB_HIDHOST_Button_Pressed) {	/* Right button */

					TM_DISCO_LedOff(LED_GREEN);
									/* Toggle GREEN led */

				}

				if (Mouse_Data.MiddleButton == TM_USB_HIDHOST_Button_Pressed) {	/* Middle button */

					TM_DISCO_LedToggle(LED_GREEN);
								/* Toggle GREEN led */

				}

				if (Mouse_Data.DiffX != 0 || Mouse_Data.DiffY != 0) {

					/* If there is a difference for mouse movement at any coordinate */

					TM_DISCO_LedToggle(LED_GREEN);

								/* Toggle RED led */

					
					/* If you need to move cursor now at fix position */

					/* Positions are stored like this */

					//Mouse_Data.AbsoluteX //Absolute X position for LCD

					//Mouse_Data.AbsoluteY //Absolute Y position for LCD

				}

			
				break;

			
			/* No device connected */

			case TM_USB_HIDHOST_Result_Disconnected:

				
				/* Turn off leds */

				TM_DISCO_LedOff(LED_RED | LED_GREEN);

			
				break;

			
			/* Device is not supported */

			case TM_USB_HIDHOST_Result_DeviceNotSupported:

				
				/* Device is not supported */

				/* Toggle leds forever */

				TM_DISCO_LedToggle(LED_RED | LED_GREEN);

				/* Delay */

				Delayms(50);

			
				break;

			
			/* Error occurred somewhere */

			case TM_USB_HIDHOST_Result_Error:

				
				/* Error occurred */

				/* Toggle RED LED forever */

				TM_DISCO_LedToggle(LED_RED);

				/* Delay */

				Delayms(50);

			
				break;

			
			/* Library is not initialized */

			case TM_USB_HIDHOST_Result_LibraryNotInitialized:

				
				/* Library is not initialized */

				/* Toggle GREEN LED */

				TM_DISCO_LedToggle(LED_GREEN);

				/* Delay */

				Delayms(50);

			
				break;

		}

	}

}

Link hướng dẫn: https://stm32f4-discovery.net/2014/08/library-31-usb-hid-host-for-stm32f4xx-devices/

Advertisements

3 comments

  1. bạn ơi mình mới học môn hệ thống nhúng và cũng làm đề tài này nhưng thực sự ko biết đồ án cần những gì và tìm đồ ở đâu. Mình ở tphcm có thể chỉ mình dc ko

    Like

    • Chào cậu mình học ở Thủ Đức đồ hàng mình mua ở thế giới điện tử ở Thủ Đức, mình vẫn còn hàng ở nhà mà không biết để đâu rồi 😀

      Like

      • Còn code thì như bên trên đó hồi xưa mình có tham khảo ở một trang web nhưng theo thầy thì code mình có sẵn thư viện chứ chưa thật sự code từ đầu 😀

        Like

Để lại bình luận

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s