Lý do chọn đề tài Các hệ thống nhúng đang được phát triển trên thế giới ngày càng đòi hỏi sử dụng công nghệ cao, không chỉ đơn giản như các hệ thống điều khiển đèn giao thông, điều khiển các biển quảng cáo hiển thị chữ trên LCD mà yêu cầu quá trình xử lý và điều khiển ngày càng phức tạp hơn, như điều khiển các lò phản ứng, các robot di động, truyền thông đa phương tiện, xử lý âm thanh hình ảnh trên các thiết bị di động cần tay. Các hệ thống nhúng này cần sử dụng các loại vi điều khiển tiên tiến với dung lượng bộ nhớ lớn hơn, với độ rộng bít xử lý từ 16 đến 32 bít nhằm giúp cho quá trình xử lý được sinh động và mềm dẻo hơn các loại vi điều khiển thông dụng 8 bít trước đây. Ở nước ta các thiết bị nhúng chủ yếu nhập khẩu từ nước ngoài, chúng ta chưa làm chủ và tự sản xuất được những loại thiết bị này. Vì vậy với đề tài “Nghiên cứu ứng dụng vi điều khển ARMSTM32 trong đo lường và điều khiển.” sẽ góp phần thúc đẩy việc nghiên cứu và phát triển cho các hệ thống nhúng hiện đại trong tương lai.ARM là vi xử lý sẽ thống trị thị trường thế giới trong một hai năm nữa. Sự tiến bộ thần tốc này nhờ vào những tính năng ưu việt như : an toàn, bảo mật, đặc biệt ít tiêu thụ điện năng nhưng vẫn cho hiệu năng tốt.Dựa vào những nhu cầu tìm hiểu về tính năng và đặc điểm ưu việt của dòng chíp ARM, ý tưởng nghiên cứu và ứng dụng vi điều khiển ARM STM32 cụ thể ở đây là STM32 F411 có lõi xử lý là ARMv7E.Nội dung của luận vănĐề tài : Nghiên cứu ứng dụng vi điều khển ARMSTM32 trong đo lường và điều khiển.Giới thiệu về lịch sử phát triển và ứng dụng của ARMKiến trúc phần cứng của ARMGiới thiệu về công cụ lập trình phát triển ARMLập trình với các tài nguyên của vi điều khiển ARMSTM32.
Trang 1MỤC LỤC
DANH MỤC HÌNH VẼ 2
DANH MỤC BẢNG BIỂU 3
DANH MỤC CÁC TỪ VIẾT TẮT 4
MỞ ĐẦU 5
CHƯƠNG 1 CẤU TRÚC VI ĐIỀU KHIỂN ARM 6
1.1 Lịch sử hình thành và phát triển vi điều khiển ARM 6
1.2 Cấu trúc của ARM 9
1.3 Phân loại 14
1.4 Ứng dụng ARM 17
CHƯƠNG 2 NGOẠI VI CỦA VI ĐIỀU KHIỂN ARM STM32F411VE 19
2.1 Giới thiệu về dòng vi điều khiển STM32 19
2.2 Tổ chức bộ nhớ 23
2.3 Khối tạo dao dộng 25
2.4 Giới thiệu GPIO 27
2.5 Ngắt 31
2.6 TIMER 33
2.7 PWM 35
2.8 ADC 37
2.9 I2C 40
2.10 USART 43
CHƯƠNG 3 LẬP TRÌNH ỨNG DỤNG VỚI NGOẠI VI 47
3.1 Giới thiệu kit STM32F411VE(Discovery) 47
3.2 Cách tạo một project trong Keilc V5 49
3.3 Lập trình với GPIO 50
3.4 Lập trình với Ngắt 54
3.5 Lập trình với TIMER 56
3.6 Lập trình với PWM 60
3.7 Lập trình với ADC 64
3.8 Lập trình với I2C 67
3.9 Lập trình với USART 71
KẾT LUẬN 75
TÀI LIỆU THAM KHẢO 77
Trang 2Danh mục hình vẽ
Hình 1 Kiến trúc đường ống ba tầng 13
Hình 2 Kiến trúc đường ống ba tầng trong tập lệnh có nhiều chu kỳ máy 14
Hình 3 Kiến trúc STM32 nhánh Performance và Access 19
Hình 4 Dưới đậy là sơ đồ khối ARM STM32F411VE 22
Hình 5 Kiến trúc hệ thống 24
Hình 6 Khối Tạo Dao Động 26
Hình 7 Chân xung kết nối nội ngoại 27
Hình 9 Sơ đồ khối của ngắt ngoài 32
Hình 10 Ngắt ngoài của chip STM32F411VE 32
Hình 11 : Hình ảnh xung PWm 35
Hình 12 Sơ đồ khối của ADC 38
Hình 13 Sơ đồ khối của giao tiếp I2C 40
Hình 14 Sơ đồ khối của bộ I2C 41
Hình 15 Sơ đồ khối USART 44
Hình 16 Sơ đồ khối kit STM32F411 48
Hình 17 Màm hình làm việc Keilc v5 49
Hình 18 Giao diện màn hình làm việc 50
Hình 19 Chọn tạo một dự án mới 50
Hình 20 Giao diện chọn chíp 51
Hình 21 Giao diện chíp và chân I/O 51
Hình 22 Sơ đồ xung của STM32F411 52
Hình 23 Cấu hình Chân vào ra 52
Hình 24 Giao diện cấu hình sự án 53
Hình 25 Cấu hình chân cho Ngắt 54
Hình 26 Cấu hình chọn ngắt ở line0 55
Hình 27 Cấu hình chân TIM 56
Hình 28 Điền thông số cho TIM 57
Hình 29 Cấu hình chân cho PWM 60
Hình 30 Cài thông số cho chân LED 61
Hình 31 Điền thông số cho xung PWm 61
Hình 32 Cấu hình chân ADC 64
Hình 33 Cài thông số cho ADC 65
Hình 34 Cấu hình chân cho I2C 67
Hình 35 Thông số cho I2C 68
Hình 36 Chọn ngắt cho i2C 68
Hình 37 Chọn DMA cho I2C 69
Hình 38 Cấu hình chân cho USART 72
Hình 39 Cấu hình tham số cho USART 1 72
Trang 3Danh mục bảng Biểu Bảng 1: Đ c tính c a m t vài máy CISCặ ủ ộ 12Bảng 2: Đặc tính của ba mẫu đầu tiên máy RISC 14Bảng 3 Bảng mức độ ưu tiên ngắt NVIC 36
Trang 4Danh mục các từ viết tắt
ADC Analog to Digital Converter Bộ chuyển đổi tương tự sang số
CMSIS The Cortex Microcontroller Chuẩn giao tiếp phần mềm vi điều khiển
Software Interface Standard CortexDMA Direct Memory Access Sự truy cập bộ nhớ trực tiếp
DSP Digital Signal Processors Bộ xử lý tín hiệu số
DRAM Dynamic Random Access Bộ nhớ truy cập ngẫu nhiên động
MemoryEEPROM Electrically Erasable Bộ nhớ chỉ đọc có thể xóa được bằng
Programmable Read-Only điệnMemory
EPROM Erasable Programmable Read- Bộ nhớ chỉ để đọc có khả năng lập trình
GIPO General Purpose Đầu vào hoặc ra đa mục đích
Input/OutputCommunicationsPWM Pulse Width Modulation Bộ điều chế độ rộng xung
RAM Random Access Memory Bộ nhớ truy nhập ngẫu nhiên
SD Card Secure Digital Card Thẻ nhớ dữ liệu số
SPI Serial Peripheral Interface Giao tiếp ngoại vi nối tiếp
TIC Test Interface Controller Bộ giao tiếp kiểm thử
UART Universal Asynchronous Bộ thu/phát không đồng bộ đa năng
Receiver/Transmitter
Trang 5MỞ ĐẦU
Lý do chọn đề tài
Các hệ thống nhúng đang được phát triển trên thế giới ngày càng đòi hỏi sử dụngcông nghệ cao, không chỉ đơn giản như các hệ thống điều khiển đèn giao thông, điềukhiển các biển quảng cáo hiển thị chữ trên LCD mà yêu cầu quá trình xử lý và điềukhiển ngày càng phức tạp hơn, như điều khiển các lò phản ứng, các robot di động,truyền thông đa phương tiện, xử lý âm thanh hình ảnh trên các thiết bị di động cần tay.Các hệ thống nhúng này cần sử dụng các loại vi điều khiển tiên tiến với dung lượng bộnhớ lớn hơn, với độ rộng bít xử lý từ 16 đến 32 bít nhằm giúp cho quá trình xử lý đượcsinh động và mềm dẻo hơn các loại vi điều khiển thông dụng 8 bít trước đây Ở nước
ta các thiết bị nhúng chủ yếu nhập khẩu từ nước ngoài, chúng ta chưa làm chủ và tựsản xuất được những loại thiết bị này Vì vậy với đề tài “Nghiên cứu ứng dụng vi điềukhển ARM-STM32 trong đo lường và điều khiển.” sẽ góp phần thúc đẩy việc nghiêncứu và phát triển cho các hệ thống nhúng hiện đại trong tương lai
ARM là vi xử lý sẽ thống trị thị trường thế giới trong một hai năm nữa Sự tiến
bộ thần tốc này nhờ vào những tính năng ưu việt như : an toàn, bảo mật, đặc biệt ít tiêuthụ điện năng nhưng vẫn cho hiệu năng tốt
Dựa vào những nhu cầu tìm hiểu về tính năng và đặc điểm ưu việt của dòng chípARM, ý tưởng nghiên cứu và ứng dụng vi điều khiển ARM STM32 cụ thể ở đây làSTM32 F411 có lõi xử lý là ARMv7E
Nội dung của luận văn
Đề tài : Nghiên cứu ứng dụng vi điều khển ARM-STM32 trong đo lường và điềukhiển
- Giới thiệu về lịch sử phát triển và ứng dụng của ARM
- Kiến trúc phần cứng của ARM
- Giới thiệu về công cụ lập trình phát triển ARM
- Lập trình với các tài nguyên của vi điều khiển ARM-STM32
Chương 1 CẤU TRÚC VI ĐIỀU KHIỂN ARM 1.1 Lịch sử hình thành và phát triển vi điều khiển ARM
Trang 6Cuối năm 1978, Hermann Hauser và Chris Curry đã thành lập Công ty AcornComputers, Ltd ở Cambridge - Anh quốc hãng này nổi tiếng với họ vi xử lý kiến trúcarm được dùng khá phổ biến trong các thiết bị nhúng và các ứng dụng cầm tay nhờvào đặc tính ưu việt là ít tiêu thụ điện năng hầu hết máy điện thoại di động vàmáy pda hiện nay đều có cpu theo kiến trúc arm.
Sau bước khởi đầu nghiên cứu và phát triển, Hauser và Curry đã chọn một bộ xử
lý công nghệ MOS 6502 cho dự án - một trong những bộ vi xử lý 8 bít giá rẻ nhất thịtrường tại thời điểm đó trong khi các tính năng như dễ lập trình, tốc độ xử lý, độ tincậy tương đương với các bộ vi xử lý khác Ngoài ra, 6502 cũng nổi tiếng với khả năng
xử lý ngắt tốc độ chậm của nó, làm nó dễ dàng xử lý các sự kiện ngắt từ bên ngoài
6502 có thiết kế đơn giản, chỉ có 3.510 transistor (so với 6.500 transistor trong vi xử lý
8085, 8.500 transistor trong Z80) 6502 xuất hiện trong nhiều thương hiệu máy tínhnổi tiếng trong lịch sử máy tính như Apple II, Atari 2600 và Commodore VIC-20 Sau đó, Arcon tiếp tục thắng các hợp đồng và tiếp tục sử dụng 6502 cho các dự
án của mình Với kinh nghiệm về vi xử lý 6502, Acorn đã phát triển nên Acorn System
1 - được thiết kế bởi Sophie Ilson dựa trên 6502 Nó bao gồm hai bảng mạch: bảngphía trên chứa các nút bấm hexa và một màn hình 7 thanh nhỏ, hiển thị dữ liệu, bảngmạch dưới chứa bộ vi xử lý và các mạch điện hỗ trợ Một bộ phần mềm giám sát đơngiản trong ROM cho phép soạn thảo bộ nhớ và phần mềm được lưu trữ trong các băngcassette
Vào tháng 4 năm 1985 Nhóm thiết kế hoàn thành việc phát triển mẫu gọi
là ARM1, Chip ARM1 được xây dựng từ các khối chức năng, mỗi khối có một mục
đích khác nhau Các thanh ghi lưu trữ dữ liệu, ALU (đơn vị logic số học) thực hiện sốhọc đơn giản, bộ giải mã lệnh xác định cách xử lý từng lệnh, v.v So với hầu hết các bộ
xử lý, bố cục của chip rất đơn giản, với mỗi khối chức năng có thể nhìn thấy rõ ràng.(So sánh, cách bố trí các chip như 6502 hoặc Z-80 được tối ưu hóa bằng tay để tránhmọi không gian bị lãng phí Trong các chip này, các khối chức năng được đặt cạnhnhau, khiến việc lấy ra các mảnh khó hơn.)
Năm 1986, nhóm hoàn thành sản phẩm ‘’thực’’ gọi là ARM2 ARM2 có tuyến
dữ liệu 32-bit, không gian địa chỉ 26-bit tức cho phép quản lý đến 64 Mbyte địa chỉ và
16 thanh ghi 32-bit Một trong những thanh ghi này đóng vai trò là bộ đếm chương
Trang 7trình với 6 bit cao nhất và 2 bit thấp nhất lưu giữ các cờ trạng thái của bộ vi xử lý Cóthể nói ARM2 là bộ vi xử lý 32-bit khả dụng đơn giản nhất trên thế giới, với chỉ gồm30.000 transistor (so với bộ vi xử lý lâu hơn bốn năm của Motorola là 68000 vớikhoảng 68.000 transistor)
Thế hệ sau, nâng cấp bộ xử lý IFEL ARM3 cho Acorn Archimedes
Bản nâng cấp bộ xử lý IFEL ARM3 thay thế CPU ARM2 được cắm trong dảimáy tính Archimedes chạy ở tốc độ 8 MHz Một bảng con được gắn vào ổ cắm ARM2của Archimedes có CPU ARM3 chạy ở tốc độ 25 MHz cung cấp thông lượng MIPStăng gần gấp ba lần Việc tăng hiệu suất đạt được bằng cách sử dụng bộ đệm 4KB trên
bo m ch và kh năng c a ARM3 đ ch y t c đ xung nh p nhanh h n.ạ ả ủ ể ạ ở ố ộ ị ơ
Kết quả sự hợp tác này là ARM6 Mẫu đầu tiên được công bố vào năm 1991 và
Apple đã sử dụng bộ vi xử lý ARM 610 dựa trên ARM6 làm cơ sở cho PDA hiệuApple Newton Vào năm 1994, Acorn dùng ARM 610 làm CPU trong các máy vitính Risc PC của họ
Thế hệ thành công nhất có lẽ là ARM7TDMI với hàng trăm triệu lõi được sửdụng trong các máy điện thoại di động, hệ thống video game cầm tay, vàSega Dreamcast
Hãng DEC cũng bán giấy phép về lõi cấu trúc ARM (đôi khi chúng ta có thể bịnhầm lẫn vì họ cũng sản xuất ra DEC Alpha) và sản xuất ra thế hệ Strong ARM Hoạtđộng ở tần số 233 MHz mà CPU này chỉ tiêu tốn khoảng 1 watt công suất (những đờisau còn tiêu tốn ít công suất hơn nữa) Sau những kiện tụng, Intel cũng được chấpnhận sản xuất ARM và Intel đã nắm lấy cơ hội này để bổ sung vào thế hệ giàcỗi i960 của họ bằng Strong ARM Từ đó, Intel đã phát triển cho chính họ một sảnphẩm chức năng cao gọi tên là Xscale
1.1.1 Vi xử lý ARM.
Vi xử lý ARM đầu tiên ra đời năm 1985 với thiết kế RISC viết tắt của reducedinstruction set computer máy tính có tập lệnh rút gọn, các vi xử lý ARM được sử dụngchủ yếu trong các điện thoại di động
1.1.2 Vi điều khiển ARM.
Trang 8Cấu trúc ARM (viết tắt từ tên gốc là Acorn RISC Machine) là một loại cấu trúc
vi xử lý 32-bit kiểu RISC được sử dụng rộng rãi trong các thiết kế nhúng Được pháttriển lần đầu trong một dự án của công ty máy tính Acorn Do có đặc điểm tiết kiệmnăng lượng, các bộ CPU ARM chiếm ưu thế trong các sản phẩm điện tử di động, màvới các sản phẩm này việc tiêu tán công suất thấp là một mục tiêu thiết kế quan trọnghàng đầu
Ngày nay, hơn 75% CPU nhúng 32-bit là thuộc họ ARM, điều này khiến ARMtrở thành cấu trúc 32-bit được sản xuất nhiều nhất trên thế giới Một nhánh nổi tiếngcủa họ ARM là các vi xử lý Xscale của Intel Giới thiệu về vi điều khiển LPC2148: Làdòng vi điều khiển ARM được sản xuất bởi hãng Philips Tính năng:
- Vi điều khiển 16/32-bit ARM7TDMI-S
- Khả năng thiết lập chế độ ưu tiên và định địa chỉ cho ngắt
- 45 chân GPIO vào ra đa dụng
- 9 chân ngắt ngoài (tích cực cạnh hoặc tích cực mức)
- CPU clock đạt tối đa 60MHz thông qua bộ PLL lập trình được
- Xung PLCK hoạt động độc lập
On-chip Flash Memory: LPC 2148 có 512K bộ nhớ Flash có thể được dùng đểlưu trữ code và dữ liệu Trong khi thực thi ứng dụng, vẫn có thể xóa hoặc lập trìnhFlash thông qua IAP (In Application Programming) Khi đó trình loader trên chipđược sử dụng, bộ nhớ trống còn lại là 500K Bộ nhớ Flash có thể ghi xóa được ít nhất
100000 lần, lưu trữ dữ liệu đến 20 năm On-chip Static RAM: LPC 2148 có 32K RAMtĩnh, có thể được truy xuất theo đơn vị byte, half word & word Bộ điều khiển SRAM
sử dụng phương thức write-back buffer để ngăn chặn tình trạng treo CPU khi có thaotác ghi Bộ đệm luôn giữ dữ liệu cuối cùng từ chương trình gửi tới bộ nhớ Dữ liệu chỉđược ghi vào SRAM khi có 1 thao tác ghi khác từ chương trình Lập trình cho ARM:
Trang 9Ngôn ngữ lập trình chính cho ARM hiện nay là ngôn ngữ C Các trình biên dịch choARM thường được dùng:
- Keil ARM
- IAR
- HTPICC for ARM
- ImageCraft ICCV7 for ARM
1.2 Cấu trúc của ARM
1.2.1 Kiến trúc thiết kế RISC của ARM
ARM xây dựng bộ vi xử lý theo kiến trúc RISC những năm 1980 để sử dụngtrong các máy tính cá nhân của mình Những kiến trúc RISC đầu tiên: của IBM (IBM801) của Berkeley (RISC1 của Patterson) và của Stanford (MIPS của Hennessy)
CISC - Complex Instruction Set Computer
Bảng 1: Đ c tính c a m t vài máy CISCặ ủ ộ
kiến trúc với tập lệnh phức tạp CISC (Complex Instruction Set Computer) đượcnghĩ ra từ những năm 1960 Vào thời kỳ này, người ta nhận thấy các chương trình dịchkhó dùng các thanh ghi, rằng các vi lệnh được thực hiện nhanh hơn các lệnh và cầnthiết phải làm giảm độ dài các chương trình Các đặc tính nầy khiến người ta ưu tiênchọn các kiểu ô nhớ - ô nhớ và ô nhớ - thanh ghi, với những lệnh phức tạp và dùngnhiều kiểu định vị Điều này dẫn tới việc các lệnh có chiều dài thay đổi và như thế thìdùng bộ điều khiển vi chương trình là hiệu quả nhất Bảng 1 cho các đặc tính của vàimáy CISC tiêu biểu Ta nhận thấy cả ba máy đều có điểm chung là có nhiều lệnh, các
Trang 10lệnh có chiều dài thay đổi Nhiều cách thực hiện lệnh và nhiều vi chương trình đượcdùng.
Ưu điểm:
- Chương trình ngắn hơn so với kiến trúc RISC
- Số lệnh để thực hiện chương trình ít hơn
- Khả năng thâm nhập bộ nhớ dễ dàng hơn
- Các bộ xử lý CISC trợ giúp mạnh hơn các ngôn ngữ cao cấp nhờ có tập lệnhphức tạp Hãng Honeywell đã chế tạo một máy có một lệnh cho mỗi động từ của ngônngữ COBOL
Trang 11(không có ô nhớ vi chương trình), có chiều dài các lệnh cố định (32 bits), có một kiểuthi hành lệnh (kiểu thanh ghi - thanh ghi) và chỉ có một số ít lệnh.
Bảng 2: Đặc tính của ba mẫu đầu tiên máy RISC
Tóm lại, ta có thể định nghĩa mạch xử lý RISC bởi các tính chất sau:
- Có một số ít lệnh (thông thường dưới 100 lệnh )
- Có một số ít các kiểu định vị (thông thường hai kiểu: định vị tức thì và định vịgián tiếp thông qua một thanh ghi)
- Có một số ít dạng lệnh (một hoặc hai)
- Các lệnh đều có cùng chiều dài
- Chỉ có các lệnh ghi hoặc đọc ô nhớ mới thâm nhập vào bộ nhớ
- Dùng bộ tạo tín hiệu điều khiển bằng mạch điện để tránh chu kỳ giải mã các vilệnh làm cho thời gian thực hiện lệnh kéo dài
- Bộ xử lý RISC có nhiều thanh ghi để giảm bớt việc thâm nhập vào bộ nhớ trong
- Ngoài ra các bộ xử lý RISC đầu tiên thực hiện tất cả các lệnh trong một chu kỳmáy
Bộ xử lý RISC có các ưu điểm sau :
- Diện tích của bộ xử lý dùng cho bộ điều khiển giảm từ 60% (cho các bộ xử lýCISC) xuống còn 10% (cho các bộ xử lý RISC) Như vậy có thể tích hợp thêm vàobên trong bộ xử lý các thanh ghi, các cổng vào ra và bộ nhớ cache
Trang 12- Tốc độ tính toán cao nhờ vào việc giải mã lệnh đơn giản, nhờ có nhiều thanh ghi(ít thâm nhập bộ nhớ), và nhờ thực hiện kỹ thuật ống dẫn liên tục và có hiệu quả(các lệnh đều có thời gian thực hiện giống nhau và có cùng dạng).
- Thời gian cần thiết để thiết kế bộ điều khiển là ít Điều này góp phần làm giảm chiphí thiết kế
- Bộ điều khiển trở nên đơn giản và gọn làm cho ít rủi ro mắc phải sai sót mà ta gặpthường trong bộ điều khiển
- Trước những điều lợi không chối cãi được, kiến trúc RISC có một số bất lợi
- Các chương trình dài ra so với chương trình viết cho bộ xử lý CISC Điều này docác nguyên nhân sau :
- Cấm thâm nhập bộ nhớ đối với tất cả các lệnh ngoại trừ các lệnh đọc và ghi vào bộnhớ Do đó ta buộc phải dùng nhiều lệnh để làm một công việc nhất định
- Cần thiết phải tính các địa chỉ hiệu dụng vì không có nhiều cách định vị
- Tập lệnh có ít lệnh nên các lệnh không có sẵn phải được thay thế bằng một chuỗilệnh của bộ xử lý RISC
- Các chương trình dịch gặp nhiều khó khăn vì có ít lệnh làm cho có ít lựa chọn đểdiễn dịch các cấu trúc của chương trình gốc Sự cứng nhắc của kỹ thuật ống dẫncũng gây khó khăn
- Có ít lệnh trợ giúp cho ngôn ngữ cấp cao
Các bộ xử lý CISC trợ giúp mạnh hơn các ngôn ngữ cao cấp nhờ có tập lệnhphức tạp Hãng Honeywell đã chế tạo một máy có một lệnh cho mỗi động từ của ngônngữ COBOL
Các tiến bộ gần đây cho phép xếp đặt trong một vi mạch, một bộ xử lý RISC nền
và nhiều toán tử chuyên dùng
1.2.2 Kiến trúc đường ống
Kiến trúc đường ống là kiến trúc cơ bản trong vi điều khiển ARM, hình 1.7 mô tảkiến trúc đường ống ba tầng để minh họa các bước thực thi lệnh: fetch – decode –excute (nhận lệnh – giải mã – thực thi)
Trang 13Trong kiến trúc đường ống, khi một lệnh đang được thực thi thì lệnh thứ hai đangđược giải mã và lệnh thứ ba bắt đầu được nạp từ bộ nhớ Với kỹ thuật này thì tốc độ
xử lý tăng lên rất nhiều trong một chu kỳ máy
Trong hình 1.7 cho ta thấy được một chuỗi ba lệnh được nạp, giải mã, và thực thibởi bộ xử lý Mỗi lệnh có một chu trình duy nhất để hoàn thành sau khi đường ốngđược lấp đầy Tập lệnh được đặt vào các đường ống liên tục Trong chu kỳ đầu tiên lõi
xử lý nạp lệnh ADD (cộng) từ bộ nhớ Trong chu kỳ thứ hai lõi tìm nạp các lệnh SUB(trừ) và giải mã lệnh ADD Trong chu kỳ thứ ba, cả hai lệnh SUB và ADD được dichuyển dọc theo đường ống Lệnh ADD được thực thi, lệnh SUB được giải mã, vàlệnh CMP (so sánh) được nạp Quá trình này được gọi là lấp đầy đường ống Kiến trúcđường ống cho phép lõi xử lý thực hiện lệnh trong mỗi chu kỳ
Khi tăng chiều dài đường ống, số lượng công việc thực hiện ở từng công đoạngiảm, điều này cho phép bộ xử lý phải đạt được đến một tần số hoạt động cao hơn đểtăng hiệu suất thực thi Thời gian trễ của hệ thống cũng sẽ tăng lên bởi vì có nhiều chu
kỳ hơn để lấp đầy đường ống trước khi lõi xử lý có thể thực thi một lệnh Chiều dàiđường ống tăng lên cũng có nghĩa là dữ liệu cũng có thể sẽ phải phụ thuộc giữa cáccông đoạn nhất định
ARM giới thiệu và đưa ra kiến trúc đường ống có năm tác vụ, với vùng nhớ dữliệu và chương trình riêng biệt Từ kiến trúc lệnh có ba tác vụ được chia nhỏ lại thànhnăm tác vụ cũng làm cho mỗi chu kỳ xung nhịp sẽ thực hiện một công việc đơn giảnhơn ở mỗi công đoạn, cho phép có thể tăng chu kỳ xung nhịp của hệ thống
Hình 1 Kiến trúc đường ống ba tầng.
Trang 14Sự tách rời bộ nhớ chương trình và bộ nhớ dữ liệu cũng cho phép giảm đáng kể tàinguyên chiếm của mỗi lệnh trong một chu kỳ máy.
Thời gian để bộ xử lý thực thi một chương trình được tính bởi công thức:
Tpro = N inst xCPI
f clk
Trong đó:
CPI là số xung nhịp trung bình cần cho mỗi lệnh;
Ninst là số lệnh thực thi một chương trình (cố định);
fclk là tần số xung nhịp
Với công thức trên thì có hai cách để giảm thời gian thực thi một chương trình:Tăng tần số xung nhịp: điều này đòi hỏi trạng thái của mỗi nhiệm vụ trong dòngchảy lệnh đơn giản, và do đó số tác vụ sẽ tăng thêm
Giảm CPI: điều này đòi hỏi mỗi lệnh cần nhiều dòng chảy lệnh hơn với tác vụkhông đổi, hoặc các tác vụ cần đơn giản hơn, hoặc kết hợp cả hai lại với nhau
1.3 Phân loại
Kiến trúc Biến thể CTy sản xuất Kiến trúc vĩ mô (lõi)
Hình 2 Kiến trúc đường ống ba tầng trong tập lệnh có nhiều chu kỳ máy.
Trang 15ARMv1 Acorn ARM1
ARMv6
ARMv6-M ARM Cortex-M0, Cortex-M1
ARMv7 ARMv7-A ARM Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9,
Cortex-A12, Cortex-A15, Cortex-A17 Apple Swift
Marvell Sheeva PJ4 Qualcomm Scorpion, Krait
Trang 16ARMv7-R ARM Cortex-R4, Cortex-R5, Cortex-R7
ARMv7-M ARM Cortex-M3
Phytium Xiaomi Samsung M1, M2, M3 Qualcomm Kryo, Falkor
ARMv8.1 ARMv8.1-A Cavium Vulcan
ARMv8.2
Cortex-A55, Cortex-A75, Cortex-A76 Neoverse N1, Neoverse E1
Ampere Quicksilver
Trang 17Nvidia Carmel Samsung M4, M5
ARMv8.3 ARMv8.3-A Qualcomm Saphira
1.4 Ứng dụng ARM
Thẻ nhớ (Flash Cards & Keys):
Những sản phẩm thẻ nhớ (flash cards) đòi hỏi chi phí rất thấp, tiêu thụ điệnnăng thấp và độ bảo mật cao. Đa số các lõi CPU của ARM có thích thước nhỏ, hiệuquả sử dụng cao, mật độ mã (code) tối ưu, và cung cấp một một giải pháp hấp dẫn nhấtcho thị trường này Khi kết hợp ARM với Discretix 'CryptoFlash ™ bảo mật IP cácnhà thiết kế đạt được một giải pháp nhỏ gọn, nhanh, mạnh mẽ và đã được chứng minhcho nhu cầu bảo mật của họ
Hệ thống mạng trong nhà (Home Networking):
Có nhiều chipset dùng cấu trúc ARM đang được sử dụng trong một loạt các thiết
bị thông dụng hiện có và các thiết bị SOHO, như routers, cable modems, DSL modemsand gateways Ngoài ra, các ARM Partners còn cung cấp một số phần mềm ứng dụng
để tăng tốc độ phát triển các giải pháp đầu cuối
Mạng lưu trữ (Storage Networking:)
Các thiết bị sử dụng ARM có thể được tìm thấy trong một loạt các thiết bị hạtầng cơ sở lưu trữ mạng, từ các thiết bị tiêu dung mới NAS đến các ứng dụng cao cấpnhư Fibre Channel và iSCSI Bộ vi xử lý ARM được trang bị cơ cấu nạp tắt của bộ mãiSCSI và HBAs (Host Bus Adapter), trong khi sự dẩn đầu các giải pháp PHY truyềnnối tiếp tốc độ cao đang cung cấp các kết nối tốc độ cao Ngày nay, các chip cần phảitruyền được dữ liệu trong các mạng tốc độ cực cao Thị phần của HBA trang bị ARMchiếm khoảng 50% thị trường kênh sợi HBA (fibre channel HBA)
VoIP
ARM hỗ trợ và xử lý VoIP đáp ứng được dải phổ rộng của các loại sản phẩm, từcác line card trong các thiết bị hạ tầng cơ sở đến điện thoại để bàn Các lõi vi xử lý đa
Trang 18dạng của ARM thì lý tưởng để đáp ứng dược các nhu cầu nhiệm vụ rộng lớn của thịtrường này Đối với các sản phẩm VoIP công nghệ cao, bao gồm các cổng cơ sở bằnggiọng nói, có nhiều loại chipset đang kết nối lõi ARM với các công cụ xử lý tín hiệu sốhoặc một bộ xử lý DSP để cho phép nhân số lượng kênh thoại lên nhiều lần
Mạng không dây (Wireless Networking):
Không gian kết nối mạng không dây đòi hỏi chi phí cực thấp, thiết bị tiêu thụđiện năng thấp để làm tăng khả năng đáp ứng Trong khi các nhà sản xuất chip WLANliên tục đổi mới về tính năng và chất lượng, thì các nhà sản xuất chip WiMax và UWBluôn tìm cách giảm giá nhanh chóng thông qua việc sử dụng hiệu quả kích thướcchip và đổi mới cấu trúc ARM đang dẩn đầu với giải pháp đỉnh cao 802.11, và đangcộng tác với UWB, WiMax và các nhà cung cấp giải pháp 802.11n để làm giảm mứctiêu thụ điện năng và tiết kiệm chi phí cần thiết cho các giải pháp không dây trongtương lai
Trang 19Chương 2 NGOẠI VI CỦA VI ĐIỀU KHIỂN ARM STM32F411VE 2.1 Giới thiệu về dòng vi điều khiển STM32
STM32 là vi điều khiển do hãng ST Microelectronic dựa trên nền tảng lõi ARMCortex-M4 thế hệ mới do hãng ARM thiết kế Lõi ARM Cortex-M4 là sự cải tiến từ lõiARMv7E-M truyền thống từng mang lại thành công vang dội cho công ty ARM
ST đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9, nhưngSTM32 là một bước tiến quan trọng trên đường cong chi phí và hiệu suất(price/performance), giá chỉ gần 1 Euro với số lượng lớn, STM32 là sự thách thức thật sựvới các vi điều khiển 8 và 16-bit truyền thống STM32 đầu tiên gồm 14 biến thể khácnhau, được phân thành hai dòng: dòng Performance có tần số hoạt động của CPU lên tới100Mhz và dòng Access có tần số hoạt động lên tới 50Mhz Các biến thể STM32 tronghai nhóm này tương thích hoàn toàn về cách bố trí chân (pin) và phần mềm, đồng thờikích thước bộ nhớ FLASH ROM có thể lên tới 512K và 128K SRAM
Hình 3 Kiến trúc STM32 nhánh Performance và Access
Sự tinh vi
Các ngoại vi của STM32 cũng giống như những vi điều khiển khác, như hai bộchuyển đổi ADC, timer, I2C, SPI, CAN, USB và RTC
Bộ ADC 12-bit có tích hợp một cảm biến nhiệt độ để tự động hiệu chỉnh khi nhiệt
độ thay đổi và hỗ trợ nhiều chế độ chuyển đổi Mỗi bộ định thời có 4 khối capture
Trang 20compare (dùng để bắt sự kiện với tính năng input capture và tạo dạng sóng ở ngõ ra vớioutput compare), mỗi khối định thời có thể liên kết với các khối định thời khác để tạo ramột mảng các định thời tinh vi hơn Một bộ định thời cao cấp chuyên hỗ trợ điều khiểnđộng cơ, với 6 đầu ra PWM với dead time (khoảng thời gian được chèn vào giữa hai đầutín hiệu xuất PWM bù nhau trong điều khiển mạch cầu H) lập trình được và một đườngbreak input (khi phát hiện điều kiện dừng khẩn cấp) sẽ buộc tín hiệu PWM sang một trạngthái an toàn đã được cài sẵn Ngoại vi nối tiếp SPI có một khối kiểm tổng (CRC) bằngphần cứng cho 8 và 16 word hỗ trợ tích cực cho giao tiếp thẻ nhớ SD hoặc MMC.
STM32 có hỗ trợ thêm tối đa 12 kênh DMA (Direct Memory Access) Mỗi kênh cóthể được dùng để truyền dữ liệu đến các thanh ghi ngoại vi hoặc từ các thanh ghi ngoại vi
đi với kích thước từ (word) dữ liệu truyền đi có thể là 8/16 hoặc 32-bit Mỗi ngoại vi cóthể có một bộ điều khiển DMA (DMA controller) đi kèm dùng để gửi hoặc đòi hỏi dữ liệunhư yêu cầu Một bộ phân xử bus nội (bus arbiter) và ma trận bus (bus matrix) tối thiểuhoá sự tranh chấp bus giữa truy cập dữ liệu thông qua CPU (CPU data access) và cáckênh DMA Điều đó cho phép các đơn vị DMA hoạt động linh hoạt, dễ dùng và tự độngđiều khiển các luồng dữ liệu bên trong vi điều khiển
STM32 là một vi điều khiển tiêu thụ năng lượng thấp và đạt hiệu suất cao Nó có thểhoạt động ở điện áp 2V, chạy ở tần số 50MHz và dòng tiêu thụ chỉ có 36mA với tất cả cáckhối bên trong vi điều khiển đều được hoạt động Kết hợp với các chế độ tiết kiệm nănglượng của Cortex, STM32 chỉ tiêu thụ 2μA khi ở chế độ Standby
Sự an toàn
Ngày nay các ứng dụng hiện đại thường phải hoạt động trong môi trường khắc khe,đòi hỏi tính an toàn cao, cũng như đòi hỏi sức mạnh xử lý và càng nhiều thiết bị ngoại vitinh vi Để đáp ứng các yêu cầu khắc khe đó, STM32 cung cấp một số tính năng phầncứng hỗ trợ các ứng dụng một cách tốt nhất Chúng bao gồm một bộ phát hiện điện ápthấp, một hệ thống bảo vệ xung Clock và hai bộ Watchdogs Bộ đầu tiên là mộtWatchdog cửa sổ (windowed watchdog) Watchdog này phải được làm tươi trong mộtkhung thời gian xác định Nếu nhấn nó quá sớm, hoặc quá muộn, thì Watchdog sẽ kíchhoạt Bộ thứ hai là một Watchdog độc lập (independent watchdog), có bộ dao động bên
Trang 21ngoài tách biệt với xung nhịp hệ thống chính Hệ thống bảo vệ xung nhịp có thể phát hiệnlỗi của bộ dao động chính bên ngoài (thường là thạch anh) và tự động chuyển sang dùng
bộ dao động nội RC 8MHz
Tính bảo mật
Bộ nhớ Flash của STM32 có thể được khóa để chống truy cập đọc Flash thông quacổng Debug Khi tính năng bảo vệ đọc được kích hoạt, bộ nhớ Flash cũng được bảo vệchống ghi để ngăn chặn mã không tin cậy được chèn vào bảng vector ngắt Hơn nữa bảo
vệ ghi có thể được cho phép trong phần còn lại của bộ nhớ Flash STM32 cũng có mộtđồng hồ thời gian thực và một khu vực nhỏ dữ liệu trên SRAM được nuôi nhờ nguồn pin.Khu vực này có một đầu vào chống giả mạo (anti-tamper input), có thể kích hoạt một sựkiện ngắt khi có sự thay đổi trạng thái ở đầu vào này Ngoài ra một sự kiện chống giả mạo
sẽ tự động xóa dữ liệu được lưu trữ trên SRAM được nuôi bằng nguồn pin
Phát triển phần mềm
Nếu bạn đã sử dụng một vi điều khiển dựa trên lõi ARM, thì các công cụ phát triểncho ARM hiện có đã được hỗ trợ tập lệnh Thumb-2 và dòng Cortex Ngoài ra ST cũngcung cấp một thư viện điều khiển thiết bị ngoại vi, một bộ thư viện phát triển USB như làmột thư viện ANSI C và mã nguồn đó là tương thích với các thư viện trước đó được công
bố cho vi điều khiển STR7 và STR9 Dòng Cortex-M3 cũng đi kèm với một hệ thống gỡlỗi hoàn toàn mới gọi là CoreSight Truy cập vào hệ thống CoreSight thông qua cổng truycập Debug (Debug Access Port), cổng này hỗ trợ kết nối chuẩn JTAG hoặc giao diện 2dây (serial wire-2 Pin), cũng như cung cấp trình điều khiển chạy gỡ lỗi, hệ thốngCoreSight trên STM32 cung cấp hệ thống điểm truy cập(data watchpoint) và một công cụtheo dõi (instrumentation trace)
Trang 22Hình 4 Dưới đậy là sơ đồ khối ARM STM32F411VE
Sơ đồ chân
Sơ đồ chân dạng LQFP (100 chân ) bốn hàng chân dán vỏ mỏng
Trang 23Sơ đồ chân dạng UFBGA (100 chân ) bốn hàng chân dán dưới đế.
2.2 Tổ chức bộ nhớ
Bộ nhớ của VĐK ARM STM32F411VE gồm 2 loại:
Trang 24Bộ nhớ trương trình (program memory)
Bộ nhớ dữ liệu RAM ( data RAM)
Trong STM32F411, hệ thống chính bao gồm ma trận bus AHB đa lớp 32 bit kết nối
Ma trận xe buýt cung cấp quyền truy cập từ masters đến slaves, cho phép truy cập đồngthời và hoạt động hiệu quả ngay cả khi một số thiết bị ngoại vi tốc độ cao hoạt động đồngthời
Hình 5 Kiến trúc hệ thống
I-bus
Bus này kết nối Bus Hướng dẫn của Cortex ® -M4 với lõi FPU với BusMatrix Bus này được sử dụng bởi lõi để lấy hướng dẫn Mục tiêu của Bus này là một bộ nhớ chứa mã (bộ nhớ Flash nội bộ / SRAM)
D-bus
Bus này kết nối cơ sở dữ liệu của Cortex ® -M4 với FPU với BusMatrix Bus này là được
sử dụng bởi lõi để tải theo nghĩa đen và truy cập gỡ lỗi Mục tiêu của chiếc xe buýt này làmột bộ nhớ chứa mã hoặc dữ liệu (bộ nhớ Flash bên trong / SRAM)
S-bus
Trang 25Bus này kết nối bus hệ thống của Cortex ® -M4 với lõi FPU với BusMatrix Điều này busđược sử dụng để truy cập dữ liệu nằm trong thiết bị ngoại vi hoặc SRAM Hướng dẫncũng có thể là tìm nạp trên bus này (kém hiệu quả hơn ICode) Mục tiêu của xe buýt này
là nội bộ SRAM1, các thiết bị ngoại vi AHB1 bao gồm các thiết bị ngoại vi APB và cácthiết bị ngoại vi AHB2
bộ nhớ flash
Giao diện bộ nhớ Flash quản lý CPU AHB I-Code và D-Code truy cập vào bộ nhớ Flash
Nó thực hiện các thao tác xóa và lập trình Flash và đọc và đọc viết cơ chế bảo vệ Nó tăngtốc thực thi mã với một hệ thống hướng dẫn dòng tải trước và bộ đệm Bộ nhớ Flash đượcsắp xếp như sau: Một khối bộ nhớ chính được chia thành các lĩnh vực Bộ nhớ hệ thống
mà thiết bị khởi động ở chế độ khởi động Bộ nhớ hệ thống 512 byte OTP (lập trình mộtlần) cho dữ liệu người dùng Tùy chọn byte để cấu hình bảo vệ đọc và ghi, mức BOR,watchdog phần mềm / phần cứng và đặt lại khi thiết bị ở chế độ Chờ hoặc Dừng
2.3 Khối tạo dao dộng
Ba nguồn xung khác nhau có thể được sử dụng để điều khiển xung hệ thống (SYSCLK):
- xung dao động HSI
- xung dao động HSE
- xung chính PLL (PLL)
Các thiết bị có hai nguồn xung thứ cấp sau:
- RC nội bộ tốc độ thấp 32 kHz (LSI RC) điều khiển cơ quan giám sát độc lập và,tùy chọn, RTC được sử dụng để Tự động đánh thức từ chế độ Dừng / Chờ
- Tinh thể ngoài tốc độ thấp 32,768 kHz (tinh thể LSE) tùy chọn điều khiển RTCxung (RTCCLK)
Mỗi nguồn xung có thể được bật hoặc tắt độc lập khi không sử dụng, để tối ưu hóa sự tiêuthụ năng lượng
Trang 26Hình 6 Khối Tạo Dao Động
Bộ điều khiển xung cung cấp mức độ linh hoạt cao cho ứng dụng trong việc lựa chọn tinhthể ngoài hoặc bộ dao động để chạy lõi và các thiết bị ngoại vi ở tần số cao nhất và, đảmbảo tần số thích hợp cho các thiết bị ngoại vi cần xung cụ thể như USB OTG FS, I2S và
xung HSE
Tín hiệu xung bên ngoài tốc độ cao (HSE) có thể được tạo từ hai nguồn xung khả thi:
- HSE cộng hưởng tinh thể / gốm bên ngoài
Trang 27- xung người dùng bên ngoài HSE
Bộ cộng hưởng và tụ điện tải phải được đặt càng gần càng tốt với chân dao động để giảmthiểu biến dạng đầu ra và thời gian ổn định khởi động Các tải giá trị điện dung phải đượcđiều chỉnh theo bộ dao động đã chọn
Hình 7 Chân xung kết nối nội ngoại
2.4 Giới thiệu GPIO
VDK stm32f411VE có 84 chân I/O cđược chia làm 5 cổng là PortA, PORTC,PORTD, PORTE là có 16 chân và PORTB có 15 chân Các chân I/O của vdkstm32f411ve có nhiều chức năng, nó có thể được thiết lập là chân I/O dữ liệu hay là chânchức năng đặc biệt của các bộ ngoại vi, sử dụng các thanh ghi điều khiển của ngoại vi đểlựa chọn chức năng của các chân
Cấu trúc chung của một chân vào ra
Trang 28PORTA gồm 16 bit tương ứng với 16 chân được ký hiệu từ PA0 đến PA15 các chânPORTA có thể đọc/ghi theo từng bit hoặc cả buyte Các chân ở PORTA đều có thể dùngngắt, và các chân đềo có thể giao tiếp Analog
Trang 29cả byte Các chân ở PORTD đều có thể dùng ngắt, và các chân đềo có thể giao tiếpAnalog.
Port E
PortE cố độ rộng 16 bit, tương ứng với 4 chân được ký hiệu từ PED0 đến PDE15 .Các chân của PORTD có hai chiều dữ liệu và người lập trình có thể đọc/ghi theo từng bithặc cả byte Các chân ở PORTD đều có thể dùng ngắt, và các chân đềo có thể giao tiếpAnalog
Tham số - GPIOx: trong đó x có thể (A K) để chọn ngoại vi GPIO cho thiết
bị STM32F429X hoặc x có thể (A I) để chọn ngoại vi GPIO chocác thiết bị STM32F40XX và STM32F427X
- GPIO_Init: con trỏ tới cấu trúc GPIO_InitTypeDef chứa thông tincấu hình cho thiết bị ngoại vi GPIO được chỉ định
Trả về giá trị Không có:
HAL_GPIO_ReadPin
Tên hàm GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx,
uint16_t GPIO_Pin)
Mô tả chức năng Đọc chân cổng đầu vào được chỉ định
Tham số - GPIOx: trong đó x có thể (A K) để chọn ngoại vi GPIO cho thiết
bị STM32F429X hoặc x có thể (A I) để chọn ngoại vi GPIO chocác thiết bị STM32F40XX và STM32F427X
Trang 30- GPIO_Pin: chỉ định bit cổng để đọc Tham số này có thể làGPIO_PIN_x trong đó x có thể là (0 15)
Trả về giá trị Giá trị: chân cổng đầu vào
HAL_GPIO_WritePin
Tên hàm void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx,
uint16_tGPIO_Pin, GPIO_PinState PinState)
Mô tả chức năng Đặt hoặc xóa bit cổng dữ liệu đã chọn
Tham số - GPIOx: trong đó x có thể (A K) để chọn ngoại vi GPIO cho thiết
bị STM32F429X hoặc x có thể (A I) để chọn ngoại vi GPIO chocác thiết bị STM32F40XX và STM32F427X
- GPIO_Pin: chỉ định bit cổng được ghi Tham số này có thể là mộttrong GPIO_PIN_x trong đó x có thể là (0 15)
- PinState: chỉ định giá trị được ghi vào bit đã chọn Tham số này cóthể là một trong các giá trị enum GPIO_PinState:GPIO_PIN_RESET: để xóa chân cổng GPIO_PIN_SET: để đặtchân cổng
Trả về giá trị Không có:
HAL_GPIO_TogglePin
Tên hàm void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin)
Mô tả chức năng Chuyển trạng thái các chân GPIO được chỉ định
Tham số - GPIOx: Trong đó x có thể (A K) để chọn thiết bị ngoại vi GPIO
cho thiết bị STM32F429X hoặc x có thể (A I) để chọn ngoại viGPIO cho các thiết bị STM32F40XX và STM32F427X
- GPIO_Pin: Chỉ định các chân được bật
Trả về giá trị Không có:
Trang 312.5 Ngắt
khái niện
NVIC – Nested vectored interrupt controller là bộ điều khiển xử lý ngắt có trong
MCU STM32F103C8T6 Việc lập trình sử dụng ngắt là một kĩ năng quan trọng khi cácbạn lập trìnhh vi điều khiển, nếu không có ngắt thì chương trình sẽ thực hiện theo mộttrình tự từ trên xuống dưới, ngắt giúp chương trình xử lý theo sự việc, đáp ứng được các
sự kiện như sự thay đổi mức logic từ 1 chân vi điều khiển (ngắt ngoài), nhận một kí tự(ngắt nhận UART)… Trong bài viết này, mình sẽ trình bày về ngắt ngoài (externalinterrupt) của vi điều khiển STM32F411VE
- Có quản lí năng lượng cho vector ngắt
- Có các thanh ghi điều khiển quá trình ngắt
Ngắt ngoài nằm trong 1 phần của NVIC Mỗi EXTI – interrupt/event controller cóthể được lập trình chọn loại sự kiện/ ngắt, chọn cạnh lên, cạnh xuống hoặc cả 2, sắp xếpmức ưu tiên ngắt
Một số tính năng chính của ngắt ngoài:
- Kích hoạt độc lập và mask cho mỗi line sự kiện/ngắt
- Có bit trạng thái (status) riêng cho mỗi line ngắt
- Có thể có tối đa 23 sự kiện/ ngắt
- Kiểm tra tín hiệu ngoài có độ rộng xung nhỏ hơn clock trên APB2
Trang 32Hình 8 Sơ đồ khối của ngắt ngoàiCấu hình với thư viện chuẩn của ST. Có 2 loại ngắt ngoài chính đó là ngắt ngoài trêncác chân điều khiển ở dạng thông thường và ngắt ngoài trên các ứng dụng như : PVD,RTC, USB, Ethernet.
Ngắt ngoài của chip STM32F411VE bao gồm có 16 line:
Hình 9 Ngắt ngoài của chip STM32F411VE
Trang 33Ở đây chúng ta có thể thấy chip STM32F411VE gồm có 16 Line ngắt riêng biệt.
Bảng 3 Bảng mức độ ưu tiên ngắt NVIC
Các câu lệnh dùng trong ngắt
HAL_GPIO_EXTI_IRQHandler
Tên chức năng void HAL_GPIO_EXTI_IRQHandler (uint16_t GPIO_Pin)
Mô tả chức năng Hàm này xử lý yêu cầu ngắt EXTI
Thông số • GPIO_Pin: Chỉ định các chân được kết nối với dòng EXTI
Giá trị trả về Không có giá trị trả về
HAL_GPIO_EXTI_Callback
Tên chức năng void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
Mô tả chức năng Gọi lại phát hiện dòng EXTI
Thông số • GPIO_Pin: Chỉ định các chân được kết nối với dòng EXTI
Giá trị trả về không có giá trị trả về
2.6. TIMER
Giới thiệu cơ bản về Timer trong STM32
STM32f411VE có tất cả 8 timer có các chức năng như ngắt, timer base, PWM,Encoder, Input capture… Trong đó TIM1 là Timer đặc biệt, chuyên dụng cho việc xuấtxung với các mode xuất xung, các mode bảo vệ đầy đủ hơn so với các timer khác vàTIM2 với TIM5 là các timer 32bit và các TIM1, TIM3, TIM4, TIM9, TIM10, TIM11 là
Trang 34các timer 16bit TIM1, TIM9, TIM10, TIM11 thuộc khối clock APB2, còn cácTIM2,TIM3,TIM4, TIM5 thuộc nhóm APB1.
Timer là bộ định thời có thể sử dụng để tạo ra thời gian cơ bản dựa trên các thôngsố: clock, prescaler, autoreload, repetition counter Timer của STM32 là timer 16 bits cóthể tạo ra các sự kiện trong khoảng thời gian từ nano giây tới vài phút gọi là UEV(updateevent)
Các tính năng chính của TIM1
- Chụp đầu vào
Mô tả chức năng Bắt đầu thế hệ cơ sở TIM
Thông số - htim: con trỏ tới cấu trúc TIM_HandleTypeDef chứa thông tin cấu
hình cho mô-đun TIM
Trả về giá trị HAL: trạng thái
HAL_TIM_Base_Start_IT
(TIM_HandleTypeDef * htim)
Mô tả chức năng Bắt đầu thế hệ TIM Base ở chế độ ngắt cơ bản
Thông số - htim: con trỏ tới cấu trúc TIM_HandleTypeDef chứa thông tin cấu
hình cho mô-đun TIM
HAL_TIM_PeriodElapsedCallback
Trang 35Tên chức năng void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *
htim
Mô tả chức năng sau khi có tín hiệu của ngắt thì chức năng này hoat động
Thông số - htim: con trỏ tới cấu trúc TIM_HandleTypeDef chứa thông tin cấu
hình cho mô-đun TIM
Trả về giá trị không có giá trị trả về
2.7 PWM
Giới thiệu cơ bản về PWM
Bộ điều chế độ rộng xung, hay còn gọi là bộ“băm xung” là bộ xử lý và điều khiển tạo ra dạng xung vuông chu kỳ thay đổi theo cấu hình Đây là phương pháp điềuchỉnh điện áp ra tải dựa vào trung bình tín hiệu điều chế Khi độ rộng xung tăng, trungbình điện áp ra tăng Các module PWM thường sử dụng tần số điều chế không đổi,
và điều chỉnh dựa trên sự thay đổi của chu kỳ nhiệm vụ (duty cycle)
Hình 10 : Hình ảnh xung PWmNhư trên hình đã rất rõ : Duty cycle = pulse width x 100/period
– Duty cycle là tỷ lệ phần trăm mức cao
– Period là chu kỳ xung
– Pulse width là giá trị mức cao so với period
Dựa trên nguyên lý bên trên mà trong STM32 hay các loại vi điều khiển khácđiều hỗ trợ bộ tạo độ rộng xung tự động mà bạn không phải tốn thời gian bật tắt chân IO,
Trang 36có thể thiết lập chu kỳ, tần số, độ rộng xung và một số chức năng đặc biệt PWM thuộckhối timer
Ứng dụng
PWM được ứng dụng nhiều trong điều khiển như điều khiển động cơ và các
bộ xung áp, điều áp… Sử dụng PWM điều khiển độ nhanh chậm của động cơ và sựổnđịnh tốc độ động cơ Ngoài lĩnh vực điều khiển hay ổn định tải thì PWM còn tham gia vàđiều chế các mạch nguồn như : boot, buck, nghịch lưu 1 pha và 3 pha… PWM chuyêndùng để điều khiển các phần tử điện tử công suất có đường đặc tính là tuyến tính khi
có sẵn 1 nguồn 1 chiều cố định.
Câu lệnh
HAL_TIM_PWM_Start
Tên chức năng HAL_StatusTypeDef HAL_TIM_PWM_Start
(TIM_HandleTypeDef * htim, uint32_t Channel)
Mô tả chức năng Bắt đầu tạo tín hiệu PWM
Thông số - htim: con trỏ tới cấu trúc TIM_HandleTypeDef chứa thông tin cấu
hình cho mô-đun TIM
- Channel: Chennal TIM được bật Tham số này có thể là một trongnhững giá trị sau:
- TIM_CHANNEL_1: Đã chọn Chennal 1 TIM
- TIM_CHANNEL_2: Đã chọn Chennal 2 TIM
- TIM_CHANNEL_3: Đã chọn Chennal 3 TIM
- TIM_CHANNEL_4: Đã chọn Chennal 4 TIM Trả về giá trị HAL: trạng thái
HAL_TIM_PWM_Start_IT
Tên chức năng HAL_StatusTypeDef HAL_TIM_PWM_Start_IT
(TIM_HandleTypeDef * htim, uint32_t Channel)
Mô tả chức năng Bắt đầu tạo tín hiệu PWM ở chế độ ngắt
Trang 37Thông số - htim: con trỏ tới cấu trúc TIM_HandleTypeDef chứa thông tin cấu
hình cho mô-đun TIM
- Chennal: Chennal TIM được bật Tham số này có thể là một trongnhững giá trị sau:
- TIM_CHANNEL_1: Đã chọn Chennal 1 TIM
- TIM_CHANNEL_2: Đã chọn Chennal 2
- TIM_CHANNEL_3: Đã chọn Chennal 3 TIM
- TIM_CHANNEL_4: Đã chọn Chennal 4 TIM Trả về giá trị HAL: trạng thái
HAL_TIM_SET_COMPARE
Sự miêu tả: Đặt thanh ghi so sánh TIM Capture giá trị trong thời gian chạy mà
không gọi khác chức năng cấu hình thời gian
Thông số: - HANDLE : TIM xử lý
- CHANNEL :: Các chennal TIM sẽ là cấu hình Tham số này
có thể là một trong các giá trị sau:
- TIM_CHANNEL_1: Chennal TIM 1 đã chọn
- TIM_CHANNEL_2: Chennal TIM 2 đã chọn
- TIM_CHANNEL_3: Chennal TIM 3 đã chọn
- TIM_CHANNEL_4: Chennal TIM 4 đã chọn
- COMPARE : chỉ định Chụp So sánh đăng ký giá trị mới Giá trị trả về: không có giá trị trả về
2.8 ADC
Tổng quan ADC
Hầu hết chúng ta, những người đã trải nghiệm MCU 8 bit trước đây đều biết tầmquan trọng của việc chuyển đổi tương tự sang số (ADC) là quan trọng như thế nàotíchhợp sẵn một vi điều khiển. Ngoài các phần mở rộng phần cứng khác không có sẵn trongcác bộ vi điều khiển thời kỳ đầu, nhiều người dùng vi điều khiển 8051 trước đây đãchuyển chủ yếu sang các máy ảo Atmel AVR và Microchip mạnh hơn cho thiết bị ngoại
Trang 38vi quan trọng này. Tôi không cảm thấy cần phải khôi phục những lợi thế của việc có mộtthiết bị ngoại vi như vậy được nhúng trong một vi mô. Trong các MCU 8 bit truyền thống
đã nói ở trên, khối ADC có phần chưa hoàn chỉnh và người dùng phải tìm ra các phươngpháp khó để giải quyết một số vấn đề nhất định. Khối ADC của STM32 micros là mộttrong những yếu tố tiên tiến và tinh vi nhất để đối phó trong toàn bộ đấu trườngSTM32. Có quá nhiều tùy chọn cho khối này trong micro STM32. Trong vấn đề này,chúng tôi sẽ khám phá khối này
Tính năng ADC của stm32f411ve
- ADC xấp xỉ 12 bit liên tiếp
- Tốc độ chuyển đổi ADC tối đa là 1 MHz và hơn 2 MHz trong một số họSTM32
- Phạm vi chuyển đổi A / D: 0 - 3.6V DC
- Phạm vi hoạt động cung cấp điện ADC: 2.4V - 3.6V DC
Hình 11 Sơ đồ khối của ADC
Trang 39cấu hình cho ADC được chỉ định
Trả về giá trị - HAL: trạng thái
Thông số - hadc: con trỏ tới cấu trúc ADC_HandleTypeDef chứa thông tin
cấu hình cho ADC được chỉ định
Trả về giá trị - HAL: tình trạng
HAL_ADC_IRQHandler
Tên chức năng void HAL_ADC_IRQHandler (ADC_HandleTypeDef * hadc)
Mô tả chức năng Xử lý yêu cầu ngắt ADC
Thông số - hadc: con trỏ tới cấu trúc ADC_HandleTypeDef chứa thông tin
cấu hình cho ADC được chỉ định
Trả về giá trị Không có giá trị trả về
HAL_ADC_GetValue
Tên chức năng uint32_t HAL_ADC_GetValue (ADC_HandleTypeDef * hadc)
Mô tả chức năng Nhận giá trị chuyển đổi từ thanh ghi dữ liệu của chennal thông
thường