1. 程式人生 > >自學TM4C123G學習經驗分享(一)

自學TM4C123G學習經驗分享(一)

第一次寫部落格,可能會有很多不足之處,望海涵。 我是今年9月中旬第一次接觸ARM的微控制器,學生黨嘛比較窮就隨便拿了一塊老師的板子學。這個系列的板子韌體庫還是比較好下載的,但是相互之間的經驗交流比較少,相信你也遇到過。接下來我將分享我從建工程到能把led燈泡點亮的過程。 首先需要去keil的官網去下載TI公司的TM4C123G晶片包如下圖直接點安裝即可。

安裝完畢後,直新建工程然後會進入選擇晶片頁面點進去發現多一個晶片包TEXAS INSTRUMENTS選擇第二個TMC123GH6PM

這塊可能是因為我不太懂,所以我直接取消了,但是對後面並沒有影響。

然後點畫紅圈圈的按鈕進入新建資料夾

然後按照上圖的建立資料夾(這裡重點提一下要在arm工程的目錄下要新增inc,driverlib,utils這三個檔案在C盤的ti目錄下有直接複製過來就可以,沒有ti檔案目錄的是沒有安裝ti公司的韌體s,去ti官網直接下載)

start-up檔案是一個工程的啟動開始標頭檔案如果沒有starrt-up件則會出現這樣的警告。我在這個地方浪費了很多時間因為KEIL5不會自動給你新增這個標頭檔案需要你手動新增。而且inc,driverlib,裡面的檔案也需要自己手動新增,不新增會出現使用的GPIO函式不能被識別即使你把工程路徑設定好了。這點也必須要弄明白,Target的設定我就不說了網上教程很多。

.\Blink.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.

設定好之後就可以寫程式了,我把我使用的例程貼出來

#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>

#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "inc/hw_sysctl.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/fpu.h"


//*****************************************************************************
//
// The error routine that is called if the driver library encounters an error.
//
//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif


//*****************************************************************************
//
// The main application.  
// BLINK-LED
// BLED--PF0 GLED-PA4 RLED-PD6
//
//*****************************************************************************
int
main(void)
{
    int i,j;

    //
    //ÉèÖÃϵͳʱÖÓΪ50MHz
    //
    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                       SYSCTL_XTAL_16MHZ);

    //
    // LEDµÆ³õʼ»¯
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
	  //PF0½âËø
	  HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;
    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;		
		
	  GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);
    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0);//ÉèÖÃÀ¶É«LEDµÆ³õʼ״̬ΪÃð
		
		SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
	  GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_4);
    GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,1<<4);//ÉèÖÃÂÌÉ«LEDµÆ³õʼ״̬ΪÃð
		
		SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
	  GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6);
    GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,1<<6);//ÉèÖúìÉ«LEDµÆ³õʼ״̬ΪÃð
		
    while(1)
    {
			
	   	GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0<<0);//ÉèÖÃÀ¶É«LEDµÆ״̬ΪÁÁ
	for(i=1000;i>0;i--)
			for(j=600;j>0;j--);                          //Èí¼þÑÓʱ
		GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0);//ÉèÖÃÀ¶É«LEDµÆ״̬ΪÃð
	for(i=1000;i>0;i--)
			for(j=600;j>0;j--);                          //Èí¼þÑÓʱ
			
	   	GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0<<4);//ÉèÖÃÂÌÉ«LEDµÆ״̬ΪÁÁ
	for(i=1000;i>0;i--)
			for(j=600;j>0;j--);                          //Èí¼þÑÓʱ
		GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,1<<4);//ÉèÖÃÂÌÉ«LEDµÆ״̬ΪÃð
	for(i=1000;i>0;i--)
			for(j=600;j>0;j--);                          //Èí¼þÑÓʱ

	   	GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0<<6);//ÉèÖúìÉ«LEDµÆ״̬ΪÁÁ
	for(i=1000;i>0;i--)
			for(j=600;j>0;j--);                          //Èí¼þÑÓʱ
		GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,1<<6);//ÉèÖúìÉ«LEDµÆ״̬ΪÃð
	for(i=1000;i>0;i--)
			for(j=600;j>0;j--);                          //Èí¼þÑÓʱ					

    }
}

第一次寫部落格寫的比較粗糙,有不懂得可以留言聯絡我,需要資料的也可以留言,或者留下聯絡方式我發給你。