Tải bản đầy đủ (.pdf) (91 trang)

LUAN VAN TOT NGHIEP VI DIEU KHIEN STM32

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (34.19 MB, 91 trang )

Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

LỜI MỞ ĐẦU
Bộ vi xử lý ngày càng phát triển đa năng và được sử dụng hầu hết trong các hệ
thống điều khiển trong công nghiệp cũng như trong các thiết bị điện tử dân dụng. Chính
vai trò, chức năng của vi xử lý đã đem lại nhiều ưu điểm, nhiều tính năng đặc biệt cho
các hệ thống điều khiển. Các nhà nghiên cứu không ngừng nghiên cứu các hệ thống điều
khiển và sử dụng vi xử lý để thay thế nhằm nâng cao khả năng tự động thay thế cho con
người, và cũng chính vì thế đã thúc đẩy lĩnh vực vi xử lý ngày càng phát triển không
ngừng, đáp ứng yêu cầu điều khiển. Để đơn giản bớt sự phức tạp của phần cứng khi
dùng vị xử lý, các nhà nghiên cứu đã tích hợp hệ vi xử lý, bộ nhớ, các thiết bị ngoại vị
thành một vi mạch duy nhất gọi là vị điều khiển.
Ngày nay để chọn được một dịng chip có thể đáp ứng được mọi u cầu của
người dùng khơng cịn quá khó khăn như trước, với sự cạnh tranh phát triển của các
hãng sản xuất chip điện tử đã cho ra đời nhiều dòng chip với nhiều chức năng và ứng
dụng đáp ứng được nhu cầu của người dùng, nổi bật nên đó là dịng chip Vi điều khiển
ARM STM32F103RCT6. Chip STM32F103RCT6 thuộc series STM32F103xx là dòng
vi điều khiển 32 bit sử dụng lõi ARM Cortex M3 của hãng ST hoạt động với tốc độ
xung nhịp là 72 MHz, bộ nhớ Flash 512KB hoàn toàn đáp ứng được những yêu cầu cao
của các hệ thống xử lý số hiện nay. Do đó có thể thay thế các dịng chip 8 bit hay 16 bit
hiệu suất thấp mà giá thành chênh lệch lại khơng đáng kể.
Với những lý do trên nhóm đã lựa chọn đề tài khóa luận tốt nghiệp của mình là
“THIẾT KẾ KÍT THÍ NGHIỆM VI ĐIỀU KHIỂN ST”
Nội dung bao gồm:
Phần 1: Lý thuyết chip Vi điều khiển ARM STM32F103RCT6
Phần 2: Thiết kế phần cứng kít thí nghiệm vi điểu khiển ST
Phần 3: Các bài tập thực hành ứng dụng
Đồng nai, ngày 25 tháng 07 năm 2021
NHÓM SINH VIÊN THỰC HIỆN



Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 1


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

CHƯƠNG 1. LÝ DO CHỌN ĐỀ TÀI VÀ TẦM QUAN TRỌNG CỦA ĐỀ TÀI
1.1. Giới thiệu đề tài
Khoa học kỹ thuật ngày càng phát triển, đặc biệt là lĩnh vực điện tử – tự động
hóa đã có nhiều thành tựu đáng kể trong vài thập niên vừa qua. Để đáp ứng được với sự
thay đổi nhanh chóng của khoa học – công nghệ, các trường đại học cần phải luôn đổi
mới nội dung – phương pháp giảng dạy để không ngừng nâng cao chất lượng đào tạo.
Để nâng cao chất lượng đào tạo thì trang thiết bị thí nghiệm, thực hành đóng một
vai trị rất quan trọng. Hiện nay các thiết bị ngoại nhập do các hãng chuyên sản xuất
thiết bị dạy học sản xuất thường có giá thành rất cao. Từ thực tế đó, một giải pháp được
nhiều trường đại học ở Việt nam quan tâm đó là tự chế tạo các mơ hình thiết bị nhằm
đáp ứng được cơng việc đào thí nghiệm và thực hành.
1.2. Lý do chọn đề tài
Trong lĩnh vực tự động hố sản xuất hiện nay thì các thiết bị có khả năng lập
trình được như PLC, Vi điều khiển, CPLD, FPGA … đóng một vai trị vơ cùng quan
trọng.
Mục đích của nhóm là chế tạo bộ thí nghiệm vi điều khiển có tính mềm dẻo và
linh hoạt trong q trình sử dụng. Mơ hình thiết bị này cho phép sinh viên tương tác trực
tiếp để tiếp cận được những vấn đề cơ bản của một hệ thống điều khiển sử dụng bộ điều
khiển có khả năng lập trình được, từ thiết kế phần cứng đến thiết kế phần mềm. Thiết bị
này được chế tạo nhằm minh hoạ những tính năng của các vi mạch có khả năng lập trình

được của hãng Atmel, microchip, atera, xixlin… cũng như các loại cảm biến và các thiết
bị giao tiếp ngoại vi khác nhưng phải đảm bảo tính vừa sức đối với sinh viên của trường.
1.3. Nội dung nghiên cứu
Nghiên cứu thiết kế bộ thí nghiệm vi điều khiển với những đặc điểm:
Thiết bị được chế tạo tuyệt đối an toàn cho người sử dụng. Điện áp cao ngõ vào
(220VAC) được cách ly hoàn toàn. Sinh viên chỉ giao tiếp với phần điện áp thấp (
12VDC,  5VDC) nằm trong giới hạn cho phép về an toàn điện.
Ưu điểm nổi bật của thiết bị này là cho phép người học thao tác trực tiếp cho
phép ghép nối, khai báo vào/ra một cách đơn giản, trực quan sinh động nhưng vẫn đảm
bảo tính khoa học. Ngồi ra, thiết bị này có thể được kết nối đến các modul mở rộng,
tiêu biểu ở đây có các modul LCD, modul led 7 thanh, modul nhiệt độ, modul điều

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 2


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

khiển động cơ bước, … . Điều này cho phép người học có thể thiết kế các ứng dụng
riêng của mình.
1.4. Tầm quan trọng của nghiên cứu
Đề tài khóa luận sẽ thiết kế và chế tạo hồn thành kít thí nghiệm vi điều khiển với
việc sử dụng các linh kiện vật tư trong bộ thí nghiệm này đều có sẵn trên thị trường Việt
nam. Giá thành của mơ hình ở mức vừa phải. Bên cạnh đó, các khối chức năng của thiết
bị đã được thiết kế để giảm thiểu hư hỏng, điều này sẽ giảm thiểu được vật tư thực tập
nhưng vẫn đảm bảo được nội dung môn học.
1.5. Giới hạn của nghiên cứu

Các thế hệ vi điều khiển ngày càng phát triển không ngừng nhằm đáp ứng các
yêu cầu điều khiển, xử lý dữ liệu ngày càng lớn. Các vi điều khiển 8 bit rất phổ biến
trong các ứng dụng điều khiển trong công nghiệp cũng như các sản phẩm dân dụng, các
vi điều khiển 16 bit với khả năng đáp ứng cao hơn so với dòng vi điều khiển 8 bit, tuy
nhiên với các yêu cầu điều khiển, khối lượng dữ liệu xử lý như hình ảnh trong các thiết
bị điều khiển sinh học, các thiết bị giải trí như máy chụp ảnh kỹ thuật số, máy tính bảng,
máy định vị dẫn đường, … thì các vi điều khiển 8 bit và 16 bit sẽ không đáp ứng được
do không đủ không gian bộ nhớ để chứa dữ liệu, không đủ nhanh để xử lý dữ liệu, … để
đáp ứng được các yêu cầu đó thì các thế hệ vi điều khiển 32 bit đã ra đời, dịng vi điều
khiển phổ biến nhất là ARM.
Nhóm đã nghiên cứu lý thuyết dòng vi điều khiển ARM Cortex-M3, biên soạn tài
liệu lý thuyết, viết các chương trình thực hành cho Kit vi điều khiển ARM Cortex-M3
STM32F103VE.
Qua nghiên cứu lý thuyết nhóm đã nắm bắt được cấu trúc của dòng vi điều khiển
ARM 32 bit đang ngày càng phổ biến được dùng làm chip CPU trong các hệ thống điều
khiển phức tạp cũng như trong các thiết bị giải trí để xử lý các dữ liệu có kích thước lớn.
1.6. Kết quả dự kiến
Kết quả nghiên cứu là các tài liệu về lý thuyết đã cô đọng giúp người nghiên cứu
sau như các sinh viên có một tài liệu để nhanh chóng tiếp cận và làm chủ để có thể ứng
dụng một cách nhanh chóng. Tài liệu có thể phục vụ cho giảng dạy môn học vi điều
khiển cơ bản và nâng cao. Các bài thực hành biên soạn từ đơn giản đến phức tạp, được
trình bày và giải thích rõ ràng từng lệnh cũng như từng hàm có liên quan trong các thư
viện, giúp cho sinh viên có thể học nhanh, khơng mất nhiều thời gian mày mò nghiên
cứu. Các bài thực hành LCD và màn cảm ứng touch dùng để hiển thị hình ảnh và điều
khiển bằng cảm ứng chạm cho Sinh viên các bài học của mình rất gần gũi với nhiều ứng
dụng trong thực tế.

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 3



Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.1. Tổng quan về vi xử lý ARM Cortex M3, M4, M7, M9

Vi xử lý ARM Cortex M3, M4, M7 là dòng vi xử lý sử dụng kiến trúc ARM cấu
hình cho các ứng dụng vi điều khiển với chi phí tiết kiệm nhưng vẫn rất mạnh mẽ.
Kiến trúc ARM là một kiến trúc dạng RISC cho các vi xử lý, được cấu hình cho
các mơi trường khác nhau. Arm Holdings phát triển kiến trúc và cấp phép cho các công
ty khác. Các công ty này sẽ thiết kế các sản phẩm của riêng họ bao gồm các SoC
(System on Chip) và các module hệ thống SoM (System on Module) kết hợp với các
ngoại vi và bộ nhớ. Ví dụ STMicrocontroller với dịng STM32 chúng ta sử dụng trong
Series Học Lập Trình STM32.
2.1.1. ARM Cortex là gì?
Vi xử lý lõi ARM Cortex dựa trên 3 cấu hình của kiến trúc ARMv7
 Cấu hình A: cho các ứng dụng Application, yêu cầu cao chạy trên các hệ
điều hành mở và phức tạp như Linux, Android…
 Cấu hình R: cho các ứng dụng thời gian thực Real Time
 Cấu hình M: cho các ứng dụng vi điều khiển Microcontroller
Bộ vi xử lý ARM Cortex-M3 là bộ vi xử lý ARM đầu tiên dựa trên kiến trúc
ARMv7-M và được thiết kế đặc biệt để đạt được hiệu suất cao trong các ứng dụng
nhúng cần tiết kiệm năng lượng và chi phí, chẳng hạn như các vi điều khiển, hệ thống cơ
ô tô, hệ thống kiểm sốt cơng nghiệp và hệ thống mạng khơng dây. Thêm vào đó là việc
lập trình được đơn giản hóa đáng kể giúp kiến trúc ARM trở thành một lựa chọn tốt cho
ngay cả những ứng dụng đơn giản nhất.


Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 4


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

2.1.2. Cấu trúc bộ vi xử lý ARM Cortex M3
Bộ vi xử lý ARM Cortex-M3 dựa trên kiến trúc ARMv7-M có cấu trúc thứ bậc.
Nó tích hợp lõi xử lý trung tâm, với các thiết bị ngoại vi hệ thống tiên tiến để tạo ra các
khả năng như kiểm soát ngắt, bảo vệ bộ nhớ, gỡ lỗi và theo vết hệ thống.
ARM Cortex M3 dựa trên cấu trúc Havard, được đặc trưng bằng sự tách biệt giữa
vùng nhớ dữ liệu và chương trình. Vì có thể đọc cùng lúc lệnh và dữ liệu từ bộ nhớ, bộ
vi xử lý ARM Cortex-M3 có thể thực hiện nhiều hoạt động song song, tăng tốc thực thi
ứng dụng.

Hình 2.1. Cấu Trúc Vi Xử Lý ARM Cortex M3
2.1.3. Cấu trúc lõi ARM Cortex M3
Lõi ARM Cortex có cấu trúc đường ống gồm 3 tầng: Instruction Fetch,
Instruction Decode và Instruction Execute. Khi gặp một lệnh nhánh, tầng decode chứa
một chỉ thị nạp lệnh suy đốn có thể dẫn đến việc thực thi nhanh hơn. Bộ xử lý nạp lệnh
dự định rẽ nhánh trong giai đoạn giải mã. Sau đó, trong giai đoạn thực thi, việc rẽ nhánh
được giải quyết và bộ vi xử lý sẽ phân tích xem đâu là lệnh thực thi kế tiếp. Nếu việc rẽ
nhánh khơng được chọn thì lệnh tiếp theo đã sẵn sàng. Còn nếu việc rẽ nhánh được chọn
thì lệnh rẽ nhánh đó cũng đã sẵn sàng ngay lập tức, hạn chế thời gian rỗi chỉ còn một
chu kỳ.
Lõi Cortex-M3 chứa một bộ giải mã cho tập lệnh Thumb truyền thống và
Thumb-2 mới, một bộ phân chia logic ALU (arithmetic logic unit) tiên tiến hỗ trợ nhân

chia phần cứng, điều khiển logic, và các giao tiếp với các thành phần khác của bộ xử lý.
Bộ vi xử lý Cortex-M3 là một bộ vi xử lý 32-bit, với độ rộng của đường dẫn dữ
liệu 32 bit, các dải thanh ghi và giao tiếp bộ nhớ. Có 13 thanh ghi đa dụng, hai con trỏ
ngăn xếp, một thanh ghi liên kết, một bộ đếm chương trình và một số thanh ghi đặc biệt
trong đó có một thanh ghi trạng thái chương trình.

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 5


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

Hình 2.2. Cấu trúc lõi ARM Cortex M3
2.1.4. STM32 với ARM Cortex M3, M4, M7, M9
ST đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9 như dòng
STM32H7, STM32F7… với tốc độ xử lý, hiệu năng cao nhưng giá thành rẻ (Low price,
high performance), giá chỉ gần 1 Euro với số lượng lớn, trở thành một thách thức lớn đối
với các dòng vi điều khiển 16 bit và 8 bit truyền thống như AVR, PIC, 8051…
STM32 phân thành hai dòng: dòng Performance có tần số hoạt động của CPU lên
tới 72Mhz và dịng Access có tần số hoạt động lên tới 36Mhz. Các biến thể STM32
trong hai nhóm này tương thích hồn tồn về cách bố trí chân (pin) và phần mềm, đồng
thời kích thước bộ nhớ FLASH ROM có thể lên tới 512K và 64K SRAM.
Khi phát triền dòng chip STM32 ARM Cortex Mx, ST cũng đã phát triển tất cả
các cơng cụ và ứng dụng xung quanh dịng chip này. Có thể kể đến Hệ sinh thái STM32
Cube giúp lập trình viên dễ dàng phát triển ứng dụng từ đơn giản đến phức tạp mà
không cần quá phụ thuộc vào Code.
2.1.5. ARM Cortex ngày nay

Thời điểm hiện tại ARM được mua lại bởi Nvidia với giá 40 tỉ USB ngày
13/09/2020. Cụ thể, Nvidia sẽ trả cho SoftBank 21,5 tỷ USD cổ phiếu và 12 tỷ USD tiền
mặt. Số còn lại sẽ được trả bằng tiền mặt hoặc cổ phiếu tùy hiệu quả kinh doanh của

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 6


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

công ty trong tương lai. Cùng với đó, ARM sẽ hoạt động như một bộ phận riêng của
Nvidia. Công ty vẫn đặt trụ sở tại Anh và “tiếp tục vận hành mơ hình cấp phép mở, đồng
thời duy trì tính trung lập với khách hàng tồn cầu”.
2.2. Một vài đặc điểm nổi bật của STM32
2.2.1. Sự tinh vi
Thoạt nhìn thì 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. Tuy nhiên mỗi
ngoại vi trên đều có rất nhiều đặc điểm thú vị. Ví dụ như 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 mode
chuyển đổi. Mỗi bộ timer có 4 khối capture compare, mỗi khối timer có thể liên kết với
các khối timer khác để tạo ra một mảng các timer tinh vi. Một timer cao cấp chuyên hỗ
trợ điều khiển động cơ, với 6 đầu ra PWM với dead time lập trình được và một đường
break input sẽ buộc tín hiệu PWM sang một trạng thá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ằng phầ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 7 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ệu
như 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ểu
hoá sự tranh chấp bus giữa truy cập dữ liệu thông qua CPU (CPU data access) và các
kê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ố 72MHz và dòng tiêu thụ chỉ có 36mA với tất
cả các khố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ăng lượng của Cortex, STM32 chỉ tiêu thụ 2µA khi ở chế độ standby. Một bộ dao
động nội RC 8MHz cho phép chip nhanh chóng thốt khỏi chế độ tiết kiệm năng lượng
trong khi bộ dao động ngoài đang khởi động. Khả năng nhanh đi vào và thoát khỏi các
chế độ tiết kiệm năng lượng làm giảm nhiều sự tiêu thụ năng lượng tổng thể.
2.2.2. 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ắt
khe, địi hỏi tính an tồn cao, cũng như địi hỏi sức mạnh xử lý và càng nhiều thiết bị

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 7


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

ngoại vi tinh vi. Để đáp ứng các yêu cầu khắt khe đó, STM32 cung cấp một số tính năng
phần cứ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
áp thấp, một hệ thống bảo vệ xung clock và hai bộ watchdogs. Bộ đầu tiên là một
watchdog cửa sổ. Watchdog này phải được làm tươi trong một khung thời gian xác định.

Nếu nhấn nó quá sớm, hoặc quá muộn, thì watchdog sẽ kích hoạt. Bộ thứ hai là một
watchdog độc lập, có bộ dao động bên ngồ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ện lỗi của bộ dao động chính bên ngồi (thường là
thạch anh) và tự động chuyển sang dùng bộ dao động nội RC 8MHz.
2.2.3. Tính bảo mật
Một trong những yêu cầu khắc khe khác của thiết kế hiện đại là nhu cầu bảo mật
mã chương trình để ngăn chặn sao chép trái phép phần mềm. Bộ nhớ Flash của STM32
có thể được khóa để chống truy cập đọc Flash thơng qua cổ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 ni nhờ nguồn pin. Khu vực này có một đầu vào chống giả mạo, 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.
2.2.4. 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, các công cụ phát triển
đã được hỗ trợ tập lệnh Thumb-2 và dịng Cortex. Ngồi ra ST cũng cung 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. Có rất nhiều RTOS mã nguồn mở và thương mại và
middleware (TCP/IP, hệ thống tập tin, v.v.) hỗ trợ cho họ Cortex. 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 truy cập Debug (Debug Access Port), cổng này hỗ trợ
kết nối chuẩn JTAG hoặc giao diện 2 dây (serial wire-2 Pin), cũng như cung cấp trình
điều khiển chạy gỡ lỗi, hệ thống CoreSight trên STM32 cung cấp một data watchpoint
và một cơng cụ theo dõi (instrumentation trace). Cơng cụ này có thể gửi thơng tin về

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST


Page | 8


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

ứng dụng được lựa chọn đến công cụ gỡ lỗi. Điều này có thể cung cấp thêm các thơng
tin gỡ lỗi và cũng có thể được sử dụng trong q trình thử nghiệm phần mềm.
2.2.5. Dịng Performance và Access của STM32
Họ STM32 có hai nhánh đầu tiên riêng biệt: dòng Performance và dòng Access.
Dòng Performance tập hợp đầy đủ các thiết bị ngoại vi và chạy với xung nhịp tối đa
72MHz. Dịng Access có các thiết bị ngoại vi ít hơn và chạy tối đa 32MHz. Quan trọng
hơn là cách bố trí chân (pins layout) và các kiểu đóng gói chip (package type) là như
nhau giữa dịng Access và dòng Performance. Điều này cho phép các phiên bản khác
nhau của STM32 được hốn vị mà khơng cần phải sửa đổi sắp sếp lại footprint (mơ hình
chân của chip trong công cụ layout bo mạch) trên PCB (Printed Circuit Board).
Ngồi hai dịng Performance và Access đầu tiên, hiện nay ST đã đưa ra thị trường thêm
hai dòng USB Access và Connectivity như hình bên dưới.

Hình 2.3. Đặc điểm của bốn nhánh trong họ STM32
2. 3. Vi điều khiển STM32F103C8T6
STM32F103C8T6 là vi điều khiển 32bit, thuộc họ F1 của dịng chip STM32
hãng ST.

Hình 2.4. Dịng chip STM32 hãng ST

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST


Page | 9


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

 THÔNG SỐ CƠ BẢN:
- Lõi ARM COTEX M3.
- Tốc độ tối đa 72Mhz.
- Bộ nhớ:
 64 kbytes bộ nhớ Flash
 20 kbytes SRAM
- Clock, reset và quản lý nguồn
 Điện áp hoạt động từ 2.0 → 3.6V.
 Sử dụng thạch anh ngoài từ 4Mhz → 20Mhz.
 Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40Khz.
- Chế độ điện áp thấp:
 Có các mode: ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
 Cấp nguồn ở chân Vbat bằng pin ngoài để dùng bộ RTC và sử dụng dữ
liệu được lưu trữ khi mất nguồn cấp chính.
- 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ
 Khoảng giá trị chuyển đổi từ 0 – 3.6 V
 Có chế độ lấy mẫu 1 kênh hoặc nhiều kênh.
- DMA:
 7 kênh DMA
 Có hỗ trợ DMA cho ADC, UART, I2C, SPI.
- 7 bộ Timer:
 3 Timer 16 bit hỗ trợ các mode Input Capture/ Output Compare/ PWM.
 1 Timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ ngắt

Input, dead-time.
 2 Watchdog Timer để bảo vệ và kiểm tra lỗi.
 1 Systick Timer 24 bit đếm xuống cho hàm Delay,….
- Có hỗ trợ 9 kênh giao tiếp:
 2 bộ I2C.
 3 bộ USART
 2 SPI
 1 CAN
 USB 2.0 full-speed interface
- Kiểm tra lỗi CRC và 96-bit ID.
2.3.1. Phần cứng bên trong STM32
STM32 là một vi điều khiển cao cấp không chỉ chỉ do bộ nhớ, tốc độ và sự phong
phú về phần cứng, mà còn bởi có phần cứng hỗ trợ bên trong nâng cao. Hầu hết chúng
ta đều biết về Timer watchdog từ các trải nghiệm trước đây với các MCU 8 bit phổ biến
như AVR và PIC. Tuy nhiên, khi nói đến STM32, ý tưởng về mạch watchdog được trau

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 10


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

chuốt hơn. Các tùy chọn có sẵn cho xung nhịp cũng được cải tiến trong STM32. Trong
chương này, chúng ta sẽ tìm hiểu về một số phần cứng hỗ trợ bên trong STM32.
Chúng ta sẽ kiểm tra việc sử dụng và vận hành hai timer giám sát khác nhau - Bộ
giám sát độc lập ( Independent Watchdog - IWDG ) và Bộ giám sát cửa sổ ( Window
Watchdog - IWDG ) và các tùy chọn xung nhịp thường có trong vi điều khiển STM32.

 CÁC TÙY CHỌN XUNG NHỊP
Trong một vi điều khiển mạnh như STM32, có một số tùy chọn cho xung nhịp.
Lúc đầu, toàn bộ cơng cụ có thể trơng hơi phức tạp. Quả thực nó phức tạp nhưng khơng
q khó hiểu. Sơ đồ khối đơn giản hóa dưới đây cho thấy sự sắp xếp xung nhịp phổ biến
bên trong MCU thUỘC sê ri STM32F103.

Hình 2.5. Sơ đồ bố trí xung nhịp bên trong STM32F103
Sơ đồ trên cung cấp một cái nhìn sâu sắc ban đầu về phần cứng xung nhịp. Khi
chuyển sang phần mềm, rất dễ dàng để cấu hình mảng phần cứng khổng lồ này.
Sau đây là phần điểm qua các nguồn xung nhịp có trong vi điều khiển STM32 .
Có hai loại xung nhịp cơ bản và bản thân chúng được chia thành hai loại tốc độ .
Các nguồn bên ngoài
Các nguồn xung nhịp bên ngoài tốc độ cao ( HSE ) có thể là bộ dao động tinh
thể, bộ cộng hưởng hoặc mạch tạo tín hiệu xung nhịp.
Khi sử dụng các mạch tạo xung nhịp, dạng sóng từ các mạch như vậy khơng nhất
thiết phải ln ln là sóng vng. HSE chấp nhận sóng hình sin và hình tam giác,
nhưng dù sử dụng dạng sóng nào thì nó phải đối xứng, tức là ở mức cao trong 50 % và ở
mức thấp trong 50 % chu kỳ và chỉ sử dụng chân OSC_IN để cấp tín hiệu xung nhịp, để
mở chân OSC_OUT. Thông thường, HSE của STM32 MCU chấp nhận tần số xung nhịp

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 11


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

từ 4 - 25 MHz. Nếu mạch xung nhịp bên ngồi được sử dụng thì nên bỏ qua bộ dao

động HSE. Điều này sẽ đảm bảo không có xung đột.
Các nguồn xung nhịp bên ngồi tốc độ thấp ( LSE ) có các thuộc tính tương tự
như các nguồn HSE nhưng thường là các tinh thể xung nhịp rất chính xác với tần số
32,768 kHz được sử dụng để cung cấp LSE. Đây là cách sử dụng LSE sâu nhất khi LSE
cung cấp mô đun đồng hồ thời gian thực ( RTC ) của STM32.
Các nguồn bên trong
Nguồn xung nhịp nội bộ tốc độ cao ( HST ) là nguồn xung nhịp 8 MHz cố định
bên trong. Nó được hiệu chuẩn tại nhà máy và có dung sai 1 % .
Nguồn xung nhịp nội bộ tốc độ thấp ( LSI ) tương tự như LSE nhưng khơng
chính xác lắm. Thông thường tần số của LSI là khoảng 30 - 60 kHz. Đối với hầu hết các
mục đích sử dụng phổ biến, LSI được coi là có tần số trung bình 45 kHz. Do LSI có độ
lệch cao nên khuyến cáo được đưa ra là không nên sử dụng LSI cho RTC nội bộ.
Có các prescalar chia tần số dao động tại các vị trí khác nhau và chúng có thể
được sử dụng để cấu hình các xung nhịp riêng lẻ của các bộ phận khác nhau trong MCU
STM32. Tính năng này khơng chỉ đảm bảo tiết kiệm năng lượng mà còn hỗ trợ chạy các
thành phần khác nhau của vi điều khiển với tốc tối ưu. Một đơn vị bảo mật xung nhịp
tùy chọn cũng có sẵn để sử dụng, có thể chuyển sang HS nếu HSE khơng thành cơng vì
một số lý do.
Ngồi các nguồn xung nhịp khác nhau, cịn có mơ đun vịng khóa pha (Phase
Lock Loop - PLL) có thể nhân giá trị HSE hoặc HS để tạo ra các giá trị lớn hơn của
xung nhịp.

Hình 2.6. Bo phát triển STM32 của Waveshare

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 12


Trường đại học cơng nghệ Đồng Nai


Khóa luận tốt nghiệp K13: (2017 – 2021)

Trong thực tế, xung nhịp HST hoặc HSE tần số 8 MHz được truyền qua PLL với
hệ số nhân là 9 để tạo ra xung nhịp 72 MHz ở tốc độ cao nhất. Đây cũng là lý do tại sao
hầu hết các bộ phát triển STM32 được tạo sẵn đi kèm với bộ tạo dao động tinh thể 8
MHz.
Trong chương này sử dụng bo phát triển Open103R STM32F103RC của hãng
Waveshare. Bo này cũng đi kèm với một tinh thể xung nhịp 8 MHz và 32.768 kHz. Về
cơ bản có chia bo phát triển STM32 ARM ra thành 3 loại. Loại thứ nhất là series Open,
trong đó bao gồm tất cả các tính năng mà người dùng có thể mong đợi trong một bộ phát
triển vi điều khiển và các bộ này đi kèm với các giao diện header dễ dàng để nối với
phần cứng bên ngoài ( như mô đun giao tiếp CAN , mô đun RTC , LCD ... ). Loại thứ
hai có các mơ đun dạng cắm ( PIM ) dựa trên các bo Open, được trang bị phần cứng tối
thiểu và có thể được sử dụng một cách riêng lẻ hoặc kết hợp với một bo mạch chủ mở
rộng. Loại thứ ba là dòng Port, là phiên bản thu gọn của dòng Open.
Khi làm việc với xung nhịp của STM32, có một vài điều cần được hiểu rõ. ARM
Cortex M3 là một mạng lưới các bus dữ liệu / lệnh. Các bus quan trọng hàng đầu của
Cortex là Core System Clock, Advanced High Speed Bus (AHB), Advanced Peripheral
Bus 1 (APB1) và Advanced Peripheral Bus 2 (APB2).
Các bus này được kết nối sao cho chúng được kết nối với mô đun Direct Momory
Access (DMA), SRAM, các thiết bị ngoại vi như GPIO, ADC, bộ time ... và lõi Cortex
.Hiện tại chỉ cần biết về bus % APB và chúng có tầm quan trọng cao nhất đối với chúng
ta. Điều này là do chúng ta hiện đang xử lý phần cứng ngoại vị của vi điều khiển
STM32 và chắc chắn không phải là những thứ khác như lõi DMA, lõi Cort91...
Cần lưu ý: APB1 có tần số hoạt động tối đa là 36 MHz trong khi APB2 có thể
chạy với tốc độ nhanh như bug AHB - 72MHz. Bây giờ bạn có thể hiểu tại sao GPIO
được kết nối với bus APB2 thay vì APB1 hoặc bất kỳ bus nào khác và làm thế nào mà
GPIO trong STM32 có thể đạt được tốc độ chuyển mạch 50 MHz.
Bus APB1 chủ yếu phục vụ các mô đun truyền thống và tính của STM32 Tần số

APB1 thì khơng được tự động thu nhỏ để bằng một nửa tốc độ của AHB, do vậy chúng
ta cần đảm bảo rằng nó khơng bị ép xung do nhầm lẫn. Việc ép xung không phải là một
giải pháp tốt và cũng không được khuyến nghị bởi bất kỳ nhà sản xuất nào.
Để tránh ép xung, bus APB1 ln sử dụng ít nhất một bộ chia trước là 2 mỗi khi
việc điều khiển STM32 vượt quá tần số 36 MHz.

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 13


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

Cuối cùng, chúng ta cũng có thể nhận được đầu ra xung nhịp tử một chân đặc
biệt gọi là Microcontroller Clock Output ( MCO ).
Chân MCO thường được đặt ở chân PA8. Tuy nhiên, để sử dụng MCO, cần đặt
PA8 làm đầu ra Alternate Function ( AFIO ).
Chân MCO có thể được sử dụng để tạo xung nhịp cho vị điều khiển khác hoặc
làm cơ sở thời gian cho mạch hoặc thiết bị khác.
2.3.2. Bộ xử lý và đơn vị xử lý trung tâm Cortex
Trong suốt phần còn lại của tài liệu này, các thuật ngữ bộ xử lí Cortex (Cortex
processor) và đơn vị xử lí trung tâm Cortex (Cortex CPU) sẽ được sử dụng để phân biệt
giữa nhúng lõi Cortex hồn chỉnh và bộ xử lí trung tâm RISC nội (internal RISC CPU).
Trong phần tiếp theo ta sẽ xem xét các đặc điểm chính của đơn vị xử lí trung tâm
Cortex, tiếp theo là hệ thống thiết bị ngoại vi bên trong bộ xử lý Cortex.
2.4. Đơn vị xử lý trung tâm Cortex (Cortex CPU)
Trung tâm của bộ xử lý Cortex là một CPU RISC 32-bit. CPU này có một phiên
bản được đơn giản hóa từ mơ hình lập trình (programmer’s model) của ARM7/9, nhưng

có một tập lệnh phong phú hơn với sự hỗ trợ tốt cho các phép toán số nguyên, khả năng
thao tác với bit tốt hơn và khả năng đáp ứng thời gian thực tốt hơn.
2.4.1. Kiến trúc đường ống
CPU Cortex có thể thực thi hầu hết các lệnh trong một chu kì đơn. Giống như
CPU của ARM7 và ARM9, việc thực thi này đạt được với một đường ống ba tầng. Tuy
nhiên Cortex-M3 khả năng dự đoán việc rẽ nhánh để giảm thiểu số lần làm rỗng (flush)
đường ống.

Hình 2.7. Kiến trúc đường ống của ARM Cortex-M3
Trong khi một lệnh đang được thực thi, thì lệnh tiếp theo sẽ được giải mã và lệnh
tiếp theo nữa sẽ được lấy về từ bộ nhớ. Phương thức hoạt động này sẽ phát huy hiệu quả
tối đa cho mã tuyến tính (linear code), nhưng khi gặp phải một rẽ nhánh (ví dụ cấu trúc

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 14


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

lệnh if…else) thì các đường ống phải được làm rỗng (flush) và làm đầy (refill) trước khi
mã có thể tiếp tục thực thi.
2.4.2. Mơ hình lập trình
CPU Cortex là bộ xử lý dựa trên kiến trúc RISC, do đó hỗ trợ kiến trúc nạp và
lưu trữ (load and store architecture). Để thực hiện lệnh xử lý dữ liệu, các toán hạng phải
được nạp vào một tập thanh ghi trung tâm, các phép tính dữ liệu phải được thực hiện
trên các thanh ghi này và kết quả sau đó được lưu lại trong bộ nhớ.


Hình 2.8. Kiến trúc load và store của ARM Cortex-M3
2.4.3. Các chế độ hoạt động
Bộ vi xử lý Cortex được thiết kế với mục tiêu giảm số bóng bán dẫn, nhanh
chóng và dễ sử dụng lõi vi điều khiển, nó có được thiết kế để hỗ trợ việc sử dụng hệ
điều hành thực hành thời gian. Bộ xử lý Cortex có hai chế độ hoạt động: chế độ Thread
và chế độ Handler. CPU sẽ chạy ở chế độ Thread trong khi nó đang thực thi ở chế độ
nền khơng có ngắt xảy ra và sẽ chuyển sang chế độ Handler khi nó đang thực thi các
ngắt đặc biệt (exceptions). Ngồi ra, CPU Cortex có thể thực thi mã trong chế độ đặc
quyền hoặc không đặc quyền (privileged or non-privileged mode).
2.4.4. Bản đồ bộ nhớ
Bộ xử lý Cortex-M3 là một lõi vi điều khiển được tiêu chuẩn hóa, như vậy nó có
một bản đồ bộ nhớ cũng được xác định. Mặc dù có nhiều bus nội, bản đồ bộ nhớ này là
một không gian địa chỉ 4 Gbyte tuyến tính. Bản đồ bộ nhớ này là chung cho tất cả các
thiết bị dựa trên lõi Cortex.

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 15


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

Hình 2.9. Bản đồ bộ nhớ tuyến tính 4Gbyte của bộ xử lí Cortex-M3
2.4.5. Truy cập bộ nhớ khơng xếp hàng
Bộ xử lí Cortex-M3 có thể truy cập bộ nhớ khơng xếp hàng, việc đó đảm bảo
rằng SRAM được sử dụng một cách hiệu quả.
CPU Cortex có các chế độ định địa chỉ cho word, half word và byte, nhưng có
thể truy cập bộ nhớ khơng xếp hàng (unaligned memory). Điều này cho phép trình liên

kết của trình biên dịch tự do sắp xếp dữ liệu chương trình trong bộ nhớ. Việc bổ sung hỗ
trợ tính năng dải bit (bit banding) vào CPU Cortex cho phép các cờ chương trình được
đóng gói vào một biến word hoặc half-word hơn là sử dụng một byte cho mỗi cờ.
2.5. Bộ xử lý Cortex
Bộ xử lí Cortex được tạo thành từ CPU Cortex kết hợp với nhiều thiết bị ngoại vi
như Bus, system timer…
2.5.1. Bus
Bộ vi xử lý Cortex-M3 được thiết kế dựa trên kiến trúc Harvard với bus mã và
bus dữ liệu riêng biệt. Chúng được gọi là các bus Icode và Dcode. Cả hai bus đều có thể
truy cập mã và dữ liệu trong phạm vi bộ nhớ từ 0x00000000 – 0x1FFFFFFF. Một bus
hệ thống bổ sung được sử dụng để truy cập vào không gian điều khiển hệ thống Cortex
trong phạm vi 0x20000000 – 0xDFFFFFFF và 0xE0100000 – 0xFFFFFFFF. Hệ thống
gỡ lỗi trên chip của Cortex có thêm một cấu trúc bus được gọi là bus ngoại vi riêng.
2.5.2. Ma trận Bus
Bus hệ thống và bus dữ liệu được kết nối với vi điều khiển bên ngoài thông qua
một tập các bus tốc độ cao được sắp xếp như một ma trận bus. Nó cho phép một số
đường dẫn song song giữa bus Cortex và các bus chủ (bus master) khác bên ngoài như

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 16


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

DMA đến các nguồn tài nguyên trên chip như SRAM và các thiết bị ngoại vi. Nếu hai
bus chủ (ví dụ CPU Cortex và một kênh DMA) cố gắng truy cập vào cùng một thiết bị
ngoại vi, một bộ phân xử nội sẽ giải quyết xung đột và cho truy cập bus vào ngoại vi có

mức ưu tiên cao nhất.
2.5.3. Timer hệ thống (System timer)
Lõi Cortex có một bộ đếm xuống 24-bit, với tính năng tự động nạp lại (auto
reload) giá trị bộ đếm và tạo sự kiện ngắt khi đếm xuống zero. Nó được tạo ra với dụng
ý cung cấp một bộ đếm thời gian chuẩn cho tất cả vi điều khiển dựa trên Cortex. Đồng
hồ SysTick được sử dụng để cung cấp một nhịp đập hệ thống cho một RTOS, hoặc để
tạo ra một ngắt có tính chu kì để phục vụ cho các tác vụ được lập lịch. Thanh ghi trạng
thái và điều khiển của SysTick trong đơn vị không gian điều khiển hệ thống Cortex-M3
cho phép chọn các nguồn xung clock cho SysTick.
2.5.4. Xử lí ngắt (Interrupt Handling)
Một trong những cải tiến quan trọng của lõi Cortex so với các CPU ARM trước
đó là cấu trúc ngắt của nó và xử lý các ngắt ngoại lệ (exception handling). CPU ARM7
và ARM9 có hai đường ngắt: ngắt nhanh (fast interrupt-FIQ) và ngắt đa dụng (general
purpose interrupt hay còn gọi là interrupt request-RIQ). Hai đường tín hiệu ngắt này
phục vụ tất cả các nguồn ngắt bên trong một vi điều khiển, trong khi kỹ thuật được sử
dụng là như nhau, nhưng việc thực hiện lại khác biệt giữa các nhà sản xuất chip.
2.5.4. Bộ điều khiển vector ngắt lồng nhau (Nested Vector Interrupt Controller)
NVIC (Nested Vector Interrupt Controller) là một đơn vị tiêu chuẩn bên trong lõi
Cortex. Điều này có nghĩa là tất cả các vi điều khiển dựa trên lõi Cortex sẽ có cùng một
cấu trúc ngắt, bất kể nhà sản xuất chip là ST, Atmel, Luminary hoặc NXP... Vì vậy, mã
ứng dụng và hệ điều hành có thể dễ dàng được chuyển từ vi điều khiển này sang vi điều
khiển khác và lập trình viên khác khơng cần phải tìm hiểu một tập các thanh ghi hoàn
toàn mới. NVIC cũng được thiết kế để có một độ trễ khi đáp ứng ngắt rất thấp.

Hình 2.10. Cấu trúc của NVIC trong bộ xử lí Cortex

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 17



Trường đại học cơng nghệ Đồng Nai
-

Khóa luận tốt nghiệp K13: (2017 – 2021)

Phương pháp nhập và thoát khỏi một ngoại lệ của NVIC (NVIC
Operation Exception Entry And Exit)

Khi một ngắt được sinh ra bởi một thiết bị ngoại vi, NVIC sẽ kích khởi CPU
Cortex phục vụ ngắt. Khi CPU Cortex đi vào chế độ ngắt của nó, nó sẽ đẩy một tập các
thanh ghi vào vùng ngăn xếp (stack). Thao tác này được thực hiện trong vi chương trình
(microcode), vì vậy khơng cần viết thêm bất kì lệnh nào trong mã ứng dụng. Trong khi
khung ngăn xếp (stack frame) đang được lưu trữ, địa chỉ bắt đầu của trình dịch vụ ngắt
đã được lấy về trên bus Icode (instruction bus). Vì vậy, thời gian từ lúc ngắt được sinh
ra cho tới khi lệnh đầu tiên của trình dịch vụ ngắt được thực thi chỉ có 12 chu kỳ.

Hình 2.11. Đáp ứng thời gian khi một ngắt bất kì xảy ra của Cortex-M3
-

Các chế độ xử lí ngắt cao cấp (Advanced Interrupt Handling Modes)
Với khả năng xử lý một ngắt đơn rất nhanh, NVIC được thiết kế để xử lý hiệu

quả nhiều ngắt trong một ứng dụng đòi hỏi khắc khe tính thời gian thực. NVIC có một
số phương pháp xử lý thông minh nhiều nguồn ngắt, sao cho độ trễ giữa các ngắt là tối
thiểu và để đảm bảo rằng các ngắt có mức ưu tiên cao nhất sẽ được phục vụ đầu tiên.
-

Quyền ưu tiên ngắt (Interrupt Pre-emption)
NVIC được thiết kế để cho phép các ngắt có mức ưu tiên cao sẽ dành quyền ưu


(preempt) so với một ngắt có mức ưu tiên thấp hơn đang chạy. Trong trường hợp này
ngắt đang chạy sẽ bị dừng và một khung ngăn xếp mới (new stack frame) được lưu lại,
thao tác này chỉ mất 12 chu kỳ sau đó ngắt có mức ưu tiên cao hơn sẽ chạy. Khi ngắt có
mức ưu tiên cao thực hiện xong, dữ liệu lưu trên ngăn xếp trước đó sẽ được tự động lấy
ra (automatically POPed) và ngắt ưu tiên thấp hơn có thể tiếp tục thực hiện.
-

Kỹ thuật Tail Chaining trong NVIC
Nếu một ngắt có mức ưu tiên cao đang chạy và đồng thời một ngắt có mức ưu

tiên thấp hơn cũng được kích hoạt, NVIC sử dụng một phương pháp gọi là Tail
Chaining để đảm bảo thời gian trễ là tối thiểu giữa các lần phục vụ ngắt. Nếu hai ngắt

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 18


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

được nâng lên, ngắt có mức ưu tiên cao nhất sẽ được phục trước và sẽ bắt đầu thực hiện
chỉ sau 12 chu kỳ xung nhịp kể từ lúc xuất hiện ngắt.

Hình 2.12. Đáp ứng thời gian khi hai ngắt xảy ra đồng thời của Cortex-M3
Điều này chỉ mất 6 chu kỳ xung nhịp và sau đó trình phục vụ ngắt kế tiếp có thể
bắt đầu được thực thi. Vào cuối các ngắt đang chờ, ngăn xếp được khôi phục và địa chỉ
trở về được lấy, tiếp đó chương trình ứng dụng nền có thể bắt đầu thực thi chỉ trong 12

chu kỳ xung nhịp.
- Cấu hình và sử dụng NVIC
Để sử dụng NVIC cần phải qua ba bước cấu hình. Đầu tiên cấu hình bảng vector
cho các nguồn ngắt mà chúng ta muốn sử dụng. Tiếp theo cấu hình các thanh ghi NVIC
để cho phép và thiết lập các mức ưu tiên của các ngắt trong NVIC và cuối cùng cần phải
cấu hình các thiết bị ngoại vi và cho phép ngắt tương ứng.
Trong trường hợp của bộ đếm thời gian SysTick, chúng ta có thể tạo ra một trình
phục vụ ngắt bằng cách khai báo một hàm C với tên phù hợp:
void SysTick_Handler (void)
{ ….
}
Các ngắt đặc biệt bên trong Cortex được cấu hình thơng qua các thanh ghi điều
khiển và thanh ghi cấu hình mức ưu tiên của hệ thống, trong khi đó các thiết bị ngoại vi
người dùng được cấu hình bằng cách sử dụng các thanh ghi IRQ (Interrupt Request).
Ngắt của SysTick là một ngắt đặc biệt bên trong Cortex và được xử lý thông qua các
thanh ghi hệ thống. Một số ngắt đặc biệt khác bên trong lõi Cortex luôn ở trạng thái cho
phép, bao gồm các ngắt reset và NMI (Non-Maskable Interrupt), tuy nhiên ngắt của
timer hệ thống
- SysTick lại khơng được kích hoạt bên trong NVIC.
SysTickCurrent = 0x9000;
SysTickReload = 0x9000;
SysTickControl = 0x07;

//Start value for the sys Tick counter
//Reload value
//Start and enable interrupt

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 19



Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

Mỗi thiết bị ngoại vi được điều khiển bởi các khối thanh ghi IRQ. Mỗi ngoại vi
có một bit cho phép ngắt. Những bit nằm trên hai thanh ghi cho phép ngắt có chiều dài
là 32-bit. Việc cấu hình ngắt cho một thiết bị ngoại vi cũng giống với cấu hình một
exception bên trong Cortex. Trong trường hợp ngắt của ADC, trước tiên chúng ta phải
thiết lập vector ngắt và cung cấp hàm phục vụ ngắt-ISR:
DCD ADC_IRQHandler ;
void ADC_Handler(void)
{
}
Sau đó, ADC phải được khởi tạo và các ngắt phải được cho phép trong các thiết
bị ngoại vi và các NVIC:
ADC1→CR2 = ADC_CR2; //Switch on the ADC and continuous conversion
ADC1→SQR1 = sequence1; //Select number of channels in sequence conversion
ADC1→SQR2 = sequence2; //and select channels to convert
ADC1→SQR3 = sequence3;
ADC1→CR2 |= ADC_CR2; //Rewrite on bit
ADC1→CR1 = ADC_CR1; //Start regular channel group, enable ADC interrupt
GPIOB→CRH = 0x33333333;
//Set LED pins to output
NVIC→Enable[0] = 0x00040000; //Enable ADC interrupt
NVIC→Enable[1] = 0x00000000;
2.6. Các chế độ năng lượng
Trong phần này, chúng ta sẽ xem xét các chế độ quản lý năng lượng bên trong
lõi Cortex. Các tùy chọn đầy đủ về quản lý năng lượng của STM32 sẽ được xem xét ở

phần sau. CPU Cortex có một chế độ ngủ (sleep mode), sẽ đặt lõi Cortex vào chế độ
năng lượng thấp của nó và ngừng thực thi các lệnh bên trong của CPU Cortex. Một phần
nhỏ của NVIC vẫn được hoạt động bình thường, do đó ngắt tạo ra từ các thiết bị ngoại
vi của STM32 có thể đánh thức lõi Cortex.
2.6.1. Cách đi vào chế độ năng lượng thấp của CPU Cortex
Lõi Cortex có thể được đặt vào chế độ sleep bằng cách thực hiện lệnh WFI
(Wait For Interrupt) hoặc WFE (Wait For Sự kiện). Trong trường hợp thực thi lệnh
WFI, lõi Cortex sẽ tiếp tục thực hiện và phục vụ ngắt đang chờ xử lý. Khi trình phục vụ
ngắt-ISR kết thúc, sẽ có hai khả năng xảy ra. Trước tiên, CPU Cortex có thể trở về từ
ISR này và tiếp tục thực hiện chương trình ứng dụng nền như bình thường. Bằng cách
đặt bit SLEEPON EXIT trong thanh ghi điều khiển hệ thống, lõi Cortex sẽ tự động đi
vào chế độ ngủ một khi ISR này kết thúc. Ngắt WFE cho phép lõi Cortex tiếp tục thực
hiện chương trình từ điểm mà nó được đặt vào chế độ sleep. Nó sẽ khơng nhảy đến và
thực thi một trình phục vụ nào. Một sự kiện đánh thức (wake-up) chỉ đơn giản đến từ
một thiết bị ngoại vi dù cho nó khơng được kích hoạt như là một ngắt bên trong NVIC.

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 20


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

2.6.2. Khối hỗ trợ gỡ lỗi CoreSight
Tất cả các CPU ARM đều trang bị hệ thống gỡ lỗi riêng của nó ngay trên chip.
CPU ARM7 và ARM9 CPU có tối thiểu một cổng JTAG cho phép một công cụ gỡ lỗi
chuẩn kết nối với CPU và tải chương trình vào bộ nhớ RAM nội hoặc bộ nhớ Flash.
Cổng JTAG cũng hỗ trợ điều khiển động cơ bản (thiết lập chạy từng bước và các

breakpoint v.v…) cũng như có thể xem nội dung của các vị trí trong bộ nhớ.

Hình 2.13. Hệ thống gỡ lỗi CoreSight bên trong Cortex
Hệ thống gỡ lỗi Cortex CoreSight sử dụng giao diện JTAG hoặc SWD (Serial
Wire Debug). CoreSight cung cấp chức năng chạy kiểm sốt và theo dõi. Nó có thể chạy
khi STM32 đang ở một chế độ năng lượng thấp. Đây là một bước cải tiến lớn về chuẩn
gỡ lỗi JTAG. Phần cứng cơ bản cho một thiết kế
2.6.3. Kiểu đóng gói chip và kiểu chân linh kiện
Các biến thể của dòng Access, USB, Performance và Connectivity của STM32
được thiết kế để phù hợp với nhiều kiểu đóng gói, để cho phép nâng cấp phần cứng một
dễ dàng mà không cần phải thiết kế lại PCB (Printed Circuit Board). Tất cả các vi điều
khiển STM32 đều có sẵn dạng đóng gói LQFP, từ 48 chân đến 144 chân.
2.7. Nguồn cung cấp điện

Hình 2.14. Các miền năng lượng bên trong STM32

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 21


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

Tùy chọn cung cấp năng lượng thứ hai được sử dụng để cung cấp cho ADC. Nếu
ADC được sử dụng, nguồn điện chính VDD được giới hạn trong phạm vi 2.4V đến
3.6V. Đối với chip đóng gói 100 chân, khối ADC có thêm chân điện áp tham khảo
VREF+ và VREF-. Chân VREF- phải được kết nối với VDDA và VREF+ có thể thay
đổi từ 2,4V đến VDDA. Tất cả các kiểu đóng gói chíp cịn lại thì điện áp tham khảo

được kết nối bên trong với các chân cung cấp điện áp ADC . Mỗi nguồn cung cấp năng
lượng cần một tụ chống nhiễu đi kèm.

Hình 2.15. Cách bố trí tụ chống nhiễu cho STM32
2.8. Mạch Reset
STM32 chứa một mạch reset nội, mạch này giữ cho chip ở trạng thái reset cho tới
khi nào VDD vẫn còn dưới mức 2.0V.

Đặc tính của mạch reset bên trong STM32
Bộ POR (Power On Reset) và PDR (Power Down Reset) đảm bảo xử lý chỉ chạy
với một nguồn cấp điện ổn định, và khơng cần bất kì một mạch reset bên ngồi.
Một mạch reset bên ngồi khơng cần thiết trong thiết kế của STM32. Tuy nhiên,
trong quá trình phát triển chân nRST có thể được kết nối với một nút reset đơn giản,
đồng thời chân nRST cũng được kết nối đến cổng JTAG, để cơng cụ phát triển có thể
tạo ra tín hiệu reset vi điều khiển.
2.9. Kiến trúc hệ thống
STM32 gồm nhân Cortex kết nối với bộ nhớ FLASH thông qua đường bus lệnh
chuyên biệt. Các bus dữ liệu (Cortex Data busses) và hệ thống (Cortex System busses)
được kết nối tới ma trận busses tốc độ cao ( ARM Advanced High Speed Busses AHB).

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 22


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

Hình 2.16. Cấu trúc Bus

Cấu trúc bus nội cung cấp đường truyền chuyên biệt dành cho tập lệnh thực thi
và ma trận bus đường dữ liệu cho nhân Cortex and bộ điều khiển DMA truy cập tài
nguyên trên vi xử lý.
2.10. Cấu trúc bộ nhớ

Hình 2.17. Vùng nhớ Flash trên STM32
Vùng nhớ dành cho flash được chia nhỏ thành 3 vùng. Vùng thứ nhất gọi là User
Flash bắt đầu từ địa chỉ 0x00000000. Kế tiếp là System Memory hay cịn gọi là vùng
nhớ lớn. Vùng này có độ lớn 4Kbytes thông thường sẽ được nhà sản xuất cài đặt
bootloader. Cuối cùng là vùng nhớ nhỏ bắt đầu từ địa chỉ 0x1FFFFF80 chứa thơng tin
cấu hình dành cho STM32. Bootloader thường được dùng để tải chương trình thơng qua
USART1 và chứa ở vùng User Flash.
2.11. Tối đa hiệu năng
Ngoài việc hỗ trợ 2 bộ tạo xung nhịp ngoại STM32 cung cấp thêm 2 bộ tạo xung
nhịp nội. Sau khi reset đồng hồ tạo xung của nhân Cortex, bộ tạo xung nhịp tốc độ cao
(High Speed Internal Oscillator) hoạt động ở mức thấp 8MHz. Bộ tạo xung nội còn lại là
Low Speed Internal Oscillator hoạt động ở mức 32768KHz.

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 23


Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

Hình 2.18. STM32 bao gồm 2 bộ tạo xung nhịp nội và 2 bộ tạo xung nhịp ngoại thêm
vào đó là bộ vịng khóa pha (Phase Lock Loop-PLL).
Nhân Cortex có thể được cấp xung nhịp từ bộ tạo dao động nội và ngoại, đồng

thời từ PLL nội. Có một vấn đề là đối với bộ tạo dao động nội tốc độ cao xung nhịp
khơng hoạt động chính xác ở 8MHz do đó khi sử dụng các thiết bị ngoại vi như: giao
tiếp serial hay sử dụng định thời thời gian thực thì nên dùng bộ tạo dao động ngoại tốc
độ cao. Tuy vậy, cho dù sử dụng bộ dao động nào đi nữa thì nhân Cortex ln phải sử
dụng xung nhịp tạo ra từ bộ PLL. Tất cả thanh ghi điều khiển PLL và cấu hình bus đều
được bố trí ở nhóm RCC ( Reset and Clock Control).
 Vịng khóa pha ( Phase Lock Loop )
Sau khi hệ thống reset STM32 nhận xung nhịp từ bộ tạo dao động HIS. Tại thời
điểm đó các bộ tạo dao động ngoại sẽ bị tắt. Bước đầu tiên để STM32 hoạt động ở mức
xung nhịp cao nhất là bật bộ tạo dao động HSE và chờ cho đến khi đi vào hoạt động ổn
định. Bộ tạo dao động ngoại có thể được kích hoạt thơng qua các thanh ghi điều khiển
RCC_Control. Sẽ có 1 bit trạng thái được bật khi chúng đi vào hoạt động ổn định. Một
khi bộ tạo dao động ngoại hoạt động ổn đinh, nó có thể được chọn là đầu vào cho bộ
PLL. Xung nhịp ra được tạo bởi PLL được xác định bằng cách thiết lập các bội số
nguyên trong thanh ghi cấu hình RCC_PLL. Trong trường hợp xung nhịp đầu vào của
PLL là 8MHz khi đó cần cấu hình bội số nhân cho PLL là 9 để tạo xung nhịp 72MHz ở
đầu ra.
Đoạn mã cấu hình STM32 sử dụng dao động từ PLL
//HSE clock, PLLx9
RCC->CFGR = 0x001D0000; //Enable PLL
RCC->CR |= 0x01000000;
While( !(RCC->CR & 0x02000000));
//Set the remaining control fields
RCC->CR |= 0x00000001;
//Set the remaining configuration fields RCC->CFGR |= 0x005D0402;

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 24



Trường đại học cơng nghệ Đồng Nai

Khóa luận tốt nghiệp K13: (2017 – 2021)

-

Cấu hình cho bus
Khi PLL đã được chọn là bộ tạo dao động cho hệ thống, Cortex CPU sẽ hoạt
động ở mức 72MHz. Để cho toàn bộ các phần còn lại của hệ thống hoạt động ở mức tối
ưu người dùng cần phải cấu hình AHB và APB thông qua các thanh ghi cầu nối.
//Enable clocks to the AHB,APB1 and APB2 busses
AHBENR = 0x00000014;
RCC->APB2ENR = 0x00005E7D;
RCC->APB1ENR = 0x1AE64807;
//Release peripheral reset line on APB1 and APB2 buses
RCC->APB2RSTR = 0x00000000;
RCC->APB1RSTR = 0x00000000;
-

Flash Buffer

Khi xem xét kiến trúc hệ thống của STM32 chúng ta có thể thấy nhân Cortex kết
nối với Flash thông qua đường dữ liệu chuyên biệt I-Bus. Bus dữ liệu này hoạt động
cùng tần số với CPU, do vậy nếu CPU lấy dao động từ PLL thì bus dữ liệu sẽ hoạt động
ở mức xung nhịp cao nhất 72Mhz. Cortex CPU sẽ truy cập vào Flash cứ mỗi 1.3ns. Khi
mới hoạt động, nhân STM32 sử dụng bộ tạo dao động nội, do đó thời gian truy cập
Flash là khơng đáng kể.
-


Direct Memory Access

Mặc dù có thể sử dụng chính nhân Cortex để trao đổi dữ liệu giữa các thiết bị
ngoại vi và SRAM nội, tuy nhiên chúng ta có thể hồn tồn sử dụng cơ chế tự động cho
việc này với bộ quản lý DMA. STM32 có 7 kênh DMA độc lập dùng để chuyển dữ liệu
từ: bộ nhớ sang bộ nhớ, ngoại vi tới bộ nhớ, bộ nhớ tới ngoại vi và ngoại vi tới ngoại vi.

Hình 2.19. Mỗi thao tác bộ nhớ DMA bao gồm 4 giai đoạn.
Quá trình truyền dữ liệu gồm 4 giai đoạn: lấy mẫu và phân xử, tính tốn địa chỉ,
truy cập đường truyền, và cuối cùng là hồn tất.

Hình 2.20. Bộ DMA được thiết kế cho truyền dữ liệu tốc độ và kích thước nhỏ.
Bộ DMA chỉ sử dụng bus dữ liệu khi ở giai đoạn truy cập đường truyền.

Đề tài: Thiết kế kít thí nghiệm vi điều khiển ST

Page | 25


×