本文根據一周CC2541筆記匯總得來——
適合概覽和知識快速索引——
全部鏈接:
中級教程-OSAL操作系統\OSAL操作系統-實驗01 OSAL初探
中級教程-OSAL操作系統(進一步了解-OLED && 普通按鍵和5方向按鍵-中斷!!!)這個系統驅動層和應用層不一樣~
OSAL操作系統-實驗20 模擬IIC通信+硬件IIC(Mpu6050)
一、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分類