[STM32F103] Bài 2 Tạo một project mới


1 Cấu trúc một project

Trước tiên download thư viên STM32F10x_StdPeriph_Lib_V3.5.0 này về và giản nén nó ta được các file sau. -Tiếp theo đến nơi mà bạn muốn lưu project tạo một folder mới và coppy file Libraries ở trên vào folder này. -Sau đó tạo thêm các folder như sau. Doc : chứa các tệp ghi chú. Libraries : chứa các file thư viện Project: sẽ chứa file keilc project và file hex sinh ra. User : chứa các file thư viện do người dùng tự tạo.

2. Tạo project trên keilc và cấu hình thư viện

Mở keil C lên chọn new uVision project Một cửa sổ hiện ra bạn trỏ đến nơi lưu project ta đã tạo ở phần trên. Tiếp theo là cửa sổ chọn chip. các bạn chọn chip để lập trinh. ở đây mình chọn chip F103C8T6 Một cửa sổ hiện ra các bạn tắt nó đi. Tiếp theo nhấn vào biểu tượng khoanh màu xanh này. Các bạn tạo 4 Group STARTUP, FWLIB, CMSIS, USER, DOC chọn group STARTUP và thêm file startup_stm32f10x_md trong thư mục project_của_ban\Libraries\CMSIS\startup. Tương tự thêm các file core_cm3.c và system_stm32f10x.c trong thư mục project_của_ban\Libraries\CMSIS vào group CMSIS. group FWLIB thêm các file trong thư mục project_của_ban\Libraries\STM32F10x_StdPeriph_Driver\inc Cuối cùng các bạn nhấn ctrl+n để tạo file mới. sau đó ctrl+s để lưu file này với tên main.c vào thư mục User và add file này vào group USER. ta được các group như hình Thử nhấp nháy một con led luôn. Tiếp theo là cấu hình option. click vào biểu tượng option Chọn tab C/C++ mục define gõ lại như hình. xem file stm32f10x.h để hiểu rõ hơn vì sao lại viết như vậy. phần này mục đích để liên kết đến các folder thư viện. nếu bạn k làm bước này thì vd khi include thư viện bạn phải viết #include <./user/main.h> còn nếu thực hiện bước này bạn chỉ cần viết #include
thôi Tiếp theo sang debug chọn mạch nạp Sau khi cấu hình xong nhấn ok cắm mạch nạp build và load chương trình vào kit

DOWNLOAD PROJECT MẪU : Ở ĐÂY

[ARM STM32F103] Bài 1 Timer hệ thống(SYSTICK)

SYSTICK là gì?

Systick là một bộ đếm xuống 24 bit và có khả năng tự động nạp lại giá trị(auto reload).

Chức năng của nó là gì?

Systick được ví như một cái đồng hồ đếm ngược, nó được tạo ra để cung cấp một bộ thời gian chuẩn cho hệ thống. Đồng hồ Systick được sử dụng để cung cấp một nhịp đập hệ thống cho hệ điều hành thời gian thực RTOS hoặc để tạo một ngắt có tính chu kì hay đơn giản để tạo một khoảng delay.

Các thanh ghi liên quan

1.SysTick control and status register(SYS_CTRL)

Ở đây chúng ta chỉ quan tâm đến các bit COUNTFLAG(bit 16), CLKSOURCE(bit 2), TICKINT(bit 1) và ENABLE(bit 0).
-bit COUNTFLAG: đây là bit đếm cờ. bit này bằng 1 khi giá trị đếm chuyển từ 1 về 0.
-CLKSOURCE : đây là bit chọn nguồn clock. bằng 1 khi clock lấy trực tiếp từ AHB, bằng 0 khi nguồn clock = AHB/8.
-TICKINT: bit yêu cầu ngoại lệ ngắt xảy ra.
- ENABLE: 1=cho phép sử dụng systick. 0= cấm sử dụng systick.

Các bạn có thể xem sơ đồ sau để hiểu hơn cách hoạt độngc của systick

2.SysTick reload value register (STK_LOAD)

Mặc dù đây là thanh ghi 32 bit nhưng nó chỉ sử dụng 24 bit để lưu giá trị đếm.
Giá trị mà nó có thể lưu trữ là 0x00FFFFFF với hệ hexa hay 16.777.215 với hệ thập lục.

3.SysTick current value register (STK_VAL)


Thanh ghi này cũng chỉ có 24 bit được sử dụng. nó có tác dụng trả về giá trị hiện tại mà bộ đếm đang đếm.

4.SysTick calibration value register (STK_CALIB)

Tính toán giá trị cho Load value

ví dụ hệ thống có nguồn clock là 72Mhz. yêu cầu khoản thời gian xảy ra ngắt 10ms(cứ sau 10ms thì giá trị đếm về 0). vậy giá trị load nạp vào là bao nhiêu?
Với Clock period là khoảng thời gian thực hiện một chu kì hay chình bằng 1/frequency. thay công thức trên có:
load = 10ms * frequency -1 = 10ms * 72Mhz -1 = 10*10^-3 * 72 * 10^6 - 1 = 799999