娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月25日(星期一)

正在發生

2020年11月25日 | 從STM32到TM4C123

發布者:咖啡狐貍 來源: eefocus關鍵字:STM32  TM4C123  啟動文件 手機看文章 掃描二維碼
隨時隨地手機看文章

我主要是最近看ACfly的代碼時,發現他有的工程的文件的.s文件講道理是啟動文件不是STM32,而是TM4C123,我懷疑是TI的芯片,查了下果然是的,應該是電賽準備的。但是這里可以看到換成其他芯片也是有專門的啟動文件的。

 

 

 

 

從51單片機到STM32再到TM4C123

 

目錄

系統時鐘

GPIO相關

通用定時器相關

PWM相關

UART通信相關

 

寫在前面:

進入TI的學習,說明STM32 已經掌握的差不多了,沒有掌握的很好也沒關系,正好兩塊單片機對比著學習更能加深映像。這篇只是簡單的介紹TI,篇幅比較短比,主要還是敘述了32和TI的不同的地方,相似的就沒有再寫出來,不能完全的拿來當作學習資料。

 

一點學習TI的建議:

TI主要學習還是通過北航出版的《嵌入式系統教程——基于TivaC系列 ARM Cortex—M4微控制器》為主資料,因為這個資料比較通俗易懂,如果不喜歡看電子版的,可以去圖書館借這本書,還有一本配套的書,忘記叫啥名字了,但是想借的話直接圖書館檢索TM4C123GH6PM就可以找到,這本書主要還是純文字教你怎么配置相應功能和相應項目的思路。其次,除了北航的那本書,配套的資料還應該有《TM4C1233H6PM數據手冊中文版》、中英文版本的《TM4CDriver_Library》,數據手冊的話主要就是了解相關外設功能,以及對應映射引腳查找。《TM4CDriver_Library》主要是API文檔,因為TI不同于32,TI的函數的入口參數無法通過像32一樣的方法查找選擇合適的參數,所以,該文檔就很有作用,對于一個函數,可以通過該文檔進行查找,找到函數所在的位置,有詳細的關于該函數的講解,可以了解該功能,同時還有入口參數的例子,若要選擇其他入口參數,則復制該參數,在程序文件里面查找定義的位置,就可以看到附近還有同類的參數,選擇需要的參數即可。


對于單片機的定時,那是一部分很重要的東西,這其中就有以分資料單獨講怎么配置各種定時器,實現不同功能,有例程,《TM4C123G定時器》就是一份資料,學習定時器的時候對照著來,會比較容易很多。


當然了,網上還有很多人的學習記錄博客,這些也是很有用的資料,因為學習TI,就是要知道怎么用,怎么配置相關程序,博客就解決了這類問題。CSDN上面這一類型的TI教程不多,懶得找的話可以來找我拷貝。


系統時鐘

對于51單片機來說,在書寫程序時候是不需要進行系統的時鐘函數的配置的,直接由晶振電路來提供。

 

如圖所示,直接是32和TI的系統時鐘框圖

32系統時鐘

TI系統時鐘

 

對于32 的時鐘來說,常用的時鐘主要分為AHB和APB兩大部分,且系統時鐘不需要自己來配置。

/*

void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

*/

每個部分對應多大的頻率,對應的定時器編號,串口編號也已經設定好。所以,在使用相對應的功能時候直接在這兩類里面進行查找然后使能外設就可以用了,例如使用GPIO、定時器等功能時候直接用函數里面的參數來查找:
/*

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能 GPIOA 時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口

*/

 

然而,對于TI來說,系統的時鐘也是分為AHB和APB兩種,但是在配置時候可進行自由選擇(由于初入TI,對這里沒有仔細學習,感興趣的可以了解),但是配置時鐘時候,可以只需要運用“SysCtlClockSet()”函數來自己來設定,不像32一樣直接規定了不同外設用不同的頻率。函數的入口參數就是:系統的分頻、使用OSC還是PLL、OSC時鐘源選擇、外接晶體頻率,這四種來完成設備的時鐘,例如:

/*

SysCtlClockSet ( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_XTAL_16MHZ SYSCTL_OSC_MAIN )

*/

最后使能相應的功能即可。(關于其時鐘配置的參數詳細講解見)。

在配置好系統的時鐘之后,根據需要的外設功能進行相應的使能:

/*

SysCtlPeripheralEnable(uint32_t ui32Peripheral)

*/

其中的入口參數為 SYSCTL_PERIPH_GPIOA 、 SYSCTL_PERIPH_PWM1、 SYSCTL_PERIPH_TIMER1 等等。

注意:32的系統頻率的配置是 固定的,定在了不同的總線的使能函數 ,所以不同的外設可以說是“不共用”系統時鐘的,而TI是先于外設使能前進行自己 時鐘 配置,然后才 使能 所需外設,且“公用”系統時鐘。

GPIO相關

說完時鐘和系統配置,下面簡紹基本的GPIO口的配置。

 

GPIO的功能大致上還是和32的類似,可輸出高低電平、UART通信、還可以模擬一些簡單的通信接口,如SPI,IIC等。一般工作模式有以下幾種:

浮空輸入

上拉輸入

下拉輸入

模擬輸入

開漏輸出

推挽輸出

復用推挽輸出

復用開漏輸出

 

一般GPIO在復位之后都有一個默認的方向,為了安全起見,都是默認為輸入模式,廢話不多說,直接進入配置:

首先是32的配置

/*

void LED_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;              

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);            

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                                      

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                           

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                           

GPIO_Init(GPIOB, &GPIO_InitStructure);                                                                     

GPIO_SetBits(GPIOB,GPIO_Pin_5);            

 

GPIO_Init(GPIOE, &GPIO_InitStructure);                                                                                                                                             

}

*/

其次是TI的配置:

/*

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);      //使能GPIOF外設         GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

*/

 

不難看出,配置32和TI的方式就是不一樣的,32的GPIO是用結構體進行配置,TI則使用函數來進行配置。TI的普通配置只需要進行GPIO外設使能和方向控制即可。也不是說前面說到的功能模式就不能配置了,如果有需要可以進行其他類型的配置。

如果要進行端口高低電平的輸出控制,32和TI也是一樣的調用函數來進行配置,分別是:GPIO_SetBits(GPIOE,GPIO_Pin_5); 和 GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);

 

注意:TI的輸出高低電平使用的是同一個函數GPIOPinWrite(),對于32則使用的是兩個函數:GPIO_SetBits()和GPIO_ResetBit()即可輸出高低電平。TI呢,則不是這樣的,就連入口參數也不是和32一樣那么簡單,GPIOPinWrite()入口參數就有三個,分別是GPIO_PORTx_BASE,GPIO_PIN_x,和0(低電平時候為0,但是高電平時候不是1,而是GPIO_PIN_x)。例如PF1輸出高電平?。?p>GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);

 

如果想進行其他端口詳細的配置情況可以見相關手冊資料,其中端口復用放在后面各功能實現時候講。

通用定時器相關

TI定時器簡介:

TI定時器呢,主要分為12個大的定時器模塊(GPTM),每個定時器模塊又分為定時器A和定時器B,所以總共有24個定時器。這12個大的定時器的屬性分為16/32位的GPTM塊和32/64位塊,其中各6塊。每個16/32位的定時器塊,提供2路16位的定時器/計數器(即定時器A和定時器B),所以通俗來說就是定時器A或B單獨配置時候就是12個16位的定時器,級聯起來配置就是6個32位的定時器。同樣的,32/64位的塊就是12個32位的定時器,級聯時候就變成6個64位的定時器。

功能說明:

每個 GPTM 模塊的主要元件包括兩個自由運行的遞增/遞減計數器(稱作 Timer A 和 Timer B)、兩個預分頻器寄存器、兩個匹配寄存器、兩個預分頻器匹配寄存器、兩個影子寄存器、兩個加載/初始化寄存器以及與它們相關的控制功能。

接著來,該單片機的定時器和32的有點不同,特別是計數控制計數的寄存器。配置了32的定時器之后,定時器開始計數,當計數達到重裝載值時候產生中斷,之后會重新“自動”裝載計數值,但是Ti卻并非如此,是否自動裝載計數值是需要在配置時候進行設置的,官方一點的來說就是:單次觸發 /周期定時器模式。

相關定時器的功能如下:

 

 

接著進入配置對比:

首先還是先32的配置:

/*

              TIM_TimeBaseStructure.TIM_Period = arr;

              TIM_TimeBaseStructure.TIM_Prescaler =psc;

              TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

              TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

              TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

*/

 

TI的配置:

/*

//TimerConfigure(TIMER0_BASE, TIMER_CFG_ONE_SHOT);//單次計數模式

TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);//周期性計數模式

TimerLoadSet(TIMER0_BASE, 2222222- 1);//設定預裝栽值

IntEnable(INT_TIMER0A);  //使能TIMER0A

TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //TIMEOUT標志位觸發中斷

  //TIMER0A開始計數,當計數值等于TimerLoadSet,觸發中斷

*/

 

同GPIO口的配置一樣的,32的配置還是結構體類型的配置,TI還是調用函數進行配置。

 

 

PWM模式:

通用定時器支持簡單的PWM生成模式。在 PWM 模式中,定時器被配置為 24 位或 48 位遞減計數器,也就是說在定時器里面就有這個功能,配置好以后就直接輸出PWM,而不像32一樣配置好定時器之后還要一個TIM_SetCompare1()函數來進行PWM的輸出。

 

注意:除了前面介紹的不同點之后,與32還有一個很大的區別就是需要進行中斷的執行相關功能時候,需要自己調用TimerIntRegister()函數來注冊中斷函數的名字,這樣中斷才有入口。如果不需要忽略即可。同時在使能中斷時候,和32一樣需要開啟一些中斷。

 

 

PWM相關

PWM簡介:

TI有2個PWM模塊,每個模塊由4個PWM發生器模塊和一個控制器模塊組成,一共可以產生16個PWM輸出。每個發生器模塊都能夠產生2個PWM信號,這兩個信號是基于同一個定時器和頻率,也可以配置成單獨產生信號。PWM模塊發生器產生的兩個信號為PWMA和PWMB。

以下為結構圖:

 

功能描述:

  • 時鐘選擇:系統時鐘和預分頻系統時鐘

  • PWM定時器

每個PWM發生器中都有區別與通用定時器的定時器,在向下計數模式或向上/向下計數模式。

  • PWM比較器

每個PWM發生器都有兩個比較器。具體功能和32一樣就不再累贅。

 

 

初始化及配置:

 

首先還是32的:

/*

              TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

              TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

              TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

              TIM_OC2Init(TIM3, &TIM_OCInitStructure);

              TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

*/

 

其次是TI的:
/*

//單獨配置的系統時鐘

SysCtlPWMClockSet(SYSCTL_PWMDIV_1);

SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1);

//配置引腳為PWM功能

syslPeripheralEnable(SYSCTL_PERIPH_GPIOF);

GPIOPinConfigure(GPIO_PF3_M1PWM7);

GPIOPinTypePWM(GPIOF, Pin3);

//配置 PWM1 Generator3·發生器

PMGenConfigure(PWM1_BASE, PWM_GEN_3, PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);

//配置 PWM1 Generator3 周期

PWenPeriodSet(PWM1_BASE, PWM_GEN_3, SysCtlClockGet()/freq - 1);

//配置 PWM1 Generator3·占空比

PMPulseWidthSet(PWM1_BASE, PWM_OUT_7, PWMGenPeriodGet(PWM1_BASE, PWM_GEN_3)*duty - 1);

//使能PWM1的輸出

PWOutputState(PWM1_BASE, PWM_OUT_7_BIT, true);

//使能 PWM1 發生器模塊

PMGenEnable(PWM1_BASE, PWM_GEN_3);

*/

 

還是和前面一樣,32的PWM配置過程是結構體類型的,而TI則還是庫函數來進行配置的。有一點值得注意哦,TI在配置PWM時候不需要進行IO口的復用配置和映射等相關操作,只要找到對應的IO口就可以輸出信號。

 

UART通信相關

微控制器的UART簡介:

TI控制器配備了多達8路的UART,其基本功能和32差不多,具體功能可以參考32相關文檔

 

 

這部分我們先來看32和TI的配置,從配置中找不同的地方加以說明

 

首先是32配置:

/*

USART_InitStruct.USART_BaudRate=arr;

USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStruct.USART_Mode=USART_Mode_Tx | USART_Mode_Rx;

USART_InitStruct.USART_Parity=USART_Parity_No;

USART_InitStruct.USART_StopBits= USART_StopBits_1;

USART_InitStruct.USART_WordLength= USART_WordLength_8b;

USART_Init(USART2, &USART_InitStruct);

 

              USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

              USART_Cmd(USART2, ENABLE);

*/

32的配置過程就不加以敘述

 

TI的配置:

/*

    SCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);              //使能GPIO

              SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);//使能UART0

              GPIOPinConfigure(GPIO_PA0_U0RX); //復用GPIO

              GPIOPinConfigure(GPIO_PA1_U0TX);·

              GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);//

[1] [2]
關鍵字:STM32  TM4C123  啟動文件 引用地址:從STM32到TM4C123

上一篇:STM32程序的燒錄方式 與 ISP一鍵下載
下一篇:STM32之中斷與事件---中斷與事件的區別

推薦閱讀

工業機器人大廠KUKA的自動化生產系統名聞國際,除了是電動車制造商sla旗下車款Model 3生產線機器人的主要供應商,近日KUKA透露接獲一筆來自美國汽車制造商的大訂單,預計在2020開始進行生產。 KUKA近年不斷透過收購或是與不同領域的產業合作來優化機器人自動化生產流程,在2016年被大陸企業美的收購后,更加速了在亞太地區的發展,而這次來自美國的大...
在數字化重塑的浪潮下,車的定義正在被重寫,人們開始希望在其汽車中獲得更高水平的舒適性、安全性、效率和消費電子功能。但隨著車輛的電子化程度逐漸提高,電子控制單元(ECU)占領了整個汽車,從防抱死制動系統、四輪驅動系統、電控自動變速器、主動懸架系統、安全氣囊系統,逐漸延伸到了車身安全、網絡、娛樂、傳感控制系統等。就Strategy Analytics統...
11月24日,京東方發布公告稱,公司于2020年11月23日收到了產權交易所的通知。截至2020年11月20日,南京中電熊貓原股東夏普株式會社未行使對轉讓標的的優先購買權,根據產權轉讓公告的要求,公司已獲得最終受讓資格。2020年9月8日,中電熊貓股東在上海聯合產權交易所有限公司(以下簡稱“產權交易所”)公開掛牌轉讓并依法定程序公開征集受讓方,擬征集受...
自科創板設立以來,半導體行業就掀起了上市熱潮,包括中芯國際、滬硅產業、中微公司等上百家半導體產業鏈企業陸續開啟上市征程。在眾多沖擊科創板上市的半導體企業中,盛景微作為其中唯一一家應用于民爆行業中電子雷管的集成電路廠商,在新興的電子延期模塊市場中脫穎而出,并占據較高市場占有率,引起了集微網的關注。大浪淘沙后的佼佼者據招股書顯示,民...

史海拾趣

問答坊 | AI 解惑

xiaorunyi收集和整理的一些Protues的資料

這些資料來自網上,以前用過的,有程序、文檔、ppt等,還有一個Protues軟件;大多是S51和AVR的。 可能有與網站其他網友的重復的內容,沒時間也不好校對了。 陸續找出來發到這里分享了!…

查看全部問答∨

可測型設計(2)

接著發,上午的續…

查看全部問答∨

maxplusii使用說明

本帖最后由 paulhyde 于 2014-9-15 08:55 編輯 maxplusii使用說明  …

查看全部問答∨

運算放大器實例30

簡單的電路圖,不過很實用?!?

查看全部問答∨

Keil與proteus完美結合教程普通下載

Keil與proteus完美結合教程普通下載…

查看全部問答∨

wince下eboot不能加載內核

Resetting factory default configuration... System ready! Preparing for download... 串口終端顯示到以上信息,就沒下文了 …

查看全部問答∨

修改后的電源,出現這樣的情況

各位老師們,幫忙解決下啊,很困惑,    我將電源S-100-5型號,將主板上面R27,R28,,R25,D17,C18,C29,C27,Q5元件拆掉了,在在R29的位置接一跟線,編號1,D10,D9交接位接根線,編號,2在R34的位置接根線,編號3,三根線構成一組 ...…

查看全部問答∨

流水燈

哪哥們有流水燈的C程序,基于pic16f877的,借來參考參考,謝過??砂l到我郵箱:fitbsgo@sina.com…

查看全部問答∨

IT培訓市場“職業技能標尺”鼎定乾坤

新年伊始,在國內IT職業教育具有領先地位的北大青鳥APTECH對外宣布,推出其經典培訓課程ACCP軟件工程師的最新版本——ACCP4.0,并拋出“IT人才職業技能標尺”這一全新概念,市場上引起極大的轟動和陣陣漣漪,并受到社會各界的廣泛關注。北大青鳥APT ...…

查看全部問答∨

談談怎樣提升SPI讀寫SD卡的速度

不知道哪位有經驗,談談怎樣可以提升SPI讀寫SD卡的速度?現在已經把時鐘設置到最大了,但是速度還是不理想,沒有具體測試能達到多少,但是感覺非常忙。希望高手沒不吝賜教。。。。。?!?

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 茌平县| 耿马| 亚东县| 西乌珠穆沁旗| 霞浦县| 孟村| 浠水县| 岐山县| 怀集县| 龙胜| 马鞍山市| 金阳县| 尼勒克县| 桐城市| 赤壁市| 泸定县| 色达县| 辛集市| 龙江县| 涡阳县| 岳阳市| 华坪县| 舟曲县| 调兵山市| 遵义市| 浪卡子县| 微博| 浮山县| 清远市| 神木县| 介休市| 绥芬河市| 高邮市| 黄浦区| 文水县| 吴桥县| 正蓝旗| 霞浦县| 胶南市| 宝山区| 深州市|