如何快速上手一款新的嵌入式CPU芯片(記錄CC2540開發經歷)


      新換了工作,需要熟悉新公司的產品開發項目,更新博客就懈怠了,不過環境的不同,也讓我對嵌入式開發有了更深刻的理解。在原公司我主要負責在STM32F207芯片平台上, 利用UCOS+LWIP進行嵌入式服務器開發,工作涉及底層硬件,RTOS,協議棧,上層應用及前端網頁,從產品的角度,是完整的實現了單個項目。不過到新公司后,連續調試了STM32F103, STM32L0(低功耗), TI CC2540三種CPU, 並在上面實現了相應的功能需求后,我對單片機這一塊也有了更深刻的認識,這里就記錄我如何上手CC2540芯片,並在其上實現引腳檢測並通過485接口傳送給上位機的過程。

     前提:兩年多的STM32+MDK的開發經驗(使用精通), 485調試和實現經驗,沒用過CC-DEBUG, IAR, 沒了解過TI芯片

     開發流程: 第一天(下載安裝IAR,下載CC2540參考手冊, 安裝CC-DEBUG, 熟悉IAR環境, 編譯點亮LED燈), 第二天(完成RS485的實現,制定協議,並調試成功)

     開發經歷:

     1. 下載安裝IAR

     參考網上實現教程,除了最初版本使用太早,無法打開例程外,后來選擇9.3之后,官方例程打開成功

     2. 下載CC2540參考手冊

   去TI官網搜索CC2540,找到CC253x/4x手冊

     3. 安裝CC-DEBUG

    (1) 安裝CC-DEBUG驅動

    將CC-DEBUG插入USB接口,此時設備管理器里顯示為警示符號,下載CC-DEBUG驅動(window7測試通過),解壓,並通過設備管理器安裝,如下圖即可。
    

    (2)連接CC-DEBUG和CPU

    工程板上的調試接口原理圖如下:

下圖為CC-DEBUG連接方式:

   

     3.3v是CC-DEBUG給工程板供電用的,如果工程板本身已經有獨立供電,此時不能接(接可能會損害仿真器), 而Vdd一般來說要連接供電板電源正極(將CC-DEBGU的2, 9腳短接也可), 其它DC, DD, NRST, GND按照對應連接即可,如果工作正常,此時CC-DEBUG的紅燈變為綠燈,本次連接通過

     4. 熟悉IAR環境

    (1) 安裝輔助下載工具

    調試器工作成功后,參考例程,實現IAR和CC-DEBUG的聯合調試,安裝后就是成功的,不過IAR的下載必須進入調試模式,在點X才能退出,這令人很不爽,我就找到了一款官方的下載器 SmartRF 閃存編程器, 界面如下:

     按照上面的配置就可以實現快速下載。

  2. IAR的界面配置

  IAR的默認編譯環境顯示和MDK有很大不同,看着很不舒服,這里講下主要的修改樣式:

  Tools -> Editor -> show line numers 顯示行號

  Tools -> Editor -> Colors and Fonts 這里面可以修改樣式,我來解釋常用的幾種特性:

  C Keyword: C關鍵字, 像if, else等

  Strings: 字符串, 如"hello"

  char: 字符, 如'h'

  Preprocessor: 預處理器,類似#include, #error這些

  Number: 數字

  Comment: 注釋

  修改顏色,字體,不過IAR的Type Styles如果選擇Italic不適合顯示,所以建議全部選擇為Normal或者Bold

重要快捷鍵:

   Ctrl + K 注釋  

   Ctrl + shift + K 取消注釋 

   Ctrl + shift + F 全局查找 

   F7 編譯

   F9設置斷點

   至於全局替換,我沒找到,唯一不爽的地方,還有個細節,通過View > BreakPoints, 可以查詢到當前以使用的所有端點,即可自行去除。

4. 編譯點亮LED燈,及項目的實現

  因為本身沒用過TI的芯片和IAR, 所以參考官方例程,編寫了點亮LED燈的測試代碼。

#include "hal_types.h"
#include "hal_timer.h"
#include <stdlib.h>
#include <ioCC2540.h>

#define  LED  P1_0
void DelayMS(uint16 msec);

int main(void)
{
  /* Initialize hardware */
  HAL_BOARD_INIT();

  P1DIR |=  0x01; //設置P1.0為輸出模式
  
  while(1)
  {
     LED = !LED;
     DelayMS(200);
  }
}

void DelayMS(uint16 msec)
{ 
    uint16 i;  
    volatile uint16 j; 
    for (i=0; i<msec; i++)
    {
        for (j=0; j<650; j++)
        {}
    } 
}

 

不過從編寫成功,到下載還是,調試並運行還遇到很多坑,后續有時間補上,不過熟悉了基礎部分后,在這基礎上添加RS485的實現就很簡單了。


免責聲明!

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



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