[Module CC1101 - UART] Hướng dẫn cách dùng Module CC1101 giao tiếp UART

minh_t57

Thành Viên PIF
Chào các bạn :6cool_boss:,
Hôm nay, mình sẽ hướng dẫn các bạn dùng Module CC1101 với giao tiếp bằng UART như thế nào? Đối với bài này, mình sẽ không đi sâu vào cách hoạt động của chip CC1101 mà mình chỉ hướng dẫn sử dụng và dùng code mẫu. :D

Khi bạn mua module CC1101 với chuẩn giao tiếp là UART thì sẽ có hình như sau:
(Hình ảnh minh họa được lấy từ Internet)
Một vài thông tin cơ bản (điện áp áp vào, tần số hoạt động,...) thì bạn có thể xem trên các trang web bán hàng. Ở đây, mình lưu ý các bạn một số điểm lưu ý sau:
  • Để có thể giao tiếp với nhau, các module phải được thiết lập là cùng kênh (channel) và địa chỉ (address). Các kênh và địa chỉ phải được thiết lập khác 0.
  • Để thay đổi thông số module (vào chế độ AT command), thì bạn phải nối chân SET xuống GND (0V) trước khi cấp nguồn. Lúc này, module sẽ hoạt động ở thông số mặc định: Baudrate - 9600, 1 Stop Bit, No parity.
  • Sau khi cài đặt xong, nối chân SET lên VCC hoặc để hở (không nối đi đâu hết) để vào chế độ hoạt động bình thường. Các dữ liệu truyền qua UART vào module thì tất cả các module khác cùng kênh và địa chỉ sẽ nhận được dữ liệu.
Cách thiết lập thông số cho Module:

  1. Bạn kết nối Module CC1101 vào USB-TTL để cài đặt (chân SET phải được nối xuống GND trước nhé).
  2. Xem máy tính đã nhận được USB-TTL (nếu chưa thì cài driver nhé), và xem cổng COM đang được kết nối.
  3. Dùng phần mềm đọc dữ liệu từ cổng COM để kết nối với cổng COM trên (mình dùng phần mềm Hercules) với thông số cổng COM như hình (theo thông số mặc định của Module).
  4. Gửi các lệnh cấu hình Module:
    1. AT: kiểm tra Module đã vào được AT mode chưa.
    2. AT+Axxx: chọn địa chỉ (xxx từ 000 đến 255).
    3. AT+Cxxx: chọn kênh hoạt động (xxx từ 000 đến 127).
    4. AT+Bxxxx: chọn baudrate hoạt động cho Module. xxxx là baudrate muốn hoạt động (baudrate: 2400, 4800, 9600,...).
    5. AT+Px: thiết lập công suất phát sóng (x từ 1 đến 8). Tùy vào khoảng cách truyền nhận thì nên chọn công suất phù hợp.
    6. AT+RX: hiển thị lại các thông số đã cài đặt.
    7. Nếu bạn nhập một command không tồn tại thì Module sẽ trả về Error.
  5. Lưu ý: Nhớ thiết lập 2 Module cùng kênh và địa chỉ nhé.

Để tìm hiểu thêm, bạn có thể đọc datasheet của Module tại đây.

Code truyền và nhận cho Module CC1101:

  1. Download code mẫu tại đây.
  2. Import vào CCS.
    • Nếu bạn gặp lỗi
      Code:
      Error: Import failed for project 'Test_CC1101' because its compiler definition is not available. Please install the ARMv17.6 compiler before importing this project - click 'View > CCS App Center' to check if compiler updates are available, or install the compiler manually and register it with CCS through 'Preferences > CCS > Build > Compilers'.
      thì hãy cài đặt lại đúng phiên bản compiler hoặc tự tạo project rồi copy những file cần thiết vào.
    • Các bạn nhớ chỉnh lại đường TIVAWare và driverlib nhé.
  3. Kết nối Module vào kit:
  4. Build code, nạp code và chạy thôi :6cool_boss:.
    • Nếu kit TIVA đang đóng vai trò là con phát tín hiệu thì bạn bỏ comment tại dòng
      Code:
      //#define TX
    • Nếu kit TIVA đang đóng vai trò là con nhận thì giữ nguyên.
Giải thích code:
  • Bạn muốn thay đổi UART điều khiển cho Module, thì bạn vào file UART.h thay đổi thành UART mong muốn. Ở đây, mình dùng UART1 để giao tiếp với CC1101.
    Code:
    //            |   TIVA C   |        |  MODULE CC1101 |
    //            |         3v3|------->|VCC             |
    //            |         GND|------->|GND             |
    //            |         PB0|------->|TXD             |
    //            |         PB1|------->|RXD             |
    
    #define CC1101_UART               SYSCTL_PERIPH_UART1
    #define CC1101_UART_GPIO          SYSCTL_PERIPH_GPIOB
    #define CC1101_UART_RX            GPIO_PB0_U1RX
    #define CC1101_UART_TX            GPIO_PB1_U1TX
    #define CC1101_GPIO_BASE          GPIO_PORTB_BASE
    #define CC1101_GPIO_PIN           (GPIO_PIN_0 | GPIO_PIN_1)
    #define CC1101_UART_BASE          UART1_BASE
    #define CC1101_Baudrate           9600
    #define CC1101_UART_Config        (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)
    #define CC1101_UART_INT           INT_UART1
    #define CC1101_UART_INT_Config    (UART_INT_RX | UART_INT_RT)
  • Bạn muốn gửi chuỗi đi thì dùng hàm UART_C1101_Write() hoặc UART_C1101_WriteCMD().
    • Hàm UART_C1101_Write() sẽ gửi theo số byte đưa vào hàm.
    • Hàm UART_C1101_WriteCMD() thì sẽ ngưng gửi khi gặp kí tự kết thúc chuỗi (\0 hoặc 0x00).
  • Bạn muốn nhận dữ liệu gửi về, bạn dùng hàm void UART_C1101_Read(uint8_t * buf, uint16_t len) với buf là nơi chứa dữ liệu (nên đưa mảng vào) và len là số kí tự muốn đọc.
Như vậy là chúng ta có thể dùng giao tiếp giữa các Module CC1101 bằng chuẩn giao tiếp UART.:4cool_beauty::4cool_beauty::4cool_beauty:
 
Last edited:
Top