4、CC2541芯片中級教程-OSAL操作系統(簡單AT指令實現+IIC軟件和硬件實現驅動MPU6050)


 

 

本文根據一周CC2541筆記匯總得來——

適合概覽和知識快速索引——

全部鏈接:

中級教程-OSAL操作系統\OSAL操作系統-實驗01 OSAL初探

【插入】SourceInsight-工程建立方法

中級教程-OSAL操作系統(OSAL系統解基本套路)

中級教程-OSAL操作系統(進一步了解-OLED && 普通按鍵和5方向按鍵-中斷!!!)這個系統驅動層和應用層不一樣~

中級教程-OSAL操作系統(ADC-光敏電阻)

OSAL操作系統-實驗16 串口波特率擴展

OSAL操作系統-實驗17 AT命令初步

OSAL操作系統-實驗20 模擬IIC通信+硬件IIC(Mpu6050)

OSAL 操作系統-實驗 23 PWM 輸出(改變占空比)

OSAL 操作系統-實驗 24 看門狗 WachDog

OSAL操作系統-實驗25 SNV內部Flash數據讀寫

OSAL 操作系統-實驗 29 系統睡眠等級研究

OSAL 操作系統-實驗 31 從機廣播功率修改

 

 

一、AT命令初步(17)

AT 命令式通過串口來通信的

串口一有數據就會調用回調函數,為了防止回調函數被頻繁調用,采用(延時+數據長度控制,即:超出某一時間或者超出某一長度就調用 NPI_ReadTransport(buffer,numBytes); 讀取一定數據)

 

第224行將串口收到的數據調用AT指令處理函數進行處理: 

 1 // AT 命令處理 函數
 2 bool simpleBLE_AT_CMD_Handle(uint8 * pBuffer, uint16 length)
 3 {
 4     bool ret = TRUE;
 5     char strTemp[64];
 6 
 7     // 1、測試
 8     if((length == 4) && str_cmp(pBuffer, "AT\r\n", 4))//AT
 9     {
10         sprintf(strTemp, "OK\r\n");
11         NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
12     }
13     // 2、設置LED1的亮滅
14     else if((length == 9) && str_cmp(pBuffer, "AT+LED", 6))
15     {
16         /*
17         Para: 0 ~ 1
18         AT+LED0\r\n: 關燈
19         AT+LED1\r\n: 開燈
20         Default: 0
21         */
22         switch(pBuffer[6])
23         {
24         case '?':
25             sprintf(strTemp, "OK+Get:%d\r\n", g_LED1);
26             NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
27             break;
28         case '0':
29             g_LED1 = 0;
30             HalLedSet(HAL_LED_1, HAL_LED_MODE_OFF);      // 關閉led1
31             sprintf(strTemp, "OK+Set0\r\n");
32             NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
33             break;
34         case '1':
35             g_LED1 = 1;
36             HalLedSet(HAL_LED_1, HAL_LED_MODE_ON);      // 點亮led1
37             sprintf(strTemp, "OK+Set1\r\n");
38             NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
39             break;
40         default:
41             ret = FALSE;
42             break;
43         }
44     }
45     else
46     {
47         sprintf(strTemp, "ERROR\r\n");
48         NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
49 
50         ret = FALSE;
51     }
52 
53     return ret;
54 }

258 行, AT\r\n 為測試命令,

  業界幾乎所有的 AT 命令模塊第一條 AT 命令都是這一條,用於測試模塊連接是否正常。

 
264~288 行,我們編寫了一個用於點燈的 AT 命令:
  AT+LED?\r\n: 查詢燈的開關狀態
  AT+LED0\r\n: 關燈
  AT+LED1\r\n: 開燈
 
總結:整體比較簡單就是將串口數據創送給AT指令處理函數處理,串口數據接收采用一定技巧
 
 
二、模擬IIC通信+硬件IIC(Mpu6050) 20

Cc2541 有硬件 iic 功能,但 cc2540 並沒有硬件 iic 功能

 
Description:    This file contains code that is common to all sensor drivers.
在 Hal_sensor.c  ti 已經實現了 cc2541 得硬件 iic 驅動,我們使用就行。
 
simpleBLETest.c中,編寫的對 mpu6050 的訪問函數。
 
 
 
以上兩個函數,實現的是對 mpu6050 的寄存器的讀寫操作
 
 
 
以上兩個文件,實現的是 gpio 模擬 iic 的時序,並封裝模擬 iic 的讀寫函數。
 
在Iic.h中我們定義了 P1.5 與 P1.6 作為 iic的SCL與SDA:
 
 
總結:IIC和MPU6050都封裝的很好。協議棧是個好東西,方便移植!!!是個寶庫!
 
上面是 IIC的模擬實現,其 硬件實現使用起來更簡單:

在simpleBLETest.c直接將MPU6050的設備地址傳送給I2C初始化函數就可以了,然后就直接調用讀寫函數進行讀寫!

 

 

未完~關注我的cc2541分類 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM