TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM KHOA ĐIỆN - ĐIỆN TỬ 🙠🕮🙢 MÔN: VI ĐIỀU KHIỂN GVHD: PHẠM QUANG TRÍ Lớp: DHDTVT15ATT_Nhóm STT Họ Tên MSSV Nguyễn Tuấn Đạt 19429961 Nguyễn Đình Thăng 19432461 Hồng Trần Thiện 19519351 TP HỒ CHÍ MINH, NGÀY THÁNG NĂM 2021 Đề tài: Viết chương trình điều khiển led đơn nối vào chân STM32, đồng thời hoạt động lặp lại sau: Nhóm 3: LED sáng 3s tắt 9s; LED sáng 7s tắt 1s Câu 1: vẽ sơ đồ nguyên lý kết nối phần cứng tối thiểu toàn hệ thống điểu khiển dùng STM32: Sơ đồ nguyên lý kết nối phần cứng STM32F103C6: Câu 2: Trình bày rõ chi tiết cách thiết lập chức phần mêm CubeMX Cấu hình chức vừa đủ sử dụng, khơng cấu hình chân chức khơng sử dụng: Bước 1: khởi động phần mềm CubeMX, chọn xác mã số STM32F103C6: Bước 2: chọn loại mạch nạp: Bước 3: chọn dao động thiêt lập tầng số hoạt động cho mạch nạp: Chọn xung cho mạch nạp: Sư dụng mạch thạch anh trong: Bước 4: Cấu hình GPIO Output đặt tên cho LED: Bước 5: Đặt tên Project chọn nơi lưu trữ chọn công cụ soạn thảo biên dịch chương trình: Sau hồn tất việc cấu hình, phần mềm CubeMX nhấp chuột vào nút “ Generate code” Yêu cầu 3: Trình bày rõ chi tiết lưu đồ giải thuật mã nguồn chương trình điều khiển MÃ NGUỒN CỦA CHƯƠNG TRÌNH /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * © Copyright (c) 2021 STMicroelectronics * All rights reserved. * * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes */ #include "main.h" /* Private includes */ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define */ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables -*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code -*/ /* USER CODE BEGIN */ /* USER CODE END */ /** * @brief The application entry point * @retval int */ int main(void) { /* USER CODE BEGIN */ int t=0; /* USER CODE END */ /* MCU Configuration */ /* Reset of all peripherals, Initializes the Flash interface and the Systick */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN */ /* USER CODE END */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN */ if(t==0||t==12||t==24||t==36) {HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin,0);} // bat led if(t==3||t==15||t==27||t==39) {HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin,1);} // tat led if(t==0||t==8||t==16||t==24||t==32||t==40) {HAL_GPIO_WritePin(LED_2_GPIO_Port, LED_2_Pin,0);} // bat led if(t==7||t==15||t==23||t==31||t==39||t==47) {HAL_GPIO_WritePin(LED_2_GPIO_Port, LED_2_Pin,1);} // tat led t++; if(t==48) {t=0;} HAL_Delay(1000); } /* USER CODE END */ } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ HAL_RCC_GPIOC_CLK_ENABLE(); HAL_RCC_GPIOB_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(LED_2_GPIO_Port, LED_2_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin, GPIO_PIN_SET); /*Configure GPIO pin : LED_2_Pin */ GPIO_InitStruct.Pin = LED_2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_2_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : LED_1_Pin */ GPIO_InitStruct.Pin = LED_1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_1_GPIO_Port, &GPIO_InitStruct); } /* USER CODE BEGIN */ /* USER CODE END */ /** * @brief This function is executed in case of error occurrence * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN */ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END */ } #endif /* USE_FULL_ASSERT */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ LƯU ĐỒ GIẢI THUẬT CỦA CHƯƠNG TRÌNH BẮT ĐẦU Cấu hình LED_1 = PA9 LED_2= PB1 t=0 ĐÚNG LED_1 Bật Nếu t=0 t=12 t=21 t=36 SAI ĐÚNG LED_1 Tắt Nếu t=3 t=15 t=27 t=39 SAI ĐÚNG LED_2 Bật Nếu t=0 t=8 t=16 t=24 t=32 t=40 SAI ĐÚNG Nếu t=7 t=15 t=23 t=31 t=39hoặc t=47 LED_2 Tắt t=t+1 delay(1s) SAI Yêu cầu 4: Sử dụng phần mềm Proteus để vẽ mạch mô nạp chương trình vào vi điều khiển https://www.youtube.com/watch?v=pew2vFEpfTM ... hình LED_ 1 = PA9 LED _2= PB1 t=0 ĐÚNG LED_ 1 Bật Nếu t=0 t= 12 t = 21 t =36 SAI ĐÚNG LED_ 1 Tắt Nếu t =3 t =15 t =27 t =39 SAI ĐÚNG LED _2 Bật Nếu t=0 t=8 t =16 t =24 t= 32 t=40 SAI ĐÚNG Nếu t=7 t =15 t = 23 t = 31 ... {HAL_GPIO_WritePin (LED_ 1_ GPIO_Port, LED_ 1_ Pin ,1) ;} // tat led if(t==0||t==8||t= =16 ||t= =24 ||t== 32 | |t==40) {HAL_GPIO_WritePin (LED _2_ GPIO_Port, LED _2_ Pin,0);} // bat led if(t==7||t= =15 ||t= = 23 ||t= = 31 ||t= =39 ||t==47)...Đề tài: Viết chương trình điều khiển led đơn nối vào chân STM 32 , đồng thời hoạt động lặp lại sau: Nhóm 3: LED sáng 3s tắt 9s; LED sáng 7s tắt 1s Câu 1: vẽ sơ đồ nguyên lý kết nối phần cứng