Chương 1: Giới thiệu: Trong chương này, nhóm thực hiện đề tài trình bày tổng quan về tình hình nghiên cứu và triển khai của hệ thống vườn thông minh. Mục tiêu, đối tượng và giới hạn của đề tài nghiên cứu. Chương 2: Cơ sở lý thuyết: Ở chương này nhóm thực hiện đề tài sẽ giới thiệu sơ lược lý thuyết về mạch STM32, chuẩn Zigbee, ngôn ngữ Python, ngôn ngữ lập trình web và web server Chương 3: Thiết kế hệ thống: Giới thiệu về phần cứng, các công cụ và phần mềm hổ trợ trong quá trình xây dựng và thiết kế phần cứng, phần mềm. Đưa ra giải thuật để xử lý và giải thích lưu đồ, cách thức hoạt động của các phần bên trong.
Chương 4: Kết quả thực hiện: Kiểm nghiệm hoạt động của toàn bộ hệ thống, kết quả hoạt động của hệ thống. Chương 5: Kết luận và hướng phát triển: Chương này trình bày những kết luận chung về đề tài, những mặt còn hạn chế và hướng phát triển. 8 do an CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ ARM CORTEX M3 STM32F103 2.1 Tóm tắt lịch sử ARM ARM được thành lập vào năm 1990 bởi Advanced RISC Machines Ltd, một công ty liên doanh của Apple Computer, Acorn Computer Group, và VLSI Technology. Năm 1991, ARM giới thiệu họ vi xử lý được cấp phép đầu tiên ARM6 và VLSI.
Sau đó, các công ty khác, bao gồm Texas Instruments, NEC, Sharp, và STMicroelectronics, được cấp phép thiết kế vi xử lý ARM, mở rộng các ứng dụng của bộ vi xử lý ARM vào điện thoại đi dộng, đĩa cứng máy tính, hỗ trợ các thiết bị số cá nhân (PDA), hệ thống giải trí gia đình, và nhiều sản phẩm tiêu dùng khác. Dòng ARM Cortex là một bộ xử lí thế hệ mới đưa ra một kiến trúc chuẩn cho nhu cầu đa dạng về công nghệ. Không giống như các chip ARM khác, dòng Cortex là một lõi xử lí hoàn thiện, đưa ra một chuẩn CPU và kiến trúc hệ thống chung. Dòng Cortex gồm có 3 phân nhánh chính: dòng A dành cho các ứng dụng cao cấp, dòng R dành cho các ứng dụng thời gian thực như các đầu đọc và dòng M dành cho các ứng dụng vi điều khiển và chi phí thấp.
STM32 được thiết kế dựa trên dòng Cortex-M3, được thiết kế đặc biệt để nâng cao hiệu suất hệ thống, kết hợp với tiêu thụ năng lượng thấp, Cortex M3 được thiết kế trên nền kiến trúc mới, do đó chi phí sản xuất đủ thấp để cạnh tranh với các dòng vi điều khiển 8 và 16 bit truyền thống. 9 do an Hình 2.1: Cấu trúc vi điều khiển ARM dùng lõi Cortex-M3 2.2 Đặc điểm nổi bật của STM32 ST đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9, nhưng STM32 là một bước tiến quan trọng trên đường cong chi phí và hiệu suất, 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ác nhau, được phân thành hai nhóm: dòng Performance có tần số hoạt động của CPU lên tới 72 MHz, có đầy đủ các ngoại vi và dòng Access có tần số hoạt động lên tới 36 MHz, có ít ngoại vi hơn so với nhánh Performance. Các biến thể STM32 trong hai nhóm này tương thích hoàn toàn về cách bố trí chân và phần mềm, đồng thời kích thước bộ nhớ FLASH ROM có thể lên tới 128K và 20K SRAM.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.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ắ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 vi tinh vi. Để đáp ứng các yêu cầu khắc 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.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.4 Phát triển phần mềm Nếu như đã 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. Ngoà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.3 Các phiên bản cấu trúc ARM Tính đến thời điểm hiện tại thì phiên bản kiến trúc mới nhất của lõi ARM là ARMv7 (Trước đó có ARMv4, ARMv5, ARMv6).
Bộ xử lý Cortex-M3 dựa trên kiến trúc ARMv7 M và có khả năng thực hiện tập lệnh Thumb-2.4 Bộ xử lý và đơn vị xử lý trung tâm Cortex 2.1 Đơn vị xử lý trung tâm Cortex (Cortex CPU) 2.1 Cấu trúc cơ bản Trung tâm của bộ xử lý Cortex là một CPU RISC 32-bit, có đường dữ liệu 32-bit, bank thanh ghi 32-bit, và các giao diện bộ nhớ 32-bit.2: Cấu trúc cơ bản của ARM Cortex-M3 2.2 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 có khả năng dự đoán việc rẽ nhánh để giảm thiểu số lần làm rỗng đường ống. 12 do an Hình 2.3: 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 lệnh if…else) thì các đường ống phải được làm rỗng và làm đầy trước khi mã có thể tiếp tục thực thi.3 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ữ. Để 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ớ.4: Kiến trúc load và store của ARM Cortex-M3 2.4 Các chế độ hoạt động 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ó 13 do an 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.5: Các chế độ hoạt động của Cortex 2.2 Bộ xử lý Cortex 2.1 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 giá trị bộ đếm và tạo sự kiện ngắt khi đếm xuống 0. 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. 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.3 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.6: Cấu trúc của NVIC trong bộ xử lí Cortex 2.5 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). 15 do an Hình 2.7: 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 và bộ điều khiển DMA truy cập tài nguyên trên vi xử lý.6 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.8: Các bộ tạo dao động STM32 16 do an 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. Dù sử dụng bộ dao động nào đi nữa thì nhân Cortex luôn 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).1 Vòng khóa pha Sau khi hệ thống reset STM32 nhận xung nhịp từ bộ tạo dao động HIS.