Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
5,35 MB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG KHOA CƠ KHÍ KỸ THUẬT LẬP TRÌNH VI ĐIỀU KHIỂN STM32F1xxx Giáo viên hướng dẫn : TS TRẦN QUANG KHẢI Sinh viên thực : THÁI VĂN SANG – 101180262 Lớp : 18CDT2 Kỹ thuật lập trình vi điều khiển STM32F1xxx CHƯƠNG : GIỚI THIỆU CHUNG 1.Giới thiệu tổng quát - STM32F103C8T6 vi điều khiển 32bit, thuộc họ F1 dòng chip STM32 hãng ST - Lõi ARM COTEX M3 - Tốc độ tối đa 72Mhz - Bộ nhớ : + 64 kbytes nhớ Flash + 20 kbytes SRAM - Clock, reset quản lý nguồn + Điện áp hoạt động từ 2.0 → 3.6V + Sử dụng thạch anh từ 4Mhz → 20Mhz + Thạch anh nội dùng dao động RC mode 8Mhz 40Khz - Chế độ điện áp thấp: Có mode: ngủ, ngừng hoạt động hoạt động chế độ chờ Cấp nguồn chân Vbat pin để dùng RTC sử dụng liệu lưu trữ nguồn cấp - ADC 12 bit với kênh cho + Khoảng giá trị chuyển đổi từ – 3.6 V + Có chế độ lấy mẫu kênh nhiều kênh - DMA: + kênh DMA + Có hỗ trợ DMA cho ADC, UART, I2C, SPI - Timer: + Timer 16 bit hỗ trợ mode Input Capture/ Output Compare/ PWM Timer 16 bit hỗ trợ để điều khiển động với mode bảo vệ ngắt Input, deadtime Watchdog Timer để bảo vệ kiểm tra lỗi Systick Timer 24 bit đếm xuống cho hàm Delay,… - Có hỗ trợ kênh giao tiếp: I2C USART SPI CAN USB 2.0 full-speed interface - Kiểm tra lỗi CRC 96-bit ID Kỹ thuật lập trình vi điều khiển STM32F1xxx Chương : Tiếp cận với kit STM32F103C8T6 Kit phát triển STM32F103C8T6 Blue Pill ARM Cortex-M3 loại sử dụng để nghiên cứu ARM nhiều nay, giá thành rẻ , số lượng ngoại vi lớn, cộng đồng hoạt động mạnh, nhiều phần mềm hỗ trợ : Keilc , IDR, CubeIDE,… 1.Qúa trình BOOTING kit STM32F103C8T6 Đối với chip điều quan trọng trước tiếp cận với phải hiểu q trình Booting nó, làm gì, bước thực để thực chương trình chạy PC (Program Counter) lại đặt địa hàm main() I BOOT MODE Trong kit STM32F013C8T6 cung cấp ba chế độ BOOT , cấu hình trực tiếp kit Hình 1.1.Các chế độ booting Như biết nhớ FLASH có đặc điểm bật sau : Kỹ thuật lập trình vi điều khiển STM32F1xxx Không liệu điện , reset Ba thao tác quan trọng với Flash : WRITE: để phải ghi vào địa vùng Flash cần xóa giá trị địa trước sau ghi vào Bởi Flash không cho phép ghi đè , điều cần lưu ý nhớ Flash STM32F103C8T6 phép ghi 16 bit (tức bytes) ERASE : Chúng ta xóa Flash theo sector kích thước tùy Flash quy định STM32F103C8T6 1Kbytes READ : Chúng ta đọc giá trị lưu nhớ Flash Như biết nhớ RAM có đặc điểm sau : + Mất liệu điện + Có thể thao tác : WRITE : ghi đè ERASE : xóa theo bytes READ : đọc Như điều quan tâm lưu liệu code nhớ Flash điện hay reset chương trình cịn , cịn ngược lại chọn mode booting vùng Ram liệu , chương trình bị xóa lần chạy Tùy vào mục đích sử dụng ta booting vào vùng nhớ để phù hợp với yêu cầu đề Kỹ thuật lập trình vi điều khiển STM32F1xxx B VECTOR TABLE Để nắm rõ trình Booting , cần phải tìm hiểu bảng Vector table Nếu chip thuộc Core chung , phải tuân thù bảng Vector table Bảng Vector table đặt vùng đầu code , giá trị quy định đặt ban đầu mặc định vùng nhớ có địa bắt đầu (0x00000000 or 0x08000000).Nếu muốn đặt lại bảng Vector table vùng nhớ khác phải ghi trực tiếp địa vào giá trị ghi VTOR Bảng Vector table chứa giá trị khởi tạo stack pointer, địa hàm reset, đồng thời có địa Exceptions Mỗi lần xảy Exception PC nhảy vào giá trị địa ghi VTOR cộng với offset tương ứng Exception chứa bảng Vector table chương trình tự động thực Exceptions kích hoạt Kỹ thuật lập trình vi điều khiển STM32F1xxx Hình 1.2 : Vector table Kỹ thuật lập trình vi điều khiển STM32F1xxx Trước vào hàm main() CPU vào bảng Vector table , sau khởi tạo Stack Pointer thực hàm Reset() Cuối nhảy vào hàm Main() (Vector table đặt vùng đầu địa vùng nhớ Flash theo quy định Linker) C QUÁ TRÌNH BOOTING Chúng ta làm việc với kit STM32F103C8T6 thông qua phần mềm KeilC , để vùng code đặt đâu Linker định , mặc định địa nhớ Flash 0x08000000U Ở đầu vùng nhớ ( 0x08000000 ) chứa bảng Vector Table , tất liệu vùng nhớ đặt lại( remap ) vùng 0x00000000.Điều chứng tỏ gói data vùng nhớ 0x08000000 trùng với gói data vùng nhớ 0x00000000 Kỹ thuật lập trình vi điều khiển STM32F1xxx Quá trình booting: Các bước thực trước vào hàm main: + Khởi tạo Stack Pointer + Thanh ghi PC nạp địa hàm Reset() + Chương trình nhảy vào hàm Reset(), cấu hình clock hệ thống nhảy vào hàm Main() thực chương trình Kỹ thuật lập trình vi điều khiển STM32F1xxx Khi hiểu rõ q trình Booting tự tạo nhiều ứng dụng , ứng dụng lưu vùng nhớ Flash tiến hành sản phẩm cần có tính cập nhật , điều dựa trình Booting này.Để người đọc có cách nhìn trực quan trình Booting đến với ví dụ : Kỹ thuật lập trình vi điều khiển STM32F1xxx 2.Cấu hình Clock cho hệ thống ngoại vi kit SMT32F1xxx Để chip hoạt động cần dao động để tạo tần số cho chip,tùy vào dịng chip có tần số khác Đối với chip STM32F1xx tần số tối đa lên đến 72Mhz Nếu tần số lớn trình thực lệnh nhanh Đối với chip STM32F1xx có ba clocks khác : HSI oscillator clock HSE oscillator clock PLL clock Mỗi nguồn clock lựa chọn tắt , mở độc lập để tối ưu hóa nguồn tiêu thụ chip Thơng thường , thường sử dụng dao động để tạo dao động cho chip Ở kit STM32F103C8T6 sẵn có thạch anh 8Mhz nhằm mục đích tạo dao động cho chip , cấu hình cho chip với tần số lớn : 72Mhz Để cấu hình tần số clock hệ thống cần hiểu rõ sơ đồ hệ thống clock, dựa theo sơ đồ để cấu hình clock cho ngoại vi với tần số xác theo người dùng mong muốn Các bước để thiết lập clock cho vi điều khiển clock ngoại : + Cung cấp dao động ngoại cho vi điều khiển (Fosc = 8Mhz) + Từ giao động , qua chia tần , định bit 17 PLLXTPRE ghi RCC_CFGR + Tiếp theo đến lựa chọn nguồn clock , định bit 16 PLLSRC ghi RCC_CFGR + Từ , qua nhân tần , định bốn bit 18 21 fhi RCC_CFGR với nhân tần từ 16 + Cuối , để tới khối hệ thống 10 Kỹ thuật lập trình vi điều khiển STM32F1xxx Ví dụ : cấu hình ngắt ngồi EXT0 với cạnh xuống ? Chọn chân B0 nơi lấy tín hiệu ngắt , cấu hình ghi AFIO , cấu hình cạnh phát ngắt , ghi cần quan tâm : 28 Kỹ thuật lập trình vi điều khiển STM32F1xxx 29 Kỹ thuật lập trình vi điều khiển STM32F1xxx 30 Kỹ thuật lập trình vi điều khiển STM32F1xxx Code chương trình : 31 Kỹ thuật lập trình vi điều khiển STM32F1xxx Direct memory access controller (DMA) DMA – Direct memory access sử dụng với mục đích truyền data với tốc độ cao từ thiết bị ngoại vi đến nhớ từ nhớ đến nhớ Với DMA, liệu truyền nhanh chóng mà khơng cần đến tác động CPU Điều giữ cho tài nguyên CPU rảnh rỗi cho thao tác khác Trong sơ đồ khối trên, tồn DMA hướng luồng liệu từ ngoại vi UART/SPI/ADC/TIM trực tiếp đến nhớ CPU thực cơng việc tính tốn khác Nhờ giúp cho tài nguyên CPU rỗi dành thời gian thực hoạt động khác 32 Kỹ thuật lập trình vi điều khiển STM32F1xxx DMA kit STM32F103C8T6: 12 kênh cấu hình độc lộc: kênh DMA1 DMA2 Mức độ ưu tiên từ kênh DMA lâp trình phần mềm gồm mức (very high, high, medium, low) Kích thước data sử dụng Byte, Byte (Half Word) 4byte (Word) Hỗ trợ việc lặp lại liên tục Data cờ báo ngắt (DMA Half Transfer, DMA Transfer complete, DMA Transfer Error, DMA FIFO Error, Direct Mode Error) Quyền truy cập tới Flash, SRAM, APB1, APB2, APB Số lượng data lập trình lên tới 65535 DMA có hai điều khiển DMA1 DMA2 với tính kết hợp với ngoại vi khác , DMA hỗ trợ ba giao tiếp : Memory Memory Memory Peripheral Peripheral Memory Các bước để cấu hình DMA : 4.1.Trước hết cần tìm DMA (và kênh) sử dụng Mỗi kênh liên kết với số thiết bị ngoại vi cụ thể phải chọn kênh theo thiết lập 33 Kỹ thuật lập trình vi điều khiển STM32F1xxx Như bạn thấy hình trên, phải sử dụng kênh DMA1 cho UART2_RX Bây phần thiết lập cấu hình thuộc tính DMA 4.2.Khởi tạo DMA Để khởi tạo DMA cần tìm hiểu ghi DMA-CCR : Ở đây, trước hết kích hoạt clock DMA1 Bật tất ngắt ( Halt Transfer, Transfer Complete and Transfer Error) Sao chép liệu từ peripheral to the memory Tiếp theo, bật chế độ circular cho DMA Sau đó, tăng địa ngoại vi phải tắt phải bật tăng địa nhớ, điều có nghĩa đọc giá trị từ vùng nhớ ADC-DATA lần đọc lưu vào giá trị memory, giá trị sau lưu vào vị trí Tiếp theo, chúng tơi chọn kích thước liệu, bit Và cuối đặt mức ưu tiên cho kênh , giữ đây, sử dụng kênh Nhưng sử dụng nhiều kênh, mức độ ưu tiên hữu ích để đặt mức độ ưu tiên kênh 34 Kỹ thuật lập trình vi điều khiển STM32F1xxx Cấu hình địa muốn đọc , địa nhớ ghi data kích thước data Cấu hình chương trình ngắt xảy lỗi truyền data xong Analog-to-digital converter (ADC) ADC (Analog-to-Digital Converter) mạch điện tử lấy điện áp tương tự làm đầu vào chuyển đổi thành liệu số (1 giá trị đại diện cho mức điện áp mã nhị phân) Ảnh mô tả sơ đồ khối ADC Các khái niệm quan trọng làm việc với ADC : 35 Kỹ thuật lập trình vi điều khiển STM32F1xxx Độ phân giải (resolution): dùng để số bit cần thiết để chứa hết mức giá trị số (digital) sau trình chuyển đổi ngõ Bộ chuyển đổi ADC STM32F103C8T6 có độ phân giải mặc định 12 bit, tức chuyển đổi 212= 4096 giá trị ngõ số Thời gian lấy mẫu (sampling time): khái niệm dùng để thời gian lần số hóa chuyển đổi, thời gian lấy mẫu lâu độ xác cao Nhìn vào đồ thị ta thấy ADC cần khoảng thời gian ổn định tSTAB trước bắt đầu chuyển đổi Sau chuyển đổi xong cờ EOC set, kết lưu vào ghi Trước bắt đầu trình chuyển đổi cờ EOC clear Để hiểu trình số hóa STM32 diễn ta theo dõi ví dụ sau Giả sử ta cần đo điện áp tối thiểu 0V tối đa 3.3V, STM32 chia → 3.3V thành 4096 khoảng giá trị (từ → 4095, 212 = 4096), giá trị đo từ chân IO tương ứng với 0V 0, tương ứng với 1.65V 2047 tương ứng 3.3V 4095 Các mode hoạt động ADC: Single conversion mode: Trong chế độ này, ADC thực chuyển đổi người dùng cho phép chuyển đổi tiếp 36 Kỹ thuật lập trình vi điều khiển STM32F1xxx Continuous Conversion Mode: chế độ này, ADC thực hiển chuyển đổi khác chuyển đổi trước vừa kết thúc Scan Mode: Chế độ sử dụng để quét nhóm kênh chuyển đổi thực cho kênh Sau kênh chuyển đổi xong, kênh tự động chuyển đổi Discontinuous Mode: Chế độ sử dụng để chuyển đổi n lần (n