Tạo dự án với Keil ARM

15/03/2012 0 6350
Giới thiệu cách tạo mới dự án cho vi xử lý ARM Cortex-M3 STM32F103RC bằng Keil ARM. Cùng với đó là cách tích hợp bộ thư viện chuẩn CMSIS của ST dành cho dòng ARM này.

 1. Bộ thư viện CMSIS

ST cung cấp cho người dùng bộ thư viện chuẩn lập trình giao tiếp với thiết bị ngoại vi tương thích với chuẩn CMSIS. Thông qua bộ thư viện này, lập trình viên dễ dàng giao tiếp với các thiết bị phần cứng chuẩn của các dòng Cortex-M3 của ST.

Thư viện được chia làm 2 phần:
    + phần hỗ trợ nhân Cortex-M3: bao gồm mã giao tiếp với nhân CPU, và đoạn mã start up code. 
    + phần hỗ trợ các thiết bị ngoại vi: chứa toàn bộ các hàm thư viện điều khiển thiết bị ngoại vi của ST.
Cấu trúc thư viện CMSIS như sau:

    Library
        + CMSIS
            + CM3
                + CoreSupport                  //thư mục chứa hàm hỗ trợ nhân Cortex-M3
                + DeviceSupport              
                    + ST
                        + STM32F10X           //System startup code
                            + startup             //Start up code
            + Documentation                   //tài liệu hỗ trợ
        + STM32F10x_StdPeriph_Driver    //thư mục chứa hàm hỗ trợ thiết bị ngoại vi
            + inc                                   //thư mục chứa header file
            + src                                   //thư mục chứa mã nguồn

 

* Lưu ý: Các hàm được viết và đặt tên theo chuẩn CMSIS, lập trình viên cần tuân theo các quy tắc của CMSIS khi sử dụng hàm, tránh viết lại các hàm truy cập thẳng vào phần cứng khi không cần thiết.

2. Khởi tạo dự án mới
+ Mở Keil IDE, chọn menu “Project->New uVision Project” để tạo dự án mới. Giả dụ đặt tên dự án mới này là 24h_Led.
* Lưu ý: Thường khi tạo project mới hệ thống file quản lý dự án của Keil hay bố trí ở thư mục dự án, điều này dễ bị lẫn lộn với các file nguồn, ta nên tạo một thư mục con để quản lý các file dự án này.
Chọn chip STM32F103RC cho board GEMv0.1

 

 

Hình 1: Khởi tạo dự án

+ Sau khi dự án mới được tạo, ta nên tổ chức lại hệ thống mã nguồn để dễ dàng theo dõi.

 

Hình 2: Tổ chức thư mục mã nguồn

Như hình 2 ở trên ta tạo 4 nhóm file, các nhóm “CMSIS”, “StdPeriph_Driver” và “Start up” sẽ là các files từ thư viện CMSIS của ST.

* Lưu ý: Khi tạo mới dự án, Keil sẽ hỏi người dùng có sử dụng "start up code" sẵn có không. Chúng ta không sử dụng "start up code" này của Keil mà sẽ dùng của ST có trong bộ thư viện chuẩn.
+ Tích hợp thư viện CMSIS vào chương trình

Chúng ta sẽ lần lượt tích hợp các thư mục trong thư viện vào dự án như sau:
    + Nhóm “CMSIS”: thêm file core_cm3.c ở thư mục “\Libraries\CMSIS\CM3\CoreSupport” và system_stm32f10x.c ở thư mục “\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
    + Nhóm “StdPeriph_Driver”: thêm các file liên quan đến điều khiển ngoạI vi, ở dự án này chúng ta cần điều khiển cổng GPIO, UART nên cần thêm các file: stm32f10x_gpio.c,stm32f10x_usart.c và stm32f10x_rcc.c ở thư mục “\Libraries\STM32F10x_StdPeriph_Driver\src”.
    + Nhóm “Start up”: thêm file startup_stm32f10x_hd.s ở thư mục “Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm”.
    + Nhóm “User”: chứa file của người dùng, giả sử thêm file main.c của ta vào đây.

* Lưu ý: Đối với nhóm StdPeriph_Driver, nên căn cứ vào nhu cầu điều khiển ngoại vi để thêm vào các file tương ứng, tránh thêm các file dư thừa vì làm tăng thời gian biên dịch và tốn tài nguyên hệ thống.
+ Khai báo thư mục thư viện cho dự án
Sau khi thêm các file cần thiết cho dự án, chúng ta chưa thể biên dịch thành công được vì còn thiếu đường dẫn tới các file khai báo thư viện CMSIS
Mở khung điều khiển cấu hình dự án

Chọn tab “C/C++”

 

Thêm các đường dẫn thư mục sau vào dự án:
    + \Libraries: thư mục chứa Libraries CMSIS
    + \Libraries\CMSIS\CM3\CoreSupport
    + \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
    + \Libraries\STM32F10x_StdPeriph_Driver\inc
* Lưu ý : Người dùng có thể thêm vào các đường dẫn thư mục khác của dự án.

3. Cấu hình project
Sau khi đã thêm các file cần thiết cho dự án, chúng ta phải thiết lập các thông số cơ bản để Keil có thể biên dịch ra file thực thi.
+ Để nạp chương trình xuống board GEMv0.1, chúng ta cần cấu hình Keil biên dịch ra file hex(hoặc bin).
Mở khung cấu hình dự án, chọn tab “Output”, check và ô “Create HEX File”

+ Để tiện sắp xếp tài nguyên của dự án, ta nên xếp các file tạm được sinh ra bởI Keil vào các thư mục riêng

Tương ứng với các file object(tab Output) và linker(tab Listing) ta lưu trong thư mục “Obj” và “Lst” cho tiện theo dõi sau này.
+ Cần lưu ý là với bộ thư viện CMSIS, chúng ta sử dụng khá nhiều kỹ thuật “macro” trong lập trình. Có một số “macro” cần khai báo “define” sẵn trong dự án để có thể biên dịch thành công.

* Lưu ý: Nếu sử dụng bộ thư viện chuẩn cho thiết bị ngoại vi, nên khai báo macro:USE_STDPERIPH_DRIVER.

 

4. Trình diễn

+ Nếu có sẵn board GEMv0.1, chúng ta có thể nạp trực tiếp file .hex sau khi biên dịch xuống chíp thông qua Flash Downloader của ST bằng cổng COM.

+ Nếu không có board, chúng ta có thể xem bằng cách dùng Debug Simulator của Keil

+ Chạy Debug chương trình, mở cửa sổ theo dõi các thiết bị ngoại vi ở menu “Peripherals” chọn ngoại vi tương ứng, giả sử đó là Port C của GPIO.

Bấm F10(hoặc F11) để chạy debug từng dòng lệnh đồng thời theo dõi giá trị của Port C thay đổi.

 

Nguồn: ARM VietNam

Đăng nhập