25
Ở đây mình sử dụng Keil C v4 Sau khi cài đặt Keil C xong không như lập trình với PIC hay AVR mà mình đã làm, mình thấy arm có nhiều ngoại vi. Mỗi ngoại vi lại có nhiều chức năng, nhiều cách cấu hình. Vì vậy để có thể sử dụng các ngoại vi bằng cách nhớ các thanh ghi và chức năng của chúng sẽ rất mất thời gian và phát triển ứng dụng chậm. ST đã tạo ra 1 thư viện ngoại vi cho chip của họ và ta sẽ sử dụng thư viện này để phát triển ứng dụng. Sau khi tải về thư viện ngoại vi của ST và giải nén ra ta sẽ được như sau: Ở đây mình giải nén vào thư mục D:\Arm\STM32F4\Library 1

Guide Keil C V.4

Embed Size (px)

DESCRIPTION

Hướng dẫn sử dụng Keil C 4 để lập trình cho ARM cortex M4

Citation preview

Page 1: Guide Keil C V.4

Ở đây mình sử dụng Keil C v4Sau khi cài đặt Keil C xongkhông như lập trình với PIC hay AVR mà mình đã làm, mình thấy arm có nhiều ngoại vi.Mỗi ngoại vi lại có nhiều chức năng, nhiều cách cấu hình. Vì vậy để có thể sử dụng các ngoại vi bằng cách nhớ các thanh ghi và chức năng của chúng sẽ rất mất thời gian và phát triển ứng dụng chậm. ST đã tạo ra 1 thư viện ngoại vi cho chip của họ và ta sẽ sử dụng thư viện này để phát triển ứng dụng.Sau khi tải về thư viện ngoại vi của ST và giải nén ra ta sẽ được như sau:

Ở đây mình giải nén vào thư mục D:\Arm\STM32F4\Library

1

Page 2: Guide Keil C V.4

Tạo Project:-Khởi động Keil 4-Chọn Project\ New uVision Project-Đặt tên Project

-Chọn chip: ở đây ta chọn STM32F407VG là chip trên kit stm32f4 discovery

2

Page 3: Guide Keil C V.4

-Chọn yes

3

Page 4: Guide Keil C V.4

4

Page 5: Guide Keil C V.4

5

Page 6: Guide Keil C V.4

- Thêm file mã chương trình

Lưu với tên main.c

6

Page 7: Guide Keil C V.4

Gõ vào nội dungPHP:#include <stm32f4xx.h> void main(void) { }

7

Page 8: Guide Keil C V.4

Thêm file vừa tạo vào Project

8

Page 9: Guide Keil C V.4

9

Page 10: Guide Keil C V.4

Biên dịch thử

10

Page 11: Guide Keil C V.4

Không giống như chúng ta đã từng làm với 8051 và PIC hay AVRchỉ cần có hàm main là có thể biên dịch thành công.

Ở đây biên dịch báo lỗi

11

Page 12: Guide Keil C V.4

Tiếp tục với việc tạo Project:Lí do biên dịch lỗi là nó không tìm thấy hàm SystemInitHàm này nằm trong file system_stm32f4xx.c thuộc thư viện chúng ta tải về ở trênTrên máy mình làD:\Arm\STM32F4\Library\STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\TemplatesTùy thuộc vào bạn giải nén trên máy bạn ở đâu thì bạn tìm ở thư mục STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates đóCopy file này vào thư mục đã tạo Project và thêm nó vào Project

Biên dịch lại

12

Page 13: Guide Keil C V.4

Vậy là đã biên dịch thành công

Tuy nhiên ta gặp 1 cảnh báo là hàm main phải trả về kiểu int

Ta sửa lại thành int main và biên dịch lại sẽ không còn cảnh báo này nữa

13

Page 14: Guide Keil C V.4

Giờ chúng ta xem thư mục chứa project:

Trông rất lộn xộn vì nó chứa các file tạm trong quá trình biên dịch.v.v........Ta sẽ cấu hình để Keil lưu các file này vào thư mục do ta chỉ địnhKhi nhìn vào Project sẽ gọn gàng hơn. Ta cũng sẽ tạo riêng các thư mục để tách các file mã nguồn ra thành các nhómChọn Project \ Clean Target để Keil xóa các file tạm đi và thư mục Project của chúng ta chỉ còn lại như sau (như trước khi ta tiến hành biên dịch)

14

Page 15: Guide Keil C V.4

15

Page 16: Guide Keil C V.4

Trong thư mục Project ta sẽ tạo mới các thư mục sau:CMSISLstOutStdLibUser

Sau đó ta chuyển file system_stm32f4xx.c vào thư mục CMSISFile main.c vào thư mục UserTạo mới file ISR.c trong thư mục user: file này sẽ dùng để viết các hàm xử lý ngắtCopy file stm32f4xx_conf.h (file cấu hình cho thư viện của ST)ở thư mục STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Project\STM32F4xx_StdPeriph_Templatesvào thư mục StdLibTrên Keil ta cũng tạo lại như sau

16

Page 17: Guide Keil C V.4

Để báo cho Keil đưa các file tạm vào thư mục Lst ta đã tạo ở trên:Target Option \ Listing \ Select Folder for Listings

17

Page 18: Guide Keil C V.4

Và tiếp theo báo cho Keil đưa file Hex sau biên dịch vào thư mục Out ta đã tạoTarget Option \ Output \ Select Folder for Objects

18

Page 19: Guide Keil C V.4

Nhớ đánh dấu vào ô Create HEX file để Keil tạo ra file HEX

19

Page 20: Guide Keil C V.4

Cấu hình đường dẫn thư mục để có thể dùng thư viện của ST:Target Option \ Target : Đánh dấu vào Use MicroLib

C/C++Thêm dòng: HSE_VALUE=8000000,USE_STDPERIPH_DRIVER

20

Page 21: Guide Keil C V.4

Ở mục include path

Chọn New và thêm vào 2 mục- Mục thứ nhất chỉ đến thư mục StdLib trong thư mục Project- Mục thứ 2 chỉ đến thư mục inc của thư viện ngoại vi

21

Page 22: Guide Keil C V.4

Có 1 chút rắc rối là thư viện ngoại vi viết cho thạch anh 25MHznhưng thạch anh trên kit là 8MHz nên ta cần sửa lại(đó là lí do tại sao có dòng HSE_VALUE=8000000 mà ta đã làm ở trên)Mở file system_stm32f4xx.c

22

Page 23: Guide Keil C V.4

Sửa dòng#define PLL_M 25 thành#define PLL_M 8

Cấu hình để sử dụng mạch nạp ST-Link trên kit.........................Cuối cùng là Project mẫu mình đã làm để có thể sử dụng.

Mỗi khi dùng thì chỉ cần copy lại và đổi tên

23

Page 24: Guide Keil C V.4

Bạn nào dùng thì có thể bố trí thư viện như trên máy mình hoặc chỉnh lại tham chiếu đến thư viện trong Project

24