Guide Keil C V.4

Preview:

DESCRIPTION

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

Citation preview

Ở đâ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

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

-Chọn yes

3

4

5

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

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

6

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

7

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

8

9

Biên dịch thử

10

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

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

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

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

15

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

Để 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

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

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

19

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

Ở 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

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

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

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

Recommended