Trong phạm vi của đề tài,chúng em chỉ sự dụng những ứng dụng cơ bản của Board STM như GPIO,USART,FLASH,LCD,Ngắt Interrupt…Chúng ta sử dụng Keil C 14.2 để lập trình và nạp code qua Jlink.Bộ thư viên sử dụng để lập trình là bộ thư viên chuẩn V2.03.
Khi lập trình ta phải chú ý cấu hình cho các thành phần trên thì mới sử dụng được.Các cấu hình cơ bản như sau:
1.1.Cấu hình hệ thống
1.1.1 Cấu hình cho GPIO
Sử dụng các GPIO để tạo các tín hiệu điều khiển truyên nhận dữ liệu trong mạng RS485,điều khiển mở khóa cửa và các Led trên Board STM
Code : GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /* Configure IO connected to LD1*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_15 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);
1.1.2 Cấu hình cho USART
Ở đây chỉ sử dụng USART1 và USART2 dùng để truyền nhận dữ liễu giữa các thành phần
khác của hệ thống.Sau đây là cách cấu hình cho USART:
USART 1
o Configure PA2 for USART Tx as alternate function push-pull GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
o Configure PA3 for USART Rx as input floating GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);
Page 67
- BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled;
USART 2
o Configure PA9 for USART Tx as alternate function push-pull GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
o Configure PA10 for USART Rx as input floating GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);
o USARTx 2 configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled
1.1.3 Cấu hình Ngắt Interrupt
Chúng ta cần phải xác đinh mức độ ưu tiên ngắt cho 2 USART của hệ thống.Dựa vào yêu
cấu của hệ thống,ta để USART 1 có mức độ ưu tiên cao hơn USART.Cụ thể,khi Board STM đang điều khiển và xử lý dữ liệu đọc thẻ qua USART 2,nếu USART 1 xảy ra ngắt thì Board sẽ xử lý tạm dựng công việc thực thi qua USART 2 để chuyển sang xử lý các lênh nhận đc từ USART 1.Sau khi xử lý xong sẽ quay lại tiếp tục công việc trước khi ngắt xảy ra.
Cấu hình mức độ ưu tiên cho ngắt USART:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); Enable the USART 1 gloabal Interrupt
Page 68 NVIC_InitStructure.NVIC_IRQChannel = 37; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = 38; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
1.2.Giải thuật chương trình cho Board STM Chương trình chính:
Page 69
Khi xảy ra ngắt USART :
Page 70