Đề tài Thiết kế và thi công máy in nhiệt cầm tay sẽ ứng dụng KIT thực h̀ành Discovery STM32F746NGHx với lõi là vi điều khiển ARM Cortex M7 để lập trình điều khiển đầu in nhiệt Fujitsu FTP – 628MCL103 và màn hình cảm ứng trong việc soạn thảo văn bản cần thiết để in. Những dữ liệu soạn thảo được hiển thị trực tiếp trên m̀n hình giúp người sử dụng dễ d̀ng quan sát và kiểm soát được thông tin cần in ấn. Mời các bạn cùng tham khảo.
BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG Đề Tài: THIẾT KẾ VÀ THI CÔNG MÁY IN NHIỆT CẦM TAY GVHD: ThS Phan Vân Hoàn SVTH: Cao Nhữ Ân Lưu Q́c T́n Tp Hồ Chí Minh – 01/2018 16341002 16341026 BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG Đề Tài: THIẾT KẾ VÀ THI CÔNG MÁY IN NHIỆT CẦM TAY GVHD: ThS Phan Vân Hoàn SVTH: Cao Nhữ Ân Lưu Quốc Tuấn 16341002 16341026 Tp Hồ Chí Minh – 01/2018 i TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TP HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH Tp HCM, ngày 15 tháng 01 năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Cao Nhữ Ân MSSV: 16341002 Lưu Quốc Tuấn MSSV: 16341026 Chuyên ngành: CNKT Điện Tử Truyền Thông Mã ngành: 41 Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2016 Lớp: 163410A I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG MÁY IN NHIỆT CẦM TAY II NHIỆM VỤ Các số liệu ban đầu: Nhóm tiến hành việc khảo sát loại vi điều khiển, lựa chọn hình cảm ứng, đầu in nhiệt giấy in Tiến hành tìm hiểu thu thập số liệu từ trang mạng sách lập trình vi điều khiển ARM Tham khảo máy in nhiệt để xây dựng lên mô hình điều khiển Tìm hiểu bộ cắt giấy để lựa chọn tham khảo cách thức hoạt động phù hợp cho mô hình Nội dung thực hiện: NỘI DUNG 1: Nghiên cứu tài liệu đầu in nhiệt Fujitsu-FTP-628MCL10 NỘI DUNG 2: Dựa dữ liệu thu thập được, tiến hành lựa chọn giải pháp thiết kế thi công mô hình phần mạch điều khiển NỘI DUNG 3: Thiết kế hệ thống điều khiển dao cắt giấy in NỘI DUNG 4: Thiết kế lưu đồ giải thuật viết chương trình điều khiển cho Vi điều khiển, thiết kế giao diện hình soạn thảo văn bản NỘI DUNG 5: Thử nghiệm điều chỉnh phần cứng chương trình để mô hình tối ưu Đánh giá thông số mô hình so với thông số thực tế NỘI DUNG 6: Viết báo cáo thực ii III NGÀY GIAO NHIỆM VỤ: 25/09/2017 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 15/01/2018 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Phan Vân Hoàn CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH iii TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TP HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH Tp HCM, ngày 15 tháng 01 năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Lớp: Họ tên sinh viên 2: Lớp: Tên đề tài: CAO NHỮ ÂN 163410A LƯU QUỐC TUẤN 163410A MSSV: 16341002 MSSV: 16341026 THIẾT KẾ VÀ THI CÔNG MÁY IN NHIỆT CẦM TAY Tuần/ngày Xác nhận GVHD Nội dung 25/09/2017 Tìm hiểu thu thập thông số loại vi điều khiển, 01/10/2017 hình hiển thị, đầu in nhiệt, giấy in nguồn cung cấp 01/10/2017 Dựa thông số thu thập được, tiến hành lựa chọn 15/10/2017 giải pháp thiết kế mạch giao tiếp điều khiển đầu in nhiệt 15/10/2017 29/10/2017 Thi công mạch điều khiển đầu in nhiệt 29/10/2017 Thiết kế lưu đồ giải thuật kiểm tra độ ổn định của 10/11/2017 mạch đã thi công 10/11/2017 28/11/2017 Viết chương trình điều khiển cho vi điều khiển 28/11/2017 Thiết kế giao diện hiển thị soạn thảo trực tiếp 15/12/2017 hình cảm ứng 15/12/2017 02/01/2018 02/01/2018 15/01/2018 Thử nghiệm điều chỉnh phần cứng chương trình để mô hình tối ưu Đánh giá thông số của mô hình Viết báo cáo thực hiện GV HƯỚNG DẪN (Ký ghi rõ họ tên) iv LỜI CAM ĐOAN Nhóm xin cam đoan đề tài nhóm tự thực dựa vào số tài liệu đề tài trước Các số liệu đề tài nhóm thu thập từ tài liệu hướng dẫn tham khảo số đề tài liên quan từ nhóm nghiên cứu phát triển để thực đề tài Không chép từ tài liệu hay cơng trình có trước TP Hồ Chí Minh, ngày 15 tháng 01 năm 2018 Sinh viên thực CAO NHỮ ÂN Sinh viên thực LƯU QUỐC TUẤN v LỜI CẢM ƠN Sau trình học tập trường với kiến thức Thầy Cô giảng dạy, kinh nghiệm học hỏi, trình thực đồ án nhóm Thầy Cơ tạo điều kiện tốt để thực đồ án Nhóm xin gửi lời cảm ơn tới tất Thầy, Cô Trường Đại Học Sư Phạm Kỹ Thuật TPHCM nói chung, đặc biệt giảng viên Khoa Điện - Điện Tử nói riêng giảng dạy cung cấp cho Nhóm có kiến thức quý báu, tạo tiền đề quan cho Nhóm thực đồ án Nhóm xin gửi lời cảm ơn chân thành sâu sắc tới Thầy Phan Vân Hoàn trực tiếp hướng dẫn tận tình cho nhóm suốt trình làm đồ án, cảm ơn Thầy giành thời gian quý báu để hướng dẫn cho nhóm, hỗ trợ thiết bị đưa hướng giải cho nhóm gặp khó khăn Bên cạnh nhóm xin cảm ơn tập thể lớp 163410A đồng hành với nhóm suốt trình học tập thực đồ án Các bạn giúp đỡ, chia sẻ kinh nghiệm tạo thêm động lực để nhóm hồn thành đồ án Nhóm xin chân thành cảm ơn bố mẹ, người thân bạn bè Những người giúp đỡ mặt tinh thần vật chất nhiều để hồn thành tốt đồ án Xin chân thành cảm ơn người Trong trình nghiên cứu thực đồ án, thời gian trình độ có giới hạn nên khơng tránh khỏi thiếu sót Vì vậy, nhóm hy vọng nhận ý kiến đóng góp quý báu từ Thầy Cô, bạn bè người quan tâm để đề tài hoàn thiện Xin chân thành cảm ơn Sinh viên thực CAO NHỮ ÂN Sinh viên thực LƯU QUỐC TUẤN vi MỤC LỤC Trang bìa i Nhiệm vụ đồ án ii Lịch trình iv Cam đoan v Lời cảm ơn vi Mục lục vii Liệt kê hình vẽ x Liệt kê bảng vẽ xii Tóm tắt xiii Chương TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC Chương CƠ SỞ LÝ THUYẾT 2.1 QUY TRÌNH IN NHIỆT 2.1.1 Giới thiệu về in nhiệt 2.1.2 Mô tả kỹ thuật in nhiệt trực tiếp 2.1.3 Tìm hiểu thơng số của mợt số loại giấy in nhiệt thị trường 2.2 GIỚI THIỆU PHẦN CỨNG 2.2.1 Cảm biến giấy 2.2.2 Động bước 2.2.3 Giới thiệu về vi điều khiển ARM a Tổng quan về ARM b Tổng quát về ARM Cortex - M7 STM32F746NGHx 12 2.2.4 Giới thiệu về đầu in nhiệt Fujitsu FTP – 628MCL103 15 a Tổng quan về đầu in nhiệt 15 b Tổng quan về đầu in nhiệt Fujitsu 16 c Thông số kỹ thuật đầu in nhiệt 16 d Sơ đồ chân kết nối vi điều khiển 18 vii 2.2.5 Giới thiệu về module thời gian thực DS1307 19 a Tổng quan về thời gian thực 19 b Tổ chức bộ nhớ IC DS1307: 20 2.3 GIỚI THIỆU PHẦN MỀM 22 2.3.1 Giới thiệu thư viện đồ họa StellarisWare Grlib 22 a Tổng quan về StellarisWare Grlib 22 b Cấu trúc dạng Widget của Grlib 22 c Các bước vẽ Widget của Grlib 24 d Các bước thực thi Widget của Grlib 25 2.3.2 Giới thiệu về chuẩn giao tiếp SPI 26 a Định nghĩa 26 b Cách giao tiếp giữa đầu in với vi điều khiển 29 c Cách đầu in xuất dữ liệu cụm in 30 2.3.3 Giới thiệu về chuẩn giao tiếp I2C 30 a Định nghĩa 30 b Cách giao tiếp giữa Module DS1307 với vi điều khiển 32 Chương TÍNH TỐN VÀ THIẾT KẾ 34 3.1 GIỚI THIỆU 34 3.2 TÍNH TỐN VÀ THIẾT KẾ HỆ THỐNG 34 3.2.1 Thiết kế sơ đồ khối hệ thống 34 3.2.2 Tính tốn thiết kế mạch 35 a Thiết kế khối xử lý trung tâm 35 b Thiết kế khối cảm biến 35 c Thiết kế khối điều khiển 37 d Thiết kế khối cấu chấp hành 40 e Thiết kế khối nguồn 41 Chương THI CÔNG HỆ THỐNG 44 4.1 GIỚI THIỆU 44 4.2 THI CÔNG HỆ THỐNG 44 4.2.1 Thi công bo mạch 44 4.2.2 Lắp ráp kiểm tra 47 4.3 ĐĨNG GĨI VÀ THI CƠNG MƠ HÌNH 48 4.3.1 Đóng gói bộ điều khiển 48 viii 4.3.2 Thi công mô hình 49 4.4 LẬP TRÌNH HỆ THỐNG 50 4.4.1 Lưu đồ giải thuật 50 4.4.2 Phần mềm lập trình cho Vi điều khiển ARM 51 4.4.3 Phần mềm tạo Project cho ARM STM32CubeMX 52 4.5 LẬP TRÌNH MƠ PHỎNG 55 4.5.1 Lưu đồ chương trình máy in 55 4.5.2 Lưu đồ chương trình đồng hồ 58 4.5.3 Lưu đồ chương trình khóa hình 59 4.6 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC 60 4.6.1 Viết tài liệu hướng dẫn sử dụng 60 4.6.2 Quy trình thao tác 61 Chương KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 65 5.1 KẾT QUẢ MƠ HÌNH PHẦN CỨNG 65 5.2 KẾT QUẢ GIAO DIỆN SOẠN THẢO VĂN BẢN 66 5.3 ĐÁNH GIÁ VÀ NHẬN XÉT KẾT QUẢ 70 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 71 6.1 KẾT LUẬN 71 6.2 HƯỚNG PHÁT TRIỂN .71 TÀI LIỆU THAM KHẢO 73 PHỤ LỤC 74 ix PHỤ LỤC hltdc.Init.Backcolor.Green = 0; hltdc.Init.Backcolor.Red = 0; if (HAL_LTDC_Init(&hltdc) != HAL_OK) { Error_Handler(); } pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 0; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 0; pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; pLayerCfg.Alpha = 0; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg.FBStartAdress = 0; pLayerCfg.ImageWidth = 0; pLayerCfg.ImageHeight = 0; pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0; if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) { Error_Handler(); } pLayerCfg1.WindowX0 = 0; pLayerCfg1.WindowX1 = 0; pLayerCfg1.WindowY0 = 0; pLayerCfg1.WindowY1 = 0; pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; pLayerCfg1.Alpha = 0; pLayerCfg1.Alpha0 = 0; pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg1.FBStartAdress = 0; pLayerCfg1.ImageWidth = 0; pLayerCfg1.ImageHeight = 0; pLayerCfg1.Backcolor.Blue = 0; pLayerCfg1.Backcolor.Green = 0; pLayerCfg1.Backcolor.Red = 0; if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK) { Error_Handler(); } } /* SPI2 init function */ static void MX_SPI2_Init(void) { hspi2.Instance = SPI2; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi2.Init.CRCPolynomial = 7; hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; if (HAL_SPI_Init(&hspi2) != HAL_OK) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 81 PHỤ LỤC Error_Handler(); } } /* TIM2 init function */ static void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; htim2.Instance = TIM2; htim2.Init.Prescaler = 540; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 3999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } } /* TIM3 init function */ static void MX_TIM3_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; htim3.Instance = TIM3; htim3.Init.Prescaler = 54000; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 1999; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { Error_Handler(); } } /////////////////////////////////////////////////// void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance==htim3.Instance) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 82 PHỤ LỤC HAL_I2C_Mem_Read_DMA(&hi2c1,DS1307_ADDRESS_READ ETH_TXD1 PB5 > USB_OTG_HS_ULPI_D7 PD7 > SPDIFRX_IN0 PC12 > SDMMC1_CK BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 83 PHỤ LỤC PE5 PE6 PG13 PB7 PB6 PG11 PC11 PC10 PI4 PG10 PD3 PI5 PI7 PI6 PG9 PD2 PH14 PA9 PC9 PC8 PH4 PB13 PB12 PC0 PC1 PC2 PB2 PD12 PD13 PH12 PA1 PA4 PC4 PD11 PH7 PH9 PH11 PA2 PA6 PA5 PC5 PB10 PH8 PH10 PA3 PA7 PB1 PB0 PB11 > DCMI_D6 > DCMI_D7 > ETH_TXD0 > USART1_RX > QUADSPI_BK1_NCS > ETH_TX_EN > SDMMC1_D3 > SDMMC1_D2 > SAI2_MCLK_A > SAI2_SD_B > DCMI_D5 > SAI2_SCK_A > SAI2_FS_A > SAI2_SD_A > DCMI_VSYNC > SDMMC1_CMD > DCMI_D4 > USART1_TX > SDMMC1_D1 > SDMMC1_D0 > USB_OTG_HS_ULPI_NXT > USB_OTG_HS_ULPI_D6 > USB_OTG_HS_ULPI_D5 > USB_OTG_HS_ULPI_STP > ETH_MDC > USB_OTG_HS_ULPI_DIR > QUADSPI_CLK > QUADSPI_BK1_IO1 > QUADSPI_BK1_IO3 > DCMI_D3 > ETH_REF_CLK > DCMI_HSYNC > ETH_RXD0 > QUADSPI_BK1_IO0 > I2C3_SCL > DCMI_D0 > DCMI_D2 > ETH_MDIO > DCMI_PIXCLK > USB_OTG_HS_ULPI_CK > ETH_RXD1 > USB_OTG_HS_ULPI_D3 > I2C3_SDA > DCMI_D1 > USB_OTG_HS_ULPI_D0 > ETH_CRS_DV > USB_OTG_HS_ULPI_D2 > USB_OTG_HS_ULPI_D1 > USB_OTG_HS_ULPI_D4 */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ HAL_RCC_GPIOE_CLK_ENABLE(); HAL_RCC_GPIOG_CLK_ENABLE(); HAL_RCC_GPIOB_CLK_ENABLE(); HAL_RCC_GPIOD_CLK_ENABLE(); HAL_RCC_GPIOC_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE(); HAL_RCC_GPIOJ_CLK_ENABLE(); HAL_RCC_GPIOI_CLK_ENABLE(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 84 PHỤ LỤC HAL_RCC_GPIOK_CLK_ENABLE(); HAL_RCC_GPIOF_CLK_ENABLE(); HAL_RCC_GPIOH_CLK_ENABLE(); /*Configure GPIO pin : OTG_HS_OverCurrent_Pin */ GPIO_InitStruct.Pin = OTG_HS_OverCurrent_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(OTG_HS_OverCurrent_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : QSPI_D2_Pin */ GPIO_InitStruct.Pin = QSPI_D2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; HAL_GPIO_Init(QSPI_D2_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : RMII_TXD1_Pin RMII_TXD0_Pin RMII_TX_EN_Pin */ GPIO_InitStruct.Pin = RMII_TXD1_Pin|RMII_TXD0_Pin|RMII_TX_EN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); /*Configure GPIO pins : ULPI_D7_Pin ULPI_D6_Pin ULPI_D5_Pin ULPI_D3_Pin ULPI_D2_Pin ULPI_D1_Pin ULPI_D4_Pin */ GPIO_InitStruct.Pin = ULPI_D7_Pin|ULPI_D6_Pin|ULPI_D5_Pin|ULPI_D3_Pin |ULPI_D2_Pin|ULPI_D1_Pin|ULPI_D4_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pin : PB4 */ GPIO_InitStruct.Pin = GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pin : SPDIF_RX0_Pin */ GPIO_InitStruct.Pin = SPDIF_RX0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF8_SPDIFRX; HAL_GPIO_Init(SPDIF_RX0_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : SDMMC_CK_Pin SDMMC_D3_Pin SDMMC_D2_Pin PC9 PC8 */ GPIO_InitStruct.Pin = SDMMC_CK_Pin|SDMMC_D3_Pin|SDMMC_D2_Pin|GPIO_PIN_9 |GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pins : PA15 PA8 */ GPIO_InitStruct.Pin = GPIO_PIN_15|GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 85 PHỤ LỤC GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pins : DCMI_D6_Pin DCMI_D7_Pin */ GPIO_InitStruct.Pin = DCMI_D6_Pin|DCMI_D7_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /*Configure GPIO pin : VCP_RX_Pin */ GPIO_InitStruct.Pin = VCP_RX_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(VCP_RX_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : QSPI_NCS_Pin */ GPIO_InitStruct.Pin = QSPI_NCS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI; HAL_GPIO_Init(QSPI_NCS_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : OTG_FS_VBUS_Pin */ GPIO_InitStruct.Pin = OTG_FS_VBUS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(OTG_FS_VBUS_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : Audio_INT_Pin */ GPIO_InitStruct.Pin = Audio_INT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(Audio_INT_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : SAI2_MCLKA_Pin SAI2_SCKA_Pin SAI2_FSA_Pin SAI2_SDA_Pin */ GPIO_InitStruct.Pin = SAI2_MCLKA_Pin|SAI2_SCKA_Pin|SAI2_FSA_Pin|SAI2_SDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF10_SAI2; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); /*Configure GPIO pin : SAI2_SDB_Pin */ GPIO_InitStruct.Pin = SAI2_SDB_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF10_SAI2; HAL_GPIO_Init(SAI2_SDB_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : OTG_FS_PowerSwitchOn_Pin */ GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(OTG_FS_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 86 PHỤ LỤC /*Configure GPIO pin : DCMI_D5_Pin */ GPIO_InitStruct.Pin = DCMI_D5_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(DCMI_D5_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : ARDUINO_D7_Pin LCD_DISP_Pin PI0 */ GPIO_InitStruct.Pin = ARDUINO_D7_Pin|LCD_DISP_Pin|GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); /*Configure GPIO pin : PI2 */ GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); /*Configure GPIO pins : uSD_Detect_Pin PC7 */ GPIO_InitStruct.Pin = uSD_Detect_Pin|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pin : LCD_BL_CTRL_Pin */ GPIO_InitStruct.Pin = LCD_BL_CTRL_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LCD_BL_CTRL_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : DCMI_VSYNC_Pin */ GPIO_InitStruct.Pin = DCMI_VSYNC_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(DCMI_VSYNC_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : OTG_FS_OverCurrent_Pin */ GPIO_InitStruct.Pin = OTG_FS_OverCurrent_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(OTG_FS_OverCurrent_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : SDMMC_D0_Pin */ GPIO_InitStruct.Pin = SDMMC_D0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1; HAL_GPIO_Init(SDMMC_D0_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : TP3_Pin NC2_Pin */ GPIO_InitStruct.Pin = TP3_Pin|NC2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /*Configure GPIO pins : DCMI_PWR_EN_Pin PH6 */ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 87 PHỤ LỤC GPIO_InitStruct.Pin = DCMI_PWR_EN_Pin|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /*Configure GPIO pins : DCMI_D4_Pin DCMI_D3_Pin DCMI_D0_Pin DCMI_D2_Pin DCMI_D1_Pin */ GPIO_InitStruct.Pin = DCMI_D4_Pin|DCMI_D3_Pin|DCMI_D0_Pin|DCMI_D2_Pin |DCMI_D1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /*Configure GPIO pin : VCP_TX_Pin */ GPIO_InitStruct.Pin = VCP_TX_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(VCP_TX_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : LCD_INT_Pin */ GPIO_InitStruct.Pin = LCD_INT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(LCD_INT_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : ULPI_NXT_Pin */ GPIO_InitStruct.Pin = ULPI_NXT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; HAL_GPIO_Init(ULPI_NXT_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : PC6 */ GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pins : ARDUINO_D4_Pin PG6 EXT_RST_Pin */ GPIO_InitStruct.Pin = ARDUINO_D4_Pin|GPIO_PIN_6|EXT_RST_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); /*Configure GPIO pins : PF6 PF10 PF9 PF8 */ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_10|GPIO_PIN_9|GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); /*Configure GPIO pins : ULPI_STP_Pin ULPI_DIR_Pin */ GPIO_InitStruct.Pin = ULPI_STP_Pin|ULPI_DIR_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 88 PHỤ LỤC GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pins : RMII_MDC_Pin RMII_RXD0_Pin RMII_RXD1_Pin */ GPIO_InitStruct.Pin = RMII_MDC_Pin|RMII_RXD0_Pin|RMII_RXD1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pin : PB2 */ GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pins : QSPI_D1_Pin QSPI_D3_Pin QSPI_D0_Pin */ GPIO_InitStruct.Pin = QSPI_D1_Pin|QSPI_D3_Pin|QSPI_D0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /*Configure GPIO pin : RMII_RXER_Pin */ GPIO_InitStruct.Pin = RMII_RXER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(RMII_RXER_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : RMII_REF_CLK_Pin RMII_MDIO_Pin RMII_CRS_DV_Pin */ GPIO_InitStruct.Pin = RMII_REF_CLK_Pin|RMII_MDIO_Pin|RMII_CRS_DV_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pins : DCMI_HSYNC_Pin PA6 */ GPIO_InitStruct.Pin = DCMI_HSYNC_Pin|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pins : LCD_SCL_Pin LCD_SDA_Pin */ GPIO_InitStruct.Pin = LCD_SCL_Pin|LCD_SDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /*Configure GPIO pins : ULPI_CLK_Pin ULPI_D0_Pin */ GPIO_InitStruct.Pin = ULPI_CLK_Pin|ULPI_D0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 89 PHỤ LỤC /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15|GPIO_PIN_8, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOI, ARDUINO_D7_Pin|LCD_DISP_Pin|GPIO_PIN_0, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_Port, LCD_BL_CTRL_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOH, DCMI_PWR_EN_Pin|GPIO_PIN_6, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOG, ARDUINO_D4_Pin|GPIO_PIN_6|EXT_RST_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6|GPIO_PIN_10|GPIO_PIN_9|GPIO_PIN_8, GPIO_PIN_RESET); } /***************************HIEN THI KIM********************************/ void Hienthikim(unsigned int x,unsigned int y) { int u,v, j,k; int n,m; GrContextForegroundSet(&TFT, ClrWhite); GrCircleFill(&TFT,x,y,3); if(tem_s != ss) {//xoa kim giay for(char i=0;i100) power=100; else if(power