BÀI TẬP MỨC ĐỘ 3Yêu cầu 1: Trình bày và vẽ sơ đồ kết nối phần cứng tối thiểu để vi điều khiển STM32 có thể hoạt động...3 Yêu cầu 2: Trong báo cáo trình bài rõ và chi tiết cách thiết lập
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM
KHOA CÔNG NGHỆ ĐIỆN TỬ
BÁO CÁO VI ĐIỀU KHIỂN
MÔN: VI ĐIỀU KHIỂN GVHD: PHẠM QUANG TRÍ
Lớp: DHDTVT15ATT
ĐỀ 2 BUỔI 11
Họ và Tên MSSV Nhận xét của nhóm
Hoàng Trần Thiện 19519351
1
Trang 2BÀI TẬP MỨC ĐỘ 3
Yêu cầu 1: Trình bày và vẽ sơ đồ kết nối phần cứng tối thiểu để vi điều khiển STM32 có thể hoạt động 3 Yêu cầu 2: Trong báo cáo trình bài rõ và chi tiết cách thiết lập và các chức năng trong phần mềm CubeMX Cấu hình chức năng phải vừa đủ và sử dụng, không cấu hình các chân và chức năng không sử dụng 3 Yêu cầu 3: Trong báo cáo trình bày rõ lưu đồ giải thuật và mã nguồn của trương trình điều khiển 8 Yêu cầu 4: Sử dụng phần mềm Proteus để vẽ mạch mô phỏng và nạp chương trình vào vi điều khiển Thực hiện cho chạy thử trên mạch mô phỏng Quay video clip minh chứng kết quả thực hiện, tải lên youtube và ghi liên kết vào báo cáo Trong video clip phải có mô tả thí nghiệm, kết quả thú nghiệm và nhạn xét về kết quả thí nghiệm 19 Link youtube: 19
2
Trang 3Yêu cầu 1: Trình bày và vẽ sơ đồ kết nối phần cứng tối thiểu để vi điều khiển STM32 có thể hoạt động.
Sơ đồ nguyên lý kết nối phần cứng tối thiểu.
3
Trang 4Yêu cầu 2: Trong báo cáo trình bài rõ và chi tiết cách thiết lập và các chức năng trong phần mềm CubeMX Cấu hình chức năng phải vừa đủ và sử dụng, không cấu hình các chân và chức năng không sử dụng.
Bước 1: Khởi động phần mềm CubeMX.
4
Trang 5Bước 2: Chọn STM32F103C6
Bước 3: Chọn mạch nạp SWDIO cho vi điều khiển Chân PA13 và chân
PA14 được dùng để kết nối.
5
Trang 6Bước 4: Chọn bộ thạch anh LSE ( thạch anh trong ) cho vi điều khiển, chọn chân thạch anh bằng cách vào System core => RCC => Low Speed Clock ( HSE ) => Crytal/Ceramic Resonator Chân PC14 và chân PC15 được khai báo.
6
Trang 7Bước 5: Cấu hình chức năng UART ta vào connectivity chọn UART1 chọn chế độ Ansynchnorous Chân PA9 và PA10 được khai báo.
- Chọn thông số cơ bản ta vào Parameter Settings hiệu chỉnh Baud Rate:
115200 Word length: 0 Bits Parity: none Stop Bits: 1
Chân PA10 là UART1_RX và Chân PA9 là UART1_TX.
7
Trang 8- Ta vào NVIC Settings tích chọn chế độ ngắt UART1 (USART global interrupt)
Bước 6: Cấu hình chức năng ADC, khai báo ngõ vào ADC (mode) ta chọn IN1 tương ứng với chân PA1.
-Kiểu lưu trữ dữ liệu (data aglignment): chọn right alignment.
8
Trang 9Bước 7: Thiết lập tốc độ tần số cho vi điều khiển chọn tần số 8MHz tại HSI.
Bước 8 : Tạo Project đặt tên là BT_test chọn Toolchain/IDE là SW4STM32
Sau khi hoàn tất việc cấu hình, từ phần mềm CubeMX chung ta sẽ nhấp chuột
vào nút “Generate code”.
9
Trang 10Yêu cầu 3: Trong báo cáo trình bày rõ lưu đồ giải thuật và mã nguồn của trương trình điều khiển.
LƯU ĐỒ GIẢI THUẬT
10
Trang 11BƯỚC 1 BƯỚC 2
11
Trang 12BƯỚC 3 BƯỚC 4
12
Trang 13BƯỚC 5 BƯỚC 6
13
Trang 14BƯỚC 7 BƯỚC 8
14
Trang 15BƯỚC 9
15
Trang 16BƯỚC 10
16
Trang 17CHƯƠNG TRÌNH NGẮT
17
Trang 18CHƯƠNG TRÌNH KHỞI TẠO LCD
18
Trang 21* <h2><center>© Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
#include "stdbool.h"
/* USER CODE END Includes */
/* Private typedef -*//* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define -*//* USER CODE BEGIN PD */
/* USER CODE END PD */
21
Trang 22/* Private macro -*//* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables -*/ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim2;
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */
//unsigned char thien[];
uint8_t data[30];
uint8_t data_T[1];
bool flag_R=0;
uint8_t flag_step_1 = 0, flag_step_2 = 0,flag_step_3 = 0;
uint8_t flag_step_4 = 0, flag_step_5 = 0,flag_step_6 = 0;
uint8_t flag_step_7 = 0, flag_step_8 = 0,flag_step_9 = 0;
/* USER CODE END PV */
/* Private function prototypes -*/void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM2_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code -*/
22
Trang 23/* USER CODE BEGIN 0 */
void lcd_write_4bit(uint8_t rs,uint8_t data)
{
HAL_GPIO_WritePin(RS_GPIO_Port,RS_Pin,rs);
HAL_GPIO_WritePin(EN_GPIO_Port,EN_Pin,1);
HAL_GPIO_WritePin(D7_GPIO_Port,D7_Pin,((data>>3)&0x01));HAL_GPIO_WritePin(D6_GPIO_Port,D6_Pin,((data>>2)&0x01));HAL_GPIO_WritePin(D5_GPIO_Port,D5_Pin,((data>>1)&0x01));HAL_GPIO_WritePin(D4_GPIO_Port,D4_Pin,((data>>0)&0x01));HAL_Delay(1);
Trang 25*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* 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 */
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
25
Trang 26flag_step_1 = 1;
}
//step 2
if((flag_step_1 == 1) && (flag_step_2 == 0)){
if((flag_R== 1 ) && (data[0] == 'A') ){
flag_step_5 = 1;
26
Trang 27}
//step 6
if((flag_step_5 == 1) && (flag_step_6 == 0)){
if((flag_R== 1 ) && (data[0] == 'B') ){
flag_step_10 = 1 ;
}
// step 7
if((flag_step_5 == 1) && (flag_step_7 == 0)){
if((flag_R== 1 ) && (data[0] == 'D') ){
flag_step_7 = 1;
27
Trang 29RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue =RCC_HSICALIBRATION_DEFAULT;
|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();
}
29
Trang 30/* USER CODE BEGIN ADC1_Init 0 */
/* USER CODE END ADC1_Init 0 */
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/* USER CODE BEGIN ADC1_Init 2 */
/* USER CODE END ADC1_Init 2 */
30
Trang 31/* USER CODE BEGIN TIM2_Init 0 */
/* USER CODE END TIM2_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM2_Init 1 */
/* USER CODE END TIM2_Init 1 */
if (HAL_TIMEx_MasterConfigSynchronization(&htim2,
&sMasterConfig) != HAL_OK)
{
31
Trang 32Error_Handler();
}
/* USER CODE BEGIN TIM2_Init 2 */
/* USER CODE END TIM2_Init 2 */
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
/* USER CODE BEGIN USART1_Init 2 */
/* USER CODE END USART1_Init 2 */
Trang 33static void MX_GPIO_Init(void)
/*Configure GPIO pins : D4_Pin D5_Pin D6_Pin D7_Pin
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
Trang 34/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL errorreturn state */
/* USER CODE END Error_Handler_Debug */
* 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 6 */
/* User can add his own implementation to report the file name andline number,
tex: printf("Wrong parameters value: file %s on line %d\r\n", file,line) */
/* USER CODE END 6 */
và ghi liên kết vào báo cáo Trong video clip phải có mô tả thí nghiệm, kết quả thú nghiệm và nhạn xét về kết quả thí nghiệm.
Link youtube: https://youtu.be/wLCv6PKgkxU
34