Professional Documents
Culture Documents
Bài 1. Project Mẫu
Bài 1. Project Mẫu
PROJECT MẪU
Phần mềm chuẩn bị: STM32CubeMX, Keil uVision5,
https://www.keil.com/dd2/pack/
https://www.mediafire.com/file/y69tkgd0f4s4yb9/%5BHshop.vn%5D+ST-
Link+V2.zip
Bước 1: Tạo Folder lưu Project, ví dụ:
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
- Hàm xuất tín hiệu đầu ra của Pin
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
GPIOx: Các khối GPIO của vi điều khiển, bao gồm GPIOA, GPIOB, GPIOC.
GPIO_Pin: Pin muốn điều khiển, từ Pin 0 đến Pin 15.
PinState: Trạng thái Pin
GPIO_PIN_SET: mức 1
GPIO_PIN_RESET: mức 0
Ví dụ:
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_Delay(500);
- Mạch Nạp STM8, STM32 ST-Link V2 (hỗ trợ 2 chuẩn nạp: JTAG, SWD)
Kiểm tra mạch nạp
BÀI 3: LẬP TRÌNH ĐIỀU KHIỂN LED QUA NÚT NHẤN
Bài tập: Lập trình STM32F1 sử dụng một ngõ vào (nút nhấn PA0) và một ngõ
ra (LED PC13). Mỗi lần nhấn nút thì thay đổi trạng thái LED.
Tham số:
GPIOx: Các khối GPIO của vi điều khiển, bao gồm GPIOA, GPIOB, GPIOC.
GPIO_Pin: Pin muốn điều khiển, từ Pin 0 đến Pin 15.
Hàm trả về giá trị SET (mức 1) hoặc RESET (mức 0)
External interrupt (EXTI) hay còn gọi là ngắt ngoài. Là 1 sự kiện ngắt xảy ra khi có tín
hiệu can thiệp từ bên ngoài, từ phần cứng, người sử dụng hay ngoại vi, … Phần này sẽ
trình bày ngắt ngoài của vi điều khiển STM32F103C8T6.
Sơ đồ các khối điều khiển ngắt ngoài:
Các line ngắt ngoài của STM32F103:
STM32F103 có 16line ngắt ngoài riêng biệt. LineX sẽ chứa ngắt cho các chân Px của
các Port. Ví dụ Line0 bao gồm ngắt ở các chân PA0, PB0, …, Line1 bao gồm các chân PA,
PB, …
Lưu ý rằng: Mỗi Line chỉ được phép có được 1 chân ngắt ngoài, nghĩa là nếu đã chọn
PA0 làm ngắt thì những chân 0 của các Port khác không được phép chọn làm ngắt
ngoài.
Ngoài các Line kể trên ra, STM32F103 còn có 4 Line đặc biệt hỗ trợ ngắt ngoài cho các
ứng dụng như PVD, RTC, USB, Ethernet.
• Rising edge (sườn lên): phát hiện ngắt khi tín hiệu chuyển từ mức LOW lên HIGH.
• Falling edge (sườn xuống): phát hiện ngắt khi tín hiệu chuyển từ mức HIGH xuống
LOW.
• Rising/Falling edge (sườn lên và xuống): phát hiện ngắt khi tín hiệu thay đổi mức
năng lượng, từ HIGH xuống LOW và từ LOW lên HIGH.
Không chỉ riêng ngắt ngoài, tất cả các ngắt đều có mức độ ưu tiên mặc định hoặc
người dùng có thể thiết lập lại. Mức độ ưu tiên ngắt có thể hiểu là độ ưu tiên thực hiện
công việc. Ví dụ, chúng ta lập trình 2 chương trình ngắt A và B, trong đó B có mức độ ưu
tiên cao hơn. Nếu vi điều khiển đang thực hiện chương trình ngắt A mà đột nhiên nhận
được yêu cầu ngắt B, thì A sẽ bị tạm dừng và B sẽ chiếm dụng vi xử lý.
Người ta đưa ra 2 khái niệm ưu tiên ngắt là Preemption Priority và Sub Priority. Vi điều
khiển sẽ so sánh Preemption Priority của từng ngắt trước, rồi mới đến Sub Priority. Cụ
thể:
- Ngắt có Preemption Priority cao hơn thì sẽ được ưu tiên thực hiện trước.
Nếu một ngắt Preemption Priority thấp đang trong quá trình được thực thi mà có ngắt
có Preemption Priority cao hơn yêu cầu thì ngắt có Preemtion Priority thấp hơn sẽ tạm
ngưng thực thi, đồng thời ngắt có Preemption Priority cao hơn sẽ chiếm dụng vi xử lý để
thực thi.
- Nếu một ngắt đang thực thi, một ngắt khác có cùng Preemption Priority nhưng có Sub
Priority cao hơn yêu cầu thì cũng sẽ không chiếm dụng vi xử lý. Vi xử lý vẫn tiếp tục thực
hiện ngắt có Sub Priority thấp hơn.
- Nếu các ngắt có cùng Preemtion Priority đang ở trạng thái chờ thì ngắt nào có Sub
Priority cao hơn thì sẽ được thực hiện trước.
- Nếu các ngắt có cùng Preemtion Priority và Sub Priority thì ngắt nào đến trước sẽ
được phục vụ trước.
1. Chọn chip STM32F103C8T6, cấu hình SYS là Serial Wire, và cấu hình dao động.
2. Khởi tạo chân dùng làm ngắt ngoài.
Chọn chân muốn cấu hình ngắt ngoài, click chuột trái và chọn GPIO_EXTI.
GPIO Pull-up/Pull-down: Chọn trở nội kéo lên nguồn hay xuống đất.
(tham khảo lại bài STM32 GPIO)
Hàm sự kiện ngắt, khi vi điều khiển phát hiện ngắt ngoài sẽ nhảy vào thực hiện chương
trình trong hàm này.
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
Tham số:
GPIO_Pin: Chân cấu hình ngắt ngoài
Lưu ý: Bất cứ yêu cầu ngắt ngoài tại chân nào cũng nhảy vào hàm này, vì thế nếu sử dụng nhiều
chân ngắt ngoài thì cần kiểm tra xem đó là chân nào. Ví dụ:
Bước 2: Khởi tạo chân làm ngắt ngoài, ở đây mình chọn chân nút bấm là PA0 và PA1
Bước 5: Khởi tạo và cấu hình cho ngõ ra là led, ở đây mình chọn chân PC13 là led có sẵn
trên kit và thêm 1 led ở chân PC14.
Bước 6: Vào mục Project Manager, đặt tên, chọn đường dẫn lưu Project, chọn trình biên
dịch và sinh code thôi.
Code Keil C