Chương 3 của môn Vi điều khiển nâng cao sẽ giới thiệu những kiến thức cơ bản về vi điều khiển ARM như công cụ lập trình, thư viện phát triển ứng dụng, lập trình vào ra đa dụng GPIO, lập trình vào ra với ngắt ngoài GPIO, lập trình timer, lập trình PWM, lập trình ADC, lập trình UART.
CHƯƠNG Ha Noi Univesity of Industry Faculty of Electronics Engineering 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.2 Lập trình vào đa dụng GPIO 3.3 Lập trình vào với ngắt ngồi GPIO 3.4 Lập trình đếm Timer 3.5 Lập trình điều chế độ rộng xung PWM 3.6 Lập trình biến đổi tương tự số ADC 3.7 Lập trình truyền thơng nối tiếp UART 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.1 Cơng cụ lập trình Ha Noi Univesity of Industry Faculty of Electronics Engineering 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.1 Cơng cụ lập trình Ha Noi Univesity of Industry Faculty of Electronics Engineering 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.1 Công cụ lập trình Ha Noi Univesity of Industry Faculty of Electronics Engineering 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng Ha Noi Univesity of Industry Faculty of Electronics Engineering 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng STM32Snippets STM32Cube LL Standard Peripheral Libraries STM32Cube HAL Mbed core Ha Noi Univesity of Industry Faculty of Electronics Engineering 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng STM32Cube HAL + LL APIs 3.1 Công cụ lập trình thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng STM32Cube HAL + LL APIs HAL(Hardware Abstraction Layer) API: Dành cho người lập trình có kiến thức tốt, muốn tìm cách nhanh để đánh giá lựa chọn chip STM32 LL(Low-Layer) API: Dành cho developer có kiến thức lập trình vi điều khiển 8-bit 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng STM32Cube HAL + LL APIs HAL(Hardware Abstraction Layer) API: Tính Dễ chuyển đổi từ dòng STM32 sang dòng khác mà thay đổi code nhiều Hỗ trợ 100% ngoại vi Tương thích với middleware USB/TCP-IP/Graphic/Touch Sense/ RTOS Có thể dùng STM32CubeMX để sinh code Nhược điểm Phức tạp cần phải tối ưu nhớ Khả tương thích với nhiều dòng STM32 làm tăng thời gian thực thi code, làm giảm tốc độ biên dịch chương trình 3.1 Cơng cụ lập trình thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng STM32Cube HAL + LL APIs LL(Low-Layer) API: Tính năng: Tối ưu cao, tác động tới mức ghi Code sinh nhỏ, Debug mức ghi Có API để cấu hình ngoại vi Không phải thao tác trực tiếp tới ghi Dễ dàng debug Nhược điểm Vẫn phụ thuộc loại STM32 riêng biệt, chuyển trực tiếp từ serie sang serie khác Vẫn phức tạp dùng ngoại vi USB Developer cần phải hiểu hoạt động ngoại vi mức ghi Chỉ hỗ trợ L4, L0 F0 CÁC BƯỚC LẬP TRÌNH VỚI GPIO Cấu hình chân GPIO HAL_GPIO_Init() GPIO_InitTypeDef GPIO_InitStruct = {0}; • uint32_t Speed GPIO_SPEED_FREQ_LOW Low speed GPIO_SPEED_FREQ_MEDIUM Medium speed GPIO_SPEED_FREQ_HIGH High speed ví dụ: GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; CÁC BƯỚC LẬP TRÌNH VỚI GPIO Cấu hình chân GPIO: HAL_GPIO_Init(); Khởi tạo GPIO theo tham số hàm GPIO_Init HAL_GPIO_Init (GPIO_TypeDef * GPIOx, GPIO_InitTypeDef * GPIO_Init) ví dụ: HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); CÁC BƯỚC LẬP TRÌNH VỚI GPIO Cấu hình chân GPIO Ví dụ: GPIO_InitStruct.Pin = GPIO_Pin_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); CÁC BƯỚC LẬP TRÌNH VỚI GPIO Xuất nhập liệu Xuất liệu : HAL_GPIO_WritePin(); HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) o GPIO_TypeDef * GPIOx : cổng GPIO o uint16_t GPIO_Pin: chân GPIO o GPIO_PinState PinState: thiết lập giá trị theo bit : – GPIO_PIN_RESET: to clear the port pin – GPIO_PIN_SET: to set the port pin Ví dụ: Xuất liệu mức chân PA0 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); CÁC BƯỚC LẬP TRÌNH VỚI GPIO Xuất nhập liệu Xuất liệu : HAL_GPIO_TogglePin(); HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) o GPIO_TypeDef * GPIOx : cổng GPIO o uint16_t GPIO_Pin: chân GPIO o Ví dụ: Đảo mức chân PA0 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); CÁC BƯỚC LẬP TRÌNH VỚI GPIO Xuất nhập liệu Nhập liệu : HAL_GPIO_ReadPin(); HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) o GPIO_TypeDef * GPIOx : cổng GPIO o uint16_t GPIO_Pin: chân GPIO Ví dụ: Nhập liệu mức chân PA1 x = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); 3.2 Lập trình vào đa dụng - Thiết kế ứng dụng vào/ra Giới thiệu KIT STM32F103C8T6 Blue Pill KIT STM32F103 BLUE PILL Sơ đồ chân chức nằng KIT STM32F103 BLUE PILL Sơ đồ nguyên lý KIT STM32F103C8T6 Nguồn: easyeda.com A- Điều khiển Led đơn Bài 1: Lập trình điều khiển LED (kết nối với chân PA0) sáng #include "main.h" int main(void) { SystemClock_Config(); MX_GPIO_Init(); while (1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); } } A- Điều khiển Led đơn Bài 2: Lập trình điều khiển LED (kết nối với chân PA0) nhấp nháy với chu kì 1s #include "main.h" int main(void) { SystemClock_Config(); MX_GPIO_Init(); while (1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); HAL_Delay(500); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); HAL_Delay(500); } } A- Điều khiển Led đơn Bài 3: Lập trình điều khiển nhấn nút Select (kết nối với chân PA11) LED (kết nối với chân PA0) sáng A- Điều khiển Led đơn Bài 3: Lập trình điều khiển nhấn nút Select (kết nối với chân PA11) LED (kết nối với chân PA0) sáng #include "main.h" int main(void) { SystemClock_Config(); MX_GPIO_Init(); while (1){ if(HAL_GPIO_ReadPin(GPIOA, GPIO_Pin_11)==0) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); } } A- Điều khiển Led đơn Bài 4: Lập trình điều khiển đọc số lần nhấn nút Select (kết nối với chân PA7), số lần nhấn lẻ LED (kết nối với chân PA0) sáng, ngược lại LED tắt D1 LED-YELLOW R1 220 U1 10 11 12 13 14 15 16 17 29 30 31 32 33 34 37 38 18 19 20 39 40 41 42 43 45 46 21 22 25 26 27 28 PA0-WKUP PA1 PA2 PA3 PA4 PA5 PA6 PA7 PA8 PA9 PA10 PA11 PA12 PA13 PA14 PA15 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PB8 PB9 PB10 PB11 PB12 PB13 PB14 PB15 NRST PC13_RTC PC14-OSC32_IN PC15-OSC32_OUT STM32F103C6 OSCIN_PD0 OSCOUT_PD1 VBAT BOOT0 44 B- Bài tập Bài tập Lập trình nhấn nút BT1 led Status sáng nhấp nháy lần Bài tập Lập trình nhấn nút BT1 - LED sáng, nhấn nút BT2 LED tắt Bài tập Lập trình nhấn nút BT1 led vàng sáng, nhấn tiếp led tắt lặp lại Bài tập Lập trình điều khiển đèn giao thông bao gồm LED xanh, vàng, đỏ Khi nhấn nút BT1 LED vàng nhấp nháy(tương ứng với chế độ ban đêm), ngược lại sáng chế độ ban ngày ... lập chân vào/ra liệu chân chức đặc biệt ngoại vi, sử dụng ghi điều khiển ngoại vi để lựa chọn chức cho chân Mỗi cổng GPIO vi điều khiển STM32F 103 có: • ghi cấu hình 32-bit: GPIOx_CRL, GPIOx_CRH... LL(Low-Layer) API: Dành cho developer có kiến thức lập trình vi điều khiển 8-bit 3.1 Cơng cụ lập trình thư vi? ??n phát triển ứng dụng 3.1.2 Thư vi? ??n phát triển ứng dụng STM32Cube HAL + LL APIs HAL(Hardware... Cơng cụ lập trình thư vi? ??n phát triển ứng dụng 3.1.2 Thư vi? ??n phát triển ứng dụng STM32Cube HAL + LL APIs 3.1 Cơng cụ lập trình thư vi? ??n phát triển ứng dụng 3.1.2 Thư vi? ??n phát triển ứng dụng