Xuất hiện hôp thoại USB Configuration => Tab Parameter settings => Basic parameters => Endpoint 0 Max Packet size => 64 byte. (Maximum gói data endpoint 0 là 64 byte)
STEP 7:
Trong mục Configuration.
Trong cửa sổ chính => Middlewares =>USB_DEVICE.
STEP 8:
Xuất hiện hôp thoại USB_DEVICE Configuration => Tab Parameter settings => Class parameters :
USBD_CUSTOM_HID_REPORT_DESC_SIZE (Total length for Report descriptor
(IN ENDPOINT)): 32 (32 byte mô tả report input).
Trong phần thư viện của STEMWIN.
-Theo đường dẫn STM32Cube_FW_F4_V1.12.0\Middlewares\ST\STemWin\Config và STM32Cube\Repository\STM32Cube_FW_F4_V1.12.0\Middlewares\ST\STemWin\OS =>Ta import vào Kiel C các file GUIConf.c, LCDConf_FlexColor_Template.c, GUI_X.c vào thư mục STEMWIN_Config như hình trên (folder tùy người dùng có thể sử dụng tên khác).
-Theo đường dẫn STM32Cube\Repository\STM32Cube_FW_F4_V1.12.0\Middlewares\ST\STemWin\Lib =>Ta import vào Kiel C file STemWin528_CM4_Keil.lib (tùy dòng STM32 mà ta import file .lib khác nhau ví dụ dòng STM32f103 ta import file STemWin526_CM3_Keil.lib).
-Theo đường dẫn STM32Cube\Repository\STM32Cube_FW_F4_V1.12.0\Middlewares\ST\STemWin\inc =>Ta import toàn bộ file .h vào STEMWIN_Inc.
Sửa lại code trong LCDConf_FlexColor_Template.c
Physical display size => set lại size của LCD TFT.
// Physical display size
//
#define XSIZE_PHYS 240 // To be adapted to x-screen size
#define YSIZE_PHYS 320 // To be adapted to y-screen size
LcdWriteReg
static void LcdWriteReg(U16 Data) {
// ... TBD by user
}
Sửa lại=>
static void LcdWriteReg(U16 Data) {
// ... TBD by user
LCD_WriteReg(Data);
}
LcdWriteData
static void LcdWriteData(U16 Data) {
// ... TBD by user
LCD_WriteData(Data);
}
Sửa lại=>
static void LcdWriteData(U16 Data) {
// ... TBD by user
LCD_WriteData(Data);
}
LcdWriteDataMultiple
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by user
}
}
Sửa lại=>
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
Trong mục Permitted values for parameter pfFunc Supported display controller
GUIDRV_FLEXCOLOR_F66708: config này dùng cho driver ILI9325, nếu bạn sử dụng driver khác ví dụ như SSD1289 thì dùng config GUIDRV_FLEXCOLOR_F66702. Trong mục Permitted values for parameter pfMode
GUIDRV_FLEXCOLOR_M16C0B16: 16bpp, no cache, 16 bit bus =>Config này giao tiếp 16 bit màu và 16 bit bus.
LCD_X_DisplayDriver
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {
int r;
(void) LayerIndex;
(void) pData;
switch (Cmd) {
case LCD_X_INITCONTROLLER: {
//
// Called during the initialization process in order to set up the
// display controller and put it into operation. If the display
// controller is not initialized by any external routine this needs
// to be adapted by the customer...
//
// ...
return 0;
}
default:
r = -1;
}
return r;
}
Thêm bên dưới case LCD_X_INITCONTROLLER: {hàm khởi tạo LCD
=>
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {
int r;
(void) LayerIndex;
(void) pData;
switch (Cmd) {
case LCD_X_INITCONTROLLER: {
ILI9325_Init(); //khi khởi tạo GUI_Int() sẽ gọi khởi tạo LCD
//
// Called during the initialization process in order to set up the
// display controller and put it into operation. If the display
// controller is not initialized by any external routine this needs
// to be adapted by the customer...
//
// ...
return 0;
}
default:
r = -1;
}
return r;
}
Sửa lại code trong file GUIConf.c
// Define the available number of bytes available for the GUI
#define GUI_NUMBYTES 0x200000
=>Sửa thành
#define GUI_NUMBYTES (1024) * 20
Đây là dung lương ram dành cho thư viện GUI, tùy theo dung lượng ram của VĐK , con STM32F411 mình dùng có 128Kbyte ram nên mình dành cho GUI là 20Kbyte.
Ví dụ cơ bản:
SystemClock_Config();//khởi tạo clock hệ thống __HAL_RCC_CRC_CLK_ENABLE();//bật clock CRC (bắt buộc)
MX_GPIO_Init(); //khởi tạo port
GUI_Init();//khởi tạo GUI GUI_SetBkColor(GUI_BLACK);//set màu backgroud màu đen GUI_SetColor(GUI_GREEN);//set màu font chữ GUI_SetFont(GUI_FONT_32B_ASCII);//set font chữ GUI_DispStringAt("NPL Lab",160,70);//tạo một đoạn text nằm ở tạo độ x=160, y=70.
STM8S003 + LCD16x2 4bit + Temperature and humidity module AM2301
Schematic
Ảnh thực tế module AM2301
Sơ đồ chân module AM2301
Giới thiệu module cảm biến AM2301.
Độ ẩm : 0->99.9%
Độ chính xác: 3%
Độ phân giải: 0.1%
Nhiệt độ: -40->80oC
Độ chính xác: 0.3oC
Độ phân giải: 0.1oC
Hướng dẫn giao tiếp module AM2301
Giao thức one-wire với module AM2301
Tạo xung start:
Set chân SDA(MCU) output =>Đưa chân SDA high =>SDA low ít nhất 800uS->20mS (mình để khoảng 1mS) =>SDA high =>Set SDA input.
Kiểm tra xung Responce.
Nếu chân SDA kéo xuống low khoảng 80uS =>Sau đó SDA high khoảng 80uS =>Báo start read data. (Ở đây mình chỉ cần chờ SDA xuống low khoảng 80uS sao đó lên high là OK, không cần chờ lên high trong 80uS).
Nhận data.
Data bao gồm 5 byte: 2 byte đầu là độ ẩm, 2 byte tiếp theo là nhiệt độ, byte cuối là byte parity.
Byte parity = byte cao dộ ẩm + byte thấp độ ẩm + byte cao nhiệt độ + byte thấp nhiệt độ.
Xung xác định bit 0 và bit 1.
Sao khi kiểm tra xong xung Responce ta chờ SDA lên high bắt đầu delay 50us => kiểm tra nếu SDA vẫn high =>bit 1, còn nếu sau delay 50 mà SDA low =>bit 0 => cứ tiếp tục kiểm tra hết 5 byte ( 40 bit) là xong.
Sao đó cộng 4 byte đầu lại kiểm tra parity =>nếu đúng => OK.
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Delay >=4.1ms.
B3:
Gửi 4 bit data DB7=0, DB6=0, DB5=1, DB4=1.
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Delay >=100us.
B4:
Gửi 4 bit data DB7=0, DB6=0, DB5=1, DB4=0.
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B5:
Command function set: DL=0 mode 4 bit, DL=1 mode 8 bit, N=0 mode 1 dòng, N=1 mode 2 dòng, F=0 mode font 5x10, F=1 mode font 5x8. => 0x28: giao tiếp 4 bit , 2 dòng, font 5x8.
Gửi 4 bit cao.( 0010)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Gửi 4 bit thấp. (1000)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B6:
Command on display: D=1 display on, D=0 display off, C=1 hiện con trỏ, C=0 tắt con trỏ. =>0x0C. Tách ra gửi 2 lần mỗi lần 4 bit:
Gửi 4 bit cao.(0000)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Gửi 4 bit thấp.(1100)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B7:
Command entry mode- hiển thị tăng không dịch. ID=1 hiển thị tăng kí tự sau sẽ nằm bên phải kí tự trước, ID=0 hiển thị giảm kí tự sau hiển thị bên trái kí tự trước , S=1 kí tự trước sẽ bị đẩy đi ,kí tự sau sẽ chiếm chỗ, S=0 không dịch. =>0x06.
Gửi 4 bit cao.(0000)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Gửi 4 bit thấp.(0110)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B8:
Command clear display- 0x01.
Gửi 4 bit cao.(0000)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Gửi 4 bit thấp.(0001)
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Hiển thị data ra màn hình.
B1:
Gửi một byte command vị trí xuất data.
Command: 0x80 + x (x=0->15): hàng 1 cột từ 0->15.
Command: 0xC0 + x(x=0->15): hàng 2 cột từ 0->15.
Gửi command.
Cho chân RS=0.
Gửi 4 bit cao.
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Gửi 4 bit thấp.
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B2:
Cho chân RS=1. Gửi 1 byte data mã ASCII.
Gửi 4 bit data cao.
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Gửi 4 bit data thấp.
Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Cho chân RS=0.
Nếu muốn gửi một chuỗi ta gửi nhiều lần mã ASCII của kí tự trong chuỗi
Kết quả
Link code: https://drive.google.com/file/d/0B9pHWA4exz3gRjQxSGc3Vld3LU0/view?usp=sharing
Giới thiệu Saleae Logic Analyzer bản fake của China.
Trọn bộ gồm một dây cáp mini USB và 1 Saleae Logic.
Phần mềm cho nó có thể lên trang chủ của Saleae Logic Analyzer (www.saleae.com), tuy là hàng fake nhưng có thể chạy trên software của hàng xịn.
Mổ bụng sealeae logic.
Có 8 pin cho 8 kênh.
Nội thất mặt trên.
Nội thất mặt dưới.
Test đo xung 1 Hz.
Sử dụng KIT STM8S003K3T6 để tạo xung 1 Hz, sử dụng ngắt timer để tạo xung ra chân PB7.
Mạch chưa có xung saleae logic chỉ sáng đèn vàng PWR.
Mạch có xung saleae logic bắt đầu sáng đèn đỏ.
Xung đo được trên phần mềm Logic 1.2.5.
Ngoài ra saleae logic còn đo được các chuẩn giao tiếp như thông dụng I2C, SPI, One wire, ...Saleae logic phục vụ tốt cho việc phân tích lỗi trong các chuẩn giao tiếp số.