摸索了很久之后終于把ARM開發(fā)板上的LED燈點(diǎn)亮了,雖然是很簡單的一個(gè)IO口操作,但是由于以前從來都沒有什么經(jīng)驗(yàn),所以浪費(fèi)了很多時(shí)間,也查找了很多資料。現(xiàn)在可以操作IO口了,證明邁出了學(xué)習(xí)ARM的第一步。
實(shí)驗(yàn)平臺清單如下:
開發(fā)板: 奮斗STRIVE V3
核心芯片: STM32F103VET6
開發(fā)環(huán)境: RealView MDK-ARM Version:3.50
PC操作系統(tǒng): Windows 7 家庭普通版
仿真器: SEGGER J-Link
其中,STM32F103VET6芯片是基于ARM Cortex-M3內(nèi)核的,具體技術(shù)參數(shù)請參考ST公司給出的芯片資料(http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00191185.pdf)。關(guān)于該芯片的其他資料,可以在http://www.st.com/cn/mcu/product/164491.jsp上找到。如果對RealView MDK不熟悉的話,可以參考ARM RealView系列叢書《ARM開發(fā)工具RealView MDK使用入門》,李寧編著,北京航空航天大學(xué)出版社出版。如果對于STM32不熟悉的話,可以參考ARM RealView MDK系列叢書《基于MDK的STM32處理器開發(fā)應(yīng)用》,李寧編著,北京航空航天大學(xué)出版社出版。
當(dāng)軟硬件平臺都準(zhǔn)備好之后,就可以開始新的工程了。對于一個(gè)初學(xué)者來說,新建一個(gè)可以運(yùn)行的工程其實(shí)是有難度的,因?yàn)楦静恢缽暮蜗率帧R虼耍覍⒚恳徊郊?xì)節(jié)都描述出來,以便于即使是初學(xué)者也能很好的理解ARM的初級操作。
打開MDK開發(fā)平臺,在菜單欄中單擊“Project - New μVision Project”創(chuàng)建一個(gè)新的工程。然后在彈出的“Select Device for Target 1”對話框中選擇合適的芯片。由于我采用的是STM32F103VET6,所以選擇ST – STM32F103VE。
選擇好芯片之后,會彈出一個(gè)消息框,“Copy STM32 Startup Code to Project Folder and Add File to Project?”問你是否需要加載啟動(dòng)代碼。選擇“是”后進(jìn)入工程。
所謂啟動(dòng)代碼,就是處理器在啟動(dòng)的時(shí)候執(zhí)行的一段代碼,主要任務(wù)是初始化處理器模式,設(shè)置堆棧,初始化變量等等。由于以上的操作均與處理器體系結(jié)構(gòu)和系統(tǒng)配置密切相關(guān),所以一般由匯編來編寫。而對于初學(xué)者而言,自己設(shè)計(jì)啟動(dòng)代碼有一定的難度,MDK開發(fā)平臺內(nèi)置了一些常用芯片的啟動(dòng)代碼,因此在新建工程的時(shí)候,最好是采用默認(rèn)的啟動(dòng)代碼。當(dāng)然,芯片制造廠商也會自己編寫一些啟動(dòng)代碼,放在官網(wǎng)上供開發(fā)者下載。
進(jìn)入工程之后,我們就可以開始寫代碼了。首先得新建一個(gè)文件,然后將其保存成為*.c的格式,這樣開發(fā)環(huán)境就可以識別出編寫的代碼里面一些常用的關(guān)鍵字和其他信息了。我就直接保存成為main.c。然后在屏幕左邊的Project Workspace中的Source Group 1單擊右鍵,選擇Add Files to Group “ Source Group 1”,將我們剛剛保存起來的main.c添加到Source Group 1中,或者直接雙擊Source Group 1,也可以添加文件。
接下來就可以開始寫代碼了,對于初學(xué)者而言,最基礎(chǔ)的操作應(yīng)該是對芯片IO口的操作了。因此我在學(xué)習(xí)ARM的時(shí)候,第一個(gè)工程就選擇了讓開發(fā)板上的3個(gè)LED燈順序點(diǎn)亮。STM32F103VET6中一共有A-G共7組通用輸入輸出接口(General-Purpose Inputs/Outputs),每個(gè)GPIO引腳都可以由軟件配置成輸出(推挽或開漏)、輸入(帶或不帶上拉或下拉)或復(fù)用的外設(shè)功能端口。多數(shù)GPIO引腳都與數(shù)字或模擬的復(fù)用外設(shè)共用。具體的細(xì)節(jié)請參考Datasheet。在《基于MDK的STM32處理器開發(fā)應(yīng)用》一書中,“7.1 通用IO端口”詳細(xì)描述了各個(gè)端口的功能、寄存器格式以及其他相關(guān)信息,因此就不在這里贅述了。
回到MDK開發(fā)平臺,現(xiàn)在要在main.c中加入相關(guān)代碼了。代碼清單如下:
#include "stm32f10x_lib.h"
int main()
{
int i;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //開啟外設(shè)時(shí)鐘
GPIOD->CRL = 0x33333333; //設(shè)置端口配置寄存器
GPIOB->CRL = 0x33333333;
while(1)
{
GPIOD->ODR = 0xffffffbf; //設(shè)置端口輸出寄存器
for(i=0;i<1000000;i++); //延時(shí)
GPIOD->ODR = 0xffffffff7;
for(i=0;i<1000000;i++);
GPIOD->ODR = 0x00000000;
GPIOB->ODR = 0xffffffff;
for(i=0;i<1000000;i++);
GPIOB->ODR = 0x00000000;
}
}
上述代碼中,#include "stm32f10x_lib.h"包含了開發(fā)stm32f10x系列芯片所需的基本頭文件,在進(jìn)行程序編寫的時(shí)候,務(wù)必要包含此頭文件。
RCC_APB2PeriphClockCmd()函數(shù)是設(shè)置外設(shè)時(shí)鐘。ARM與C51單片機(jī)不同的是,不用外設(shè)的時(shí)候,如IO口、ADC、定時(shí)器等等,都是禁止時(shí)鐘的,以達(dá)到節(jié)能的目的,只有要用到的外設(shè),才開啟它的時(shí)鐘。因此在需要用到GPIOB和GPIOD的時(shí)候,我們需要先開啟它的時(shí)鐘,具體用到的是函數(shù)庫里面的函數(shù):
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
其中,第一個(gè)參數(shù)需要指示要開啟什么端口的時(shí)鐘,RCC_APB2Periph_GPIOx就是開啟GPIOx的時(shí)鐘,第二個(gè)參數(shù)需要指示是開啟還是關(guān)閉,ENABLE/DISABLE。
開啟外設(shè)時(shí)鐘之后,然后就開始對GPIO的配置寄存器進(jìn)行設(shè)置了,具體設(shè)置方式參考《基于MDK的STM32處理器開發(fā)應(yīng)用》一書中,“7.1 通用IO端口”。While循環(huán)里面就是給GPIO的端口輸出寄存器賦值,由于我手上這款?yuàn)^斗開發(fā)板的三個(gè)LED燈分別接的是D3、D6和B5,所以只要將D端口和B端口相應(yīng)的位上置1就可以了。
編譯之后我們發(fā)現(xiàn)編譯器報(bào)錯(cuò),Undefined symbol RCC_APB2PeriphClockCmd,是因?yàn)槲覀兪褂昧说腞CC_APB2PeriphClockCmd()函數(shù)在頭文件中聲明了,卻沒有在C文件中定義,這個(gè)函數(shù)在.. KeilARMRV31LIBSTSTM32F10xstm32f10x_rcc.c中,將這個(gè)文件復(fù)制到工程的根目錄下,然后在屏幕左邊的Workspace中添加進(jìn)來,就可以了。
至于如何下載到ARM開發(fā)板中,不同的開發(fā)板有不同的方法,而開發(fā)板生產(chǎn)廠商一般都會將有關(guān)的文檔連同開發(fā)板一起附送,在此就不詳細(xì)贅述了。
其實(shí),在MDK的庫中,還定義了很多宏,可以避免讓我們自己去查找相關(guān)資料來設(shè)置寄存器的各個(gè)位。比如,在本次實(shí)驗(yàn)中,對于LED等的亮滅也可以通過以下代碼來實(shí)現(xiàn)。
#include "stm32f10x_lib.h"
int main()
{
int i;
GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO宏操作結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB,ENABLE); //外設(shè)時(shí)鐘配置,開啟GPIOB和GPIOD的時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //將B5口配置為通用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口線翻轉(zhuǎn)速度為50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //配置GPIOB口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3; //將D3和D6口配置為推挽輸出
GPIO_Init(GPIOD, &GPIO_InitStructure); //配置GPIOD口
while(1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_5); //B5口輸出高電平
GPIO_ResetBits(GPIOD, GPIO_Pin_6); //D6口輸出低電平
GPIO_ResetBits(GPIOD, GPIO_Pin_3); //D3口輸出低電平
for(i=0;i<1000000;i++);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_SetBits(GPIOD, GPIO_Pin_3);
for(i=0;i<1000000;i++);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
for(i=0;i<1000000;i++);
}
}
由于我們使用了GPIO_InitTypeDef類型,所以我們需要找到它的定義,這個(gè)定義包含在“…KeilARMRV31LIBSTSTM32F10xstm32f10x_gpio.c”中,將文件復(fù)制到工程根目錄下,然后再添加進(jìn)入工程中,編譯才不會報(bào)錯(cuò)。
在絕大多數(shù)C編譯器中,要求所有的變量聲明都在執(zhí)行語句塊之前,也就是說如果需要定義的變量需要先在進(jìn)入main函數(shù)一開始就全部定義好,如果執(zhí)行了某一條語句之后再定義變量的話,就會報(bào)錯(cuò).
上一篇:發(fā)現(xiàn)STM32的SPI2有問題(invalid)
下一篇:STM32學(xué)習(xí)筆記之GPIO的基本使用
推薦閱讀
史海拾趣
背景:2000年代初,隨著全球?qū)?shù)字設(shè)備需求的激增,Galaxy Microelectronics在硅谷成立。公司創(chuàng)始人是一群來自斯坦福大學(xué)的工程師,他們看到了閃存技術(shù)在便攜式設(shè)備中的巨大潛力。
發(fā)展:Galaxy Microelectronics的初創(chuàng)團(tuán)隊(duì)專注于研發(fā)高性能、低功耗的NAND閃存芯片。他們成功開發(fā)出了一種創(chuàng)新的電荷擷取閃存(CTF)技術(shù),這項(xiàng)技術(shù)有效解決了當(dāng)時(shí)浮柵架構(gòu)的串?dāng)_問題,使得閃存芯片的耐用性和速度大幅提升。這一創(chuàng)新迅速吸引了市場關(guān)注,公司開始獲得風(fēng)險(xiǎn)投資的支持。
為了拓展海外市場,ECE公司制定了國際化戰(zhàn)略。公司積極參與國際電子展會,與國際知名企業(yè)建立合作關(guān)系,不斷提升品牌知名度和國際影響力。同時(shí),ECE公司在海外設(shè)立分支機(jī)構(gòu),加強(qiáng)與國際市場的聯(lián)系和溝通,進(jìn)一步拓展市場份額。這些努力使ECE公司的產(chǎn)品成功進(jìn)入歐洲、北美等發(fā)達(dá)地區(qū)市場,實(shí)現(xiàn)了全球化布局。
隨著電子行業(yè)的快速發(fā)展,CETC意識到單打獨(dú)斗難以應(yīng)對市場的快速變化。于是,公司積極尋求與其他企業(yè)的合作,共同推動(dòng)產(chǎn)業(yè)的發(fā)展。在與某知名通信設(shè)備制造商的合作中,CETC提供了先進(jìn)的電子元件和解決方案,雙方共同開發(fā)出了多款暢銷產(chǎn)品,實(shí)現(xiàn)了市場的共贏。這種合作模式不僅提升了CETC的市場競爭力,也促進(jìn)了整個(gè)電子行業(yè)的健康發(fā)展。
為了進(jìn)一步提升公司的國際影響力,CETC開始積極布局海外市場。公司先后在美國、歐洲等地設(shè)立了研發(fā)中心和分支機(jī)構(gòu),與當(dāng)?shù)仄髽I(yè)開展深度合作,共同研發(fā)適應(yīng)市場需求的產(chǎn)品。同時(shí),CETC還積極參加國際電子展會和論壇,展示公司的最新技術(shù)和產(chǎn)品,吸引了眾多國際客戶的關(guān)注。通過這些努力,CETC成功打開了海外市場的大門,為公司的長遠(yuǎn)發(fā)展注入了新的動(dòng)力。
2022年8月,美國商務(wù)部出臺了一項(xiàng)斷供禁令,禁止向中國出售用于芯片設(shè)計(jì)的特定類型的EDA軟件。這一制裁措施對中國的半導(dǎo)體行業(yè)造成了巨大沖擊。然而,長江微電并未因此氣餒,反而借此機(jī)會加大了對電感產(chǎn)品的研發(fā)力度。通過自主創(chuàng)新,公司成功開發(fā)出了一系列高性能、高品質(zhì)的電感產(chǎn)品,滿足了國內(nèi)外客戶的需求。這一成就不僅彰顯了長江微電應(yīng)對國際制裁的勇氣和智慧,也為中國半導(dǎo)體行業(yè)的發(fā)展注入了新的活力。
近年來,F(xiàn)RIWO與印度UNO MINDA集團(tuán)建立了戰(zhàn)略合作關(guān)系,共同開發(fā)印度電動(dòng)汽車市場。UNO MINDA集團(tuán)投資1500萬歐元收購FRIWO AG的部分股權(quán),這一交易標(biāo)志著FRIWO在電動(dòng)汽車領(lǐng)域的進(jìn)一步拓展。雙方合作將結(jié)合FRIWO在電源和充電技術(shù)方面的優(yōu)勢與UNO MINDA在印度市場的深厚基礎(chǔ),為印度市場提供完整的電驅(qū)動(dòng)系統(tǒng)解決方案。這一合作不僅增強(qiáng)了FRIWO在全球市場的影響力,也為印度電動(dòng)汽車市場的發(fā)展注入了新的活力。
畢業(yè)設(shè)計(jì)題目《基于DS12C887的LCD時(shí)鐘顯示》 本帖最后由 paulhyde 于 2014-9-15 09:08 編輯 請大俠幫忙!郵箱yuda868@163.com 不勝感謝! … 查看全部問答∨ |
|
由于早期的安防工程項(xiàng)目進(jìn)入技術(shù)的門檻比較低,大部分工程人員只要經(jīng)過短期培訓(xùn),懂得接插線就可以勝任安防工程的安裝、調(diào)試工作,而技術(shù)服務(wù)則依托供應(yīng)廠家的技術(shù)培訓(xùn)或現(xiàn)場服務(wù)來解決。安防工程商的核心競爭力還是著力于“人脈關(guān)系”的經(jīng)營,而維 ...… 查看全部問答∨ |
我是學(xué)軟件的,現(xiàn)在是大二。現(xiàn)在想往嵌入式偏軟件方面學(xué)習(xí)。查了許多資料好像應(yīng)該是往Linux+arm9方面學(xué)習(xí)。不知道對不對。 下學(xué)期本院有操作系統(tǒng)、微機(jī)原理與接口技術(shù)、軟件工程概論、數(shù)據(jù)庫原理與實(shí)踐。 別的院有個(gè)叫《接口技術(shù)與單片 ...… 查看全部問答∨ |
諸位,第一次來,想問大家個(gè)問題,USB設(shè)備使用In(1) Out(2),那么PC主機(jī)驅(qū)動(dòng)要與USB設(shè)備通訊時(shí),也必須使用In(1) Out(2)嗎?… 查看全部問答∨ |
關(guān)于GUI的移植問題for vxworks and wince 想做個(gè)VxWorks下的gui程序,盡管windml可以,但是操作太困難,想找個(gè)通用的庫? 因?yàn)橐郧俺绦蚴莣ince寫的,想在這個(gè)vxworks成功之后在改寫wince版本的,所以希望gui庫可以移植到wince下 高手給推薦下吧。… 查看全部問答∨ |
我現(xiàn)在只知道內(nèi)存,IO是通過BAR寄存器申請所需資源的 那么中斷和DMA又是怎樣讓系統(tǒng)知道, 所需的資源呢? 是通過inf文件嗎?… 查看全部問答∨ |
剛開始接觸vxworks,現(xiàn)在在學(xué)習(xí)END驅(qū)動(dòng),看到tornado的target目錄下的src里面有個(gè)文件是templateEnd.c,有點(diǎn)不明白這里面的代碼和vxworks源碼里面的MUXDevLoad的關(guān)系是怎么樣的,是否在templateEnd.c里面提供的模板供我們在特定的芯片開發(fā)時(shí)按照上 ...… 查看全部問答∨ |
quartusII Programmable Pre-Emphasis 設(shè)置 Programmable Pre-Emphasis 設(shè)置芯片: ep3c5 想要把lvds接口上的Programmable Pre-Emphasis關(guān)掉,可是在assignment editor->logic option->io feature下面找不到這個(gè)選項(xiàng)。 請教大家,Programmable Pre-Emphasis在哪里可以設(shè)置? ...… 查看全部問答∨ |
初學(xué)者請教STM32的幾個(gè)問題,望好漢們不吝賜教!! 1、ST例程N(yùn)VIC/Example2中,用TIM2、TIM3、TIM4分別實(shí)現(xiàn)1S、2S、3S的定時(shí) 周期,采用的ARR值分別為4AFH,95FH,E0FH,預(yù)分頻數(shù)都是EA5FH,更新時(shí)產(chǎn)生中斷。照我的算法,定時(shí)周期是4AFH/(36MHZ/EA5FH)=2S,TIM3,TIM4分別是3S和4S,哪里算錯(cuò)了 ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- ?意法半導(dǎo)體大巴窯工廠落地創(chuàng)新冷卻系統(tǒng),提升可持續(xù)發(fā)展能力
- Nordic Semiconductor聯(lián)同Omnispace和Gatehouse Satcom完成5G NB-IoT衛(wèi)星演示
- 英偉達(dá)開啟“攻城略地”模式,擬在歐洲建設(shè)20座AI工廠
- 臺積電:日本JASM第二晶圓廠預(yù)計(jì)今年下半年動(dòng)工
- 工信部:支持車企“60天賬期”承諾,促進(jìn)產(chǎn)業(yè)健康發(fā)展
- 全球十大芯片代工廠最新排名!中芯國際沖擊世界第二
- 未來數(shù)字化工廠:重塑制造業(yè)格局
- 面對快速演進(jìn)的 GenAI 模型,Gartner發(fā)布中國企業(yè)需做出的三項(xiàng)基礎(chǔ)設(shè)施關(guān)鍵決策
- 摩爾斯微電子與成都惠利特?cái)y手合作,利用 Wi-Fi HaLow革新物聯(lián)網(wǎng)的連接
- 羅克韋爾自動(dòng)化推出 PharmaSuite 12.00,加速實(shí)現(xiàn)安全、可擴(kuò)展的部署
- 是時(shí)候充充電啦!村田寵粉月重磅開啟!
- 『ADI實(shí)驗(yàn)室電路DIY大賽』正式啟動(dòng)!
- 泰克 MSO6B 探索營:設(shè)計(jì)資源集錦
- EEWorld邀你來拆解(第10期)——玩具總動(dòng)員
- 尋寶大冒險(xiǎn),搜索有好禮!
- 直播已結(jié)束【Molex 新能源汽車低壓連接器解決方案】
- 直播已結(jié)束【用于光伏逆變器/儲能系統(tǒng)的歐姆龍繼電器 /開關(guān)/連接器解決方案】
- 下載有禮|是德科技:測試設(shè)備如何影響產(chǎn)品質(zhì)量調(diào)研報(bào)告
- TI單芯片毫米波傳感器產(chǎn)品組合新品發(fā)布會,誠邀參與,預(yù)注冊贏好禮
- 復(fù)旦國家集成電路產(chǎn)教融合創(chuàng)新平臺項(xiàng)目獲批,專攻瓶頸
- AR光學(xué)模組研發(fā)商瓏璟光電完成數(shù)千萬元的A輪融資
- 小米高管談格力、奧克斯互懟:稱手機(jī)行業(yè)有愛
- 華星光電揮起專利大棒直擊惠科侵權(quán),索賠數(shù)千萬元
- 日媒:對華為 美國中東最大盟友沙持不站在美國一邊
- AMD主動(dòng)攬鍋:缺貨是低估市場需求,和臺積電無關(guān)
- 小米電視銷量出奇跡:約為三星的10倍、LG的68倍
- OPPO Find X2正式官宣,自研芯片M1可望登場
- 外媒:AMD從英特爾手中獲40% CPU市占率
- 渦街流量計(jì)的正確選擇方法
- 中國汽車電子:鍛造核心競爭力2
- 【GD32307E-START】點(diǎn)亮一顆LED燈
- nand flash實(shí)時(shí)存儲AD采集的數(shù)據(jù)和定義大數(shù)組的問題
- 28335采樣的問題
- LC諧振頻率計(jì)算軟件初學(xué)者可用
- 【國產(chǎn)FPGA高云GW1N-4系列開發(fā)板測評】動(dòng)態(tài)數(shù)碼管之時(shí)間顯示
- 關(guān)注E趣訂閱號“智能硬件”送禮品活動(dòng)第三期送本書(已發(fā)獎(jiǎng))
- 未來,是大數(shù)據(jù)的時(shí)代
- 設(shè)計(jì)規(guī)范總結(jié)
- 大家有沒有用MSP430G系列做觸摸按鈕實(shí)驗(yàn)?