Xem mẫu

TinCanBan.Com – VanMau.Net Hướng dẫn làm quen với STM8F103 Trước khi bắt đầu với những bài viết hướng dẫn các bạn tiếp cận với từng ngoại vi cụ thể trên chip STM8. Bài viết hôm nay Ano xin được giới thiệu tới các bạn cấu trúc phần cứng của STM8. Từ đó sẽ giới thiệu mục lục các bài viết hướng dẫn sử dụng các ngoại vi trên STM8 để các bạn tiện theo dõi. Mục tiêu cụ thể : Có cái nhìn tổng quát về cấu trúc phần cứng của chip STM8. Những vấn đề cần lưu ý trong thiết kế phần cứng ứng dụng chip STM8. Ok ! chúng ta bắt đầu thôi. Central Processing Unit (CPU) : được thiết kế với kiến trúc 8-bit, bao gồm 6 thanh ghi cho phép thực thi hiệu quả 80 lệnh trong tập lệnh của CPU. 6 thanh ghi của CPU bao gồm : • Accumulator (A). • Index Registers (X and Y). • Program Counter (PC). • Stack Pointer (SP). • Codition Code Register(CC). Bootloader : vi chương trình hỗ trợ bootloader của STM 8 được nạp sẵn trong ROM nội (dung lượng 2Kbyte ) của STM8 . cũng giống như các trình bootloader khác, chương trình bootloader trên STM8 có nhiệm vụ nạp chương trình ứng dụng của người dùng vào bộ nhớ flash /eeprom (nằm trong chip) thông qua các chuẩn giao tiếp SPI,UART, CAN. Cấu trúc bộ nhớ : sử dụng bộ nhớ flash để chứa chương trình thực thi và bộ nhớ EEPROM để chứa dữ liệu. Người dùng hoàn toàn có thể sử dụng các lệnh tác động vào các thanh ghi điều khiển để thực hiện các thao tác đọc ghi vào các bộ nhớ này. Debug Module : thông qua module giao tiếp đơn dây SWIM (single wire interface module) STM8 hỗ trợ người dùng các thanh ghi điều khiển cho phép người dùng tác động trực tiếp vào các thanh ghi của CPU để có thể thực hiện debug chương trình ứng dụng trên phần cứng đang hoạt động. Bộ điều khiển ngắt (ITC) : Đây là khối quản lý ngắt tập trung trên chip STM8. Cho phép quản lý các ngắt phần cứng (các yêu cầu ngắt từ các chân I/O hay từ các ngoại vi) và các ngắt phần mềm (TRAP). Có thể phân chia thành 4 cấp ưu tiên với tổng cộng 32 ngắt. Các ngắt này được quản lý bởi các thanh ghi sau : • Bit I1 và I0 trong thanh ghi CCR. • Thanh ghi software priority registers (ITC_SPRx). Power Supply : Sử dụng 4 khối nguồn sau : • VDD/VSS : điện áp cung cấp 3V- 5.0V , đây là khối nguồn nuôi chính cho MCU TinCanBan.Com – VanMau.Net hoạt động. • VDDO/VSSO : điện áp từ 3V – 5V, đây là khối nguồn dùng cho các chân I/O (tùy thuộc vào từng package mà sẽ có 1 hay 2 cặp chân VDDO/VSSO). • VDDA/VSSA : nguồn nuôi cho các khối analog bên trong MCU. • VREF+/VREF- : điện áp tham chiếu cho khối ADC. Tín hiệu RESET (RST): Hỗ trợ các tín hiệu reset sau: • Reset ngoài thông qua chân NRST. • Power-on reset (POR). • Brown-out reset (BOR). • Independent watchdog reset (IWDG). • Window watchdog reset (WWIG). • Software reset. • SWIM reset. • Illegal opcode reset. • EMC reset. Clock Control : Được thiết kế cho phép ứng dụng của bạn được thực hiện với hiệu suất cao tiết kiệm công suất tiêu thụ của CPU. Cho phép bạn có thể quản lý nguồn tần số xung clock cung cấp cho từng ngoại vi từ tần số xung clock chính dựa vào các bộ chia tần số. Có 4 nguồn xung clock có thể được sử dụng để tạo ra tần số xung clock chính cung cấp cho CPU : • Nguồn xung clock thạch anh bên ngoài(HSE) : 1 – 24Mhz • Nguồn xung user-external HSE user-ext: 24Mhz • Bộ dao động nội RC tốc độ cao (HSI): 16Mhz • Bộ dao động nội RC tốc độ thấp (LSI): 18Khz Quản lý năng lượng : Sau khi reset, CPU sẽ chạy vào chế độ Run Mode. Trong chế độ này, tần số xung clock của CPU sẽ là fCPU và thực thi chương trình. Trong chế độ Run Mode thì chúng ta có thể có một số cách để giảm điện áp tiêu thụ : • Giảm tốc độ xung clock của hệ thống. • Tập hợp các tần số xung clock của các ngoại vi riêng lẻ khi không sử dụng chúng • Tắt các ngoại vi analog khi không sử dụng đến chúng. Tuy nhiên không phải lúc nào cũng chạy ở chế độ Run Mode, để giảm điện năng tiêu thụ cho CPU chúng ta có thể cho CPU chạy ở các chế độ khác tiêu thụ điện năng thấp hơn như : • Wait. • Active- Halt. TinCanBan.Com – VanMau.Net • Halt. Tiếp theo sau đây là danh sách các bài viết hướng dẫn giao tiếp ngoại vi tiếp theo trong series này: • UART. • Ngắt • Timer. • ADC. Bước đầu làm quen với STM8 - Creating Project GPIO Chào các bạn . Hy vọng các bạn đều thành công với bài viết trước của mình. Hôm nay, bài viết tiếp theo trong series này sẽ hướng dẫn các bạn cách tạo 1 project với STVD + Cosmic. Chúng ta sẽ thực hiện tạo project sử dụng thư viện ngoại vi GPIO. Ở đây, ta sẽ thực hiện ứng dụng điều khiển led LD1 trên KIT STM8s Discovery nhấp nháy. Để thuận tiện cho việc tiếp cận, Ano có xây dựng sẵn 1 project_template (trong file đính kèm). Các bạn download file này về và tiến hành giải nén nó ra desktop nha. Bây giờ chúng ta bắt đầu với project đầu tiên của mình. Mở chương trình STVD lên (cách mở thì các bạn tham khảo bài viết trước của mình nha). Click File > Open workspace Hộp thoại Open workspace hiện ra và bạn chọn đường dẫn tới STVD_workspace.stw trong thư mục project_template của mình. Cụ thể đường dẫn ở đây như sau : Desktop\Project_template\Project\STVD\Cosmic\STVD_ workspace.stw chonj vào file STVD_workspace.stw và click open. Sau khi chúng ta đã mở thành công worspace. Chúng ta làm tiếp bước tiếp theo là add các thư viện ngoại vi vào chương trình, như đã nói ở trên, trong ví dụ này chúng ta sẽ sử dụng thư viện ngoại vi GPIO của STM8. Cách add thư viện ngoại vi GPIO nhu sau : Bước 1 : add header file stm8s_gpio.h của thư viện GPIO, cách thực hiện như sau : Trong cửa sổ worksapce của chương trình, bạn Right click vào Include Files sau đó Left click vào Add Files to Folder như hình sau : cửa sổ open mở ra, bạn chọn đường dẫn tới file stm8s_gpio.h của thư viện GPIO trong thư mục project_template, cụ thể đường dẫn như sau: \Desktop\demo_gpio\Libraries\STM8S_StdPeriph_Drive r\inc\stm8s_gpio.h click vào chọn file stm8s_gpio.h và click vào open. Bước 2 :add source file stm8s_gpio.c của thư viện GPIO, cách thực hiện như sau : Trong cửa sổ worksapce của chương trình, bạn Right click vào Source Files sau đó Left click vào Add Files to Folder như hình sau : TinCanBan.Com – VanMau.Net cửa sổ open mở ra, bạn chọn đường dẫn tới file stm8s_gpio.c của thư viện GPIO trong thư mục project_template, cụ thể đường dẫn như sau:\Desktop\demo_gpio\Libraries\STM8S_StdPeriph_Drive r\src\stm8s_gpio.c click vào chọn file stm8s_gpio.c và click vào open. Sau khi tiến hành add file xong. Bây giờ chúng ta bắt đầu viết code cho file main.c trong thư mục Source Files của cửa sổ workspace. Đầu tiên ta khai báo thư viện ngoại vi được sử dụng : Code: #include "stm8s.h" #include "stm8s_gpio.h" Ở đây : #include "stm8s.h" là có sẵn trong file main.c bạn không cần chỉnh sửa gì cả. #include "stm8s_gpio.h" đây là header của thư viện ngoại vi GPIO mà mình sẽ dùng trong ví dụ này, sau này bạn muốn dùng thư viện ngoại vi nào thì chỉ cẩn add file của thư viện đó (như trên) và tiến hành khai báo trong main.c Tiếp theo define chân dùng để điều khiển led. Theo thiết kế thì led LD1 trên KIT được điều khiển bởi chân(pin) 0 của cồng (port) D , vì vậy ta tiến hành khai báo như sau : Code: #define LED_GPIO_PORT (GPIOD) #define LED_GPIO_PINS (GPIO_PIN_0) Khai báo prototype cho hàm con Delay(). Hàm này dùng để tạo thời gian delay giữa các lần nhấp nháy của led. Code: void Delay (uint16_t nCount); Tiếp theo, ta edit code cho hàm void main() như sau : Code: void main(void) { /* Initialize I/Os in Output Mode */ GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST); while (1) { /* Toggles LEDs */ GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS); Delay(0xFFFF); TinCanBan.Com – VanMau.Net } } Nói một chút về chương trình trên nhỉ. _ Hàm GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST); có tác dụng sẽ khởi động và thiết lập chân 0 của cổng D(chân dùng để điều khiển Led LD1) theo kiểu : Output push-pull, low level, 10MHz (chi tiết cụ thể về các mode của GPIO các bạn tham khảo reference manual). _Hàm GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS); sẽ thưc hiện thao tác đọc trạng thái hiện tại của chân 0 cổng D, sau đó đảo trạng thái đó lại và xuất ngược trở lại chân 0 cổng D. Cụ thể : Nếu trạng thái hiện tại là 1 thì nó sẽ chuyển sang giá trị 0 và xuất ra. Nếu trạng thái hiện tại là 0 thì nó sẽ chuyển sang giá trị 1 và xuất ra. _ Hàm Delay (): tạo thời gian delay giữa các lần chuyển trạng thái của chân 0 cổng D. Viết code cho hàm Delay() như sau : Code: void Delay(uint16_t nCount) { /* Decrement nCount value */ while (nCount != 0) { nCount ; } } Sau đó ta lưu lại code vừa viết. Kết nối kit vào PC và tiến hành compile và debug chương trình. (Cách thực hiện tham khảo bài viết trước của mình). Cách bạn có thể thử thay đổi thời gian delay, hoặc dùng các hàm khác trong thư viện ngoại vi để thực hiện điều khiển nhấp nháy led. Bước đầu làm quen với STM8 - TIMER và Interrupt Chào các bạn ! Hôm nay Ano xin tiếp tục series hướng dẫn sử dụng ngoại vi trên STM8. Trong bài viết hôm nay mình xin hướng dẫn các bạn thực hiện một demo nhỏ sử dụng ngoại vi Timer của SMT8. Đồng thời cũng trong bài viết này, mình sẽ hướng dẫn cách sử dụng interrupt trong SMT8s bằng việc sử dụng interrupt của Timer. Cấu trúc bài viết của ngày hôm nay như sau : Phần 1 : ... - tailieumienphi.vn
nguon tai.lieu . vn