Bước 3: Chọn đường dẫn lưu thư mục cài đặt, sau đó chọn Next... Cài đặt driver cho stlink Nếu sử dụng stlink Link tải: https://www.123link.biz/0eIvm3s Bước 1: Trong thư mục en.stsw-link0
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA KỸ THUẬT ĐIỆN TỬ -o0o -
BÀI THỰC HÀNH MÔN KỸ THUẬT VI XỬ LÝ
NGÀNH HỌC: ĐIỆN-ĐIỆN TỬ VÀ ĐIỆN TỬ-VIỄN THÔNG
ĐỐI TƯỢNG: ĐẠI HỌC
-HÀ NỘI,
Trang 22019-BÀI 1 TỔNG QUAN VỀ VĐK STM32F103C8T6
& MÔ PHỎNG TRÊN PROTUS
Hôm nay chúng ta sẽ đến với những kiến thức cơ bản về vi điều khiểnSTM32F103C8T6
1.Đối tượng tham gia học tập:
Sinh viên đam mê lập trình nói chung và đam mê lập trình vi điều khiển nói riêng
Sinh viên muốn qua kì thi “Kỹ thuật vi xử lí”
2.Yêu cầu:
Có ý thức Tự học tập, tự nghiên cứu
Sinh viên đã hiểu biết cơ bản ít nhất một ngôn ngữ lập trình C
Chăm chỉ hoàn thành các bài tập nếu như các bạn muốn việc học là hiệuquả và tiết kiệm thời gian của chính các bạn
3.Hình thức học tập:
Không nặng về lý thuyết, các bài thực hành sẽ ngắn gọn, dễ hiểu Tuynhiên, cuối mỗi bài, yêu cầu các bạn nghiên cứu thêm và tự đặt ra các câu hỏi
về ý nghĩa mỗi dòng code trong các bài tập
Ghi lại mọi thắc mắc và hỏi trong tiết học để chúng ta cùng thảo luận vàtối ưu code được tốt hơn Khuyến khích tự tìm kiếm câu trả lời trên google
Trang 3Chuẩn bị: DOWNLOAD và cài đặt KeilC
Có rất nhiều trình biên dịch hỗ trợ lập trình STM32F103C8T6 trong đó có một công cụ được sử dụng nhiều là KeilC KeilC hỗ trợ lập trình ASM và C với họ
vi điều khiển STM32F103C8T6 Sau đây là các bước để cài đặt trình biên dịch này
1 Đầu tiên bạn download link dưới đây:
https://www.123link.biz/wNcHyD
2 Hướng dẫn cài đặt:
Bước 1: Giải nén sau đó các bạn chạy file “MDK521a.EXE”, Chọn Next.
Bước 2: Tick vào ô “I agree to all the tems of the preceding License
Agreement”, chọn Next.
Bước 3: Chọn đường dẫn lưu thư mục cài đặt, sau đó chọn Next.
Trang 4Bước 4: Điền thông tin cá nhân và chọn Next.
Bước 5: Chờ cho máy tiến hành cài đặt.
Bước 6: Sau khi cài đặt xong, chọn Finish.
Vậy là bạn đã cài đặt xong phần mềm KeilC cho STM32
Trang 53 Hướng dẫn cài đặt gói pack cho STM32F1XX Bước 1: Vào file Keil5Install vừa giải nén và chay mục
Keil.STM32F1xx_DFP.2.1.0
Bước 2 Nhấn next để cài đặt
Bước 3
Trang 6.Bước 4: Nhấn Finish
4 Tải thư viện chuẩn cho STM32F1XX
Tải thư viện chuẩn cho STM32F103C8T6 theo link sau:
https://www.123link.biz/h99c1ID
5 Cài đặt driver cho stlink (Nếu sử dụng stlink)
Link tải: https://www.123link.biz/0eIvm3s
Bước 1: Trong thư mục en.stsw-link009 sau khi đã giải nén, kích chuột phải vào
file stlink_winusb_install (Windows Batch File) => Run as administrator.
Bước 2: Chọn Next cho các quá trình cài đặt sau đó chọn Finish.
Bươc 3: Kết nối ST-Link V2 với thiết bị STM32, sau đó kết nối với máy tính.
Kiểm tra port để xem việc cài driver có thành công hay không Trong bài nàymình dùng kit STM32F103C8T6 nên mình sẽ kiểm tra như sau:
– Kết nối ST-Link V2 với STM32F103C8T6: Sơ đồ cắm dây từ mạchnạp ST-Link V2 sang kit STM32F103 như sau:
3.3V – 3.3V GND – GND SWDIO – DIO SWCLK – DCLK
Trang 7– Sau khi cắm vào máy tính, chọn và kích chuột phải thư mục This PC -> chọnManage Ở cây thư mục System Tools, kích chọn Device Manager
– Nếu kết quả giống hình bên dưới thì việc cài đặt driver đã hoàn thiện
Bài 1: Hướng dẫn tạo project với KeilC lập trình STM32F103C8T6.
Trang 81 Thực hành tạo project
Bước 1: Tạo thư mục tên thường là tên project, ví dụ GPIO (tên này tùy ý) và 2
thư mục con trong thư mục GPIO với tên là lib và project:
lib: chứa thư viện chuẩn của nhà sản xuất.
project: chứa file viết code, ngắt và các file tạo ra khi chạy chương trình.
Tiếp theo tạo thư mục con keil trong thư mục project (thư mục này sẽchứa các file sinh ra khi biên dịch chương trình) Ta sẽ sử dụng các thư mục nàysau
Bước 2: Copy 2 thư mục CMSIS và STM32F10x_StdPeriph_Driver trong đường …keil\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries vào thư mục lib
Trang 9Bước 3: Copy 5 files main.c, stm32f10x_conf.c, stm32f10x_it.c, stm32f10x_it.h, system_stm32f10x.c từ trong thư mục …keil\ STM32F10x_StdPeriph_Lib_V3.5.0\Project\
STM32F10x_StdPeriph_Template vào thư mục project
Trang 10Bước 4: Khởi động keilC lên để bắt đầu tạo project mới
Chọn Project -> New Uvision project Trỏ đến thư mục keil trong thư mụcGPIO vừa tạo đặt tên project là GPIO(tên này tùy ý) => bấm Save
Sau đó ta có giao diện project như sau:
Bước 5: 1 cửa sổ mới được mở ra để cho chúng ta chọn chip Ở đây chúng ta sử
dụng stm32f103c8t6 nên sẽ chọn MCU là STM32F103C8 => nhấn OK
Trang 11Bước 6: Cửa sổ manage run hiện ra Chọn OK để kết thúc.
Bước 7: Mở cửa sổ Manage project item bằng cách kích vào biểu tượng hình 3
ô vuông màu xanh, đỏ trắng hoặc vào đường dẫn sau : Project => manage => project items.
Trang 12Chỉnh sửa tên ở ô Projects target thành GPIO (thường là tên project) và sửa tên
ở ô Groups thành lib (dùng để chứa các thư viện mẫu) và them group user(thường chứa file main, file chương trình và các thư viện tự phát triẻn)
Add Files trong thư viện mẫu có sẵn vào project của chúng ta vừa tạo Sau đây
chúng ta add file vào mục Group>lib
LƯU Ý vị trí các file cụ thể như sau:
File core_cm3.c nằm trong đường dẫn GPIO\lib\CMSIS\CM3\CoreSupport File startup_stm3210x_md.s nằm trong đường dẫn: GPIO\lib\CMSIS\CM3\ DeviceSupport\ST\STM32F10x\startup\arm và lưu ý là đuôi md.s hay hd.s tùy thuộc vào loại MCU mà ta sử dụng Đuôi file này là đuôi s nên ở Files of type
phải để là All files(*.*) thay vì *.c
3 File misc.c; stm32f10x_gpio.c; stm32f10x_rcc.c nằm trong thư mục GPIO\
lib\STM32F10x_StdPeriph_Driver\src Nếu sử dụng UART hay ADC… thì cầnphải add thêm các thư viện đó cũng nằm trong thư mục này Chi tiết sẽ gặptrong các bài thực hành sau
Trang 13Sau khi add files thì Groups>lib chứa 5 file: core_cm3.c; misc.c;
Trang 14Bước 8: Vào tab Options for target bằng cách click vào biểu tượng đũa magic hoặc đường dẫn sau Project > Options for target Chỉnh sửa các tab theo các
Trang 15 Ở tab C/C++ thêm dòng chữ và add các link giống như hình.
Trang 16 ở tab Utilities click setting
Trang 17Thẻ flash download chọn reset and run.
Sau đó nhấn OK là xong phần setup
Sau đó chúng ta sẽ cắm stlink vào cổng USB của máy tính
Vào lại mục Setting trong tab debug Chọn thẻ debug và thấy đã nhận stlink
(sau khi đã cắm stlink vào cổng USB, ở đây sử dụng mạch nạp stlink V2)
Trang 18Bước 9: Mở file main lên và xóa hết nội dung, chỉ chừa lại nội dung như trong
hình dưới đây Chú ý tên thư viện đã được sử dụng!
Bước 10: Kích vào biểu tượng build (F7) nếu build ở lần đầu tiên và rebuild
cho các lần tiếp theo Xem kết bảng thông báo build output nếu không xuấthiện 0 lỗi tức là đã thành công
Trang 19Hãy chắc chắn mình đã cắm bộ kit vào máy tính, thông qua mạch nạp Stlink.Khi nạp code thì bạn chỉ cần nhấn vào biểu tượng Load hoặc vào Flash =>LoadPhím tắt là F8 Chúc các bạn thành công.
Sau khi thực hiện xong đến bước này, bạn đã có một thư mục chứa một projectmẫu Hãy copy thư mục này lại để sử dụng cho các project ở những bài tiếptheo và không cần phải tạo lại project mới
Trang 20Bài 2: Lập trình nháy LED với STM32F103C8T6.
1 Sơ lược về lý thuyết.
GPIO là từ viết tắt của General purpose I/O ports tạm hiểu là nơi giao tiếpchung giữa tín hiệu ra và tín hiệu vào GPIO là bài cơ bản, cần nắm vững khihọc bất kì một VĐK nào đó Cần hiểu được các thuật ngữ, chế độ, cấu hình, sốlượng… của các chân GPIO Ở STM32 thì các chân GPIO chia ra làm nhiềuPort vd: PortA, PortB… Số lượng Port phụ thuộc vào số lượng chân(pin) vàcách gọi phụ thuộc vào nhà sản xuất (ví dụ VĐK X có PortA mà lại không cóPortD) Mỗi Port thường có 16 chân đánh số từ 0 -> 15 tương ứng với mỗi chân
là 1bit (nhiều dòng có 32 chân) Mỗi chân có 1 chức năng khác nhau như analoginput, external interrupt hay đơn thuần chỉ là xuất tín hiệu on/off ở mức 0,1.Chức năng của mỗi chân thì chúng ta cần tra datasheet của nhà sản xuất trướckhi lập trình hoặc thiết kế mạch
Các mode GPIO của STM32:
- Input floating: cấu hình chân I/O là ngõ vào và để nổi
- Input pull-up: cấu hình chân I/O là ngõ vào, có trở kéo lên nguồn.
- Input-pull-down: cấu hình chân I/O là ngõ vào, có trở kéo xuống GND
- Analog: cấu hình chân I/O là Analog, dùng cho các mode có sử dụngADC hoặc DAC
- Output open-drain: cấu hình chân I/O là ngõ ra, khi output control = 0 thìN-MOS sẽ dẫn, chân I/O sẽ nối VSS (GND), còn khi output control = 1thì P-MOS và N-MOS đều không dẫn, chân I/O được để nổi – không cóđiện thế Nếu bên ngoài nối với VCC qua điện trở thì mặc định xuất là3.3V, khi đó điều khiển mức 0 sẽ xuống GND (Sử dụng trở treo)
- Output push-pull: cấu hình chân I/O là ngõ ra, khi output control = 0 thì
N-MOS sẽ dẫn, chân I/O sẽ nối VSS, còn khi output control = 1 thì MOS dẫn, chân I/O được nối VDD
Trang 21P Alternate function pushP pull : sử dụng chân I/O vừa là ngõ ra và vừa làngõ vào, tuy nhiên sẽ không có trở kéo lên và kéo xuống ở input, chứcnăng output giống Output push-pull Ngoài ra nó còn để sử dụng chochức năng remap.
- Alternate function push-pull : : sử dụng chân I/O vừa là ngõ ra và vừa làngõ vào, tuy nhiên sẽ không có trở kéo lên và kéo xuống ở input, chứcnăng output giống Output open-drain Ngoài ra nó còn để sử dụng chochức năng remap (Bạn có thể google thêm các chức năng remap)
Bài tập 1: Nhấp nháy đèn ở chân PortC chân 13
Trang 22//cai dat cho chan PC13
GPIO_Struct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Struct.GPIO_Pin = GPIO_Pin_13 ;
GPIO_Struct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_Struct);
while(1){
GPIO_SetBits(GPIOC, GPIO_Pin_13);
Delay(1000);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);Delay(1000);
}
}
void Delay(unsigned int time){
unsigned int i,j;
for(i=0;i<time;i++){
for(j=0;j< 0x2AFF; j++);
}
}
Trang 23Bài 2: Điều khiển 8 led sáng tắt theo mong muốn
// dieu khien 8 led
Trang 24GPIOA->ODR = 0x0055;
Delay(1000);
}
}
void Delay(unsigned int time){
unsigned int i,j;
for(i=0;i<time;i++){
for(j=0;j< 0x2AFF; j++);
}
}
Câu hỏi ôn tập:
Muốn thay đổi thời gian sáng, tắt thì làm thế nào? Tại sao trong hàm Delay lại dùng giá trị 0x2AFF?
Muốn 1 đèn ở một vị trí bất kì (trong Port A/B/C) sáng tắt thì sao? Thử code một chương trình nhấp nháy 4 led ở port A
Muốn 8 đèn sáng tắt luân phiên (40-04) thì làm thế nào?
Muốn 8 đèn sáng dần rồi tắt dần thì làm thế nào?
Lập trình để đèn sáng lần lượt từ trái qua phải, sau đó lại sáng lần lượt từ phải qua trái? Bạn cảm thấy thế nào?
Trang 25Bài tập nâng cao theo nhóm
Lập trình trên 8 led (xếp thành 1 cột) của một Port của STM32 để thực hiệnchức năng theo trò chơi xếp hình, hoặc nước nhỏ giọt Cụ thể như sau:
– Đầu tiên trên cùng có 1 LED sáng sau đó LED rơi dần xuống dưới và sẽ dừng lại ở vị trí cuối cùng.
– Khi LED số 1 chạm đến vị trí dưới cùng thì xuất hiện 1 LED sáng ở vị trí ở trên cùng và lặp lại việc rơi xuống dưới và dừng lại khi đến vị trí ngay trên con LED cũ.
– Lặp lại như vậy cho đến khi số LED đầy trên cột và sẽ bắt đầu lại từ đầu.
Bài tập cá nhân
Hãy sắp xếp 16 đèn LED thành chữ cái đầu tiên trong tên của bạn Code hiệuứng cho nó mà bạn thấy đẹp và lạ nhất! Tìm trên mạng hoặc bạn tự nghĩ!