Hôm nay mình sẽ chia sẽ cho các bạn về bài lập trình STM32 với LED P10 hiển thị ngày giờ và chữ.
https://www.youtube.com/watch?v=5qKarRmsOCI
1.PHẦN CỨNG CẦN CHUẨN BỊ
PHẦN CỨNG
LED MA TRẬN P10
Module led ma trận P10 Full color 32×16 gồm 32 led hàng ngang và 16 led hàng dọc, bản thân mỗi led bên trong có 3 led với 3 màu RGB, mỗi pixel cách nhau 1cm. Tổng số led RGB là 32×16=512 LED RGB
Mặt trước LED P10
Mặt sau led P10
PIN HUB
R1: Chân data cho màu đỏ của 8 hàng led bên trên R2: Chân data cho màu đỏ của 8 hàng led phía dưới G1: Chân data cho màu xanh lá của 8 hàng led bên trên G2: Chân data cho màu xanh lá của 8 hàng led phía dưới B1: Chân data cho màu xanh dương của 8 hàng led bên trên B2: Chân data cho màu xanh dương của 8 hàng led phía dưới CLK: Chân đẩy data vào ic ghi dịch LAT: Chân chốt data ( đẩy data lưu trong ic ghi dịch ra ngoài led) OE: Chân cho phép bảng led sáng ( OE=0 thì bảng led được phép sáng, OE=1 thì bảng led auto tắt) A,B,C: 3 chân của ic vào 3 ra 8, tức 3 chân dùng để quét led, cho phép hàng nào sáng. Với 3 chân ABC ta điều khiển đc 8 hàng độc lập, nhưng module P10 có tới 16 hàng => trong 1 thời điểm có 2 hàng cùng sáng => module này quét kiểu 2/16 = 1/8 => Trong 1 thời điểm số led RGB ta có thể điều khiển là 512 x 1/8 = 64 LED RGB
CHIỀU ĐI CỦA DATA
Các bạn có thể thấy, module này chia ra làm 2 nửa theo chiều ngang, với dữ liệu của 8 hàng trên do RGB1 quyết định, còn 8 hàng dưới do RGB2 quyết định. Chân ABC sẽ quyết định hàng nào trong 8 hàng của cả 2 nửa được sáng.
HÀNG
ABC
HÀNG 1
000
HÀNG 2
001
HÀNG 3
010
HÀNG 4
011
HÀNG 5
100
HÀNG 6
101
HÀNG 7
110
HÀNG 8
111
STM32F103C8T6
Chúng ta cần sử dụng các chức năng STM32 để lập trình:
Nút nhấn cấu hình ngày giờ:
Các chân GPIO xuất output điều khiển các đèn
Dùng ADC đọc giá trị điện áp từ điện trở phát quang điều chỉnh độ sang của led
Dùng TIMER2(timer) , TIMER3(quet led) , TIMER4(PWM OE).
Dùng I2C đọc dữ liệu thời gian, ngày giờ.
Dùng UART để truyền nhận dữ liệu bluetooth
Sơ đồ nguyên lý kết nối chân:
2. Cấu hình STM32 bằng CuBeMX
File -> New Project -> Gõ STM32F103C8 tại Part Number -> Double Click vào kết quả bên dưới đê tạo board
Cấu hình cổng nạp System core -> SYS -> Debug -> Serial Wire : cho cổng nạp ST-LINK V2
Cấu hình xung Clock cho vi điều khiển
RCC -> High Speed Clock -> Crystal/Ceramic Resonator
Các chân PB1 -> PB10 , PB13 , PB14, PB6, PB7 chế độ GPIO_OUTPUT
Các chân PB4, PB5 chế độ GPIO_INPUT -> GPIO Pull-up/Pull-Down: Pull-up sử dụng điện trở kéo lên bên trong STM32.
Cấu hình ADC1
Chọn chân IN0 -> Enable Injected Conversions: Enable để cho phép chuyển đổi ưu tiên hơn ADC Regular
Tiếp theo DMA Settings -> Add -> Select -> ADC1
Cấu hình TIMER
TIMER2 -> Clock Source : internal Clock để chế độ đếm timer -> Chanel4: PWM Gereration CH4: chọn kênh để pwm -> Chọn Prescaler = 1, Counter Period 400 như đã tính theo công thức trên để tạo delay 200ms ->CH Polarity Low Để xung ra không bị nghịch.
TIMER3 -> tích vào dấu Internal Clock -> Chọn Prescaler = 65535, Counter Period 28 như đã tính theo công thức trên để tạo delay -> NVIC Settings -> Enabled TIM3 global interrupt để cho phép ngắt.
TIMER4 -> tích vào dấu Internal Clock -> Chọn Prescaler = 36000 Counter Period 399 như đã tính theo công thức trên để tạo delay -> NVIC Settings -> Enabled TIM4 global interrupt để cho phép ngắt.