當前位置:首頁 » 編程語言 » stm單片機c語言開發
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

stm單片機c語言開發

發布時間: 2023-03-21 12:12:47

Ⅰ 需要stm32的c語言設計程序

沒學過單片機,有c語言枝首搜基礎,是能芹世直接學習stm32的。因為STM32是基於專為要求高性能、低成本、低功耗的嵌入猛歷式應用專門設計的ARM Cortex-0內核而設計的,屬於高級單片機,其可以使用匯編語言編寫程序,也可使用c語言編寫程序,而且很多使用stm32單片機的人都是使用c語言編寫程序,所以通過一本詳細講解stm32的書籍直接學習是完全可行的。

Ⅱ 學stm32需要哪些基礎

學stm32主要是需要C語言基礎知識,檔氏和單片機基礎知識。

stm32(中文名:嵌入式單片機)是意法半導體集團開發的一個系列的微控制器。其是專為要瞎大求高性能、低成本、低功耗的嵌入式應用而設計的。按內核架構分為不同產品:主流產品(STM32F0、STM32F1、STM32F3)、超低功耗產品(STM32L0、STM32L1、STM32L4、STM32L4+)、高性能產品(STM32F2、STM32F4、STM32F7、STM32H7)。

STM32的優點在於官方已經封裝好了大多數基礎的寄存器等數據,不需要逐一找地址。各種功能的使用只需調用相應函數即可。

學習STM32小技巧:

技巧1:AHB系統匯流排分為APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速設備;

技巧2:Stm32f10x.h相當於reg52.h(裡面有基本的位操作定義),另一個為stm32f10x_conf.h專門控制外圍器件的配置,也就是開關頭文件的作用;

技巧3:HSE Osc(High Speed External Oscillator)高速外部晶振,一般為8MHz,HSI RC(High Speed InternalRC)高速內部RC,8MHz。

Ⅲ C語言可以開發單片機或者stm32的上位機嗎

可以,Keil就可以

Ⅳ 不知有沒有人對C++開發STM32感興趣的,來討論些問題

因為一開始我自學的就是C++,後來玩單片機以後才使用C語言來開芹伍派發東西,也寫過一些程序了,
但是我的體會就是,C語言沒有C++那麼方便,最近才在學STM32,看到ARM編譯器能夠支持C++,挺爽的,就開始嘗試把實驗代碼的工程改成C++的方式
出現了一些問題,我不太會查資料,網上討論這個的也比較少,所以就發個帖子大家一起討論下

先說一下,為什麼要用C++,(說的可能不太清楚,對沒學過C++的哥們就不好意思啊呃。。。)
1. 最簡單的,函數重載, 這個語法特性就比C語言的好,還有運算符重載,這些都可以讓代碼變得更直觀(這個等下我用我剛剛拓展的代碼來演示一下)
2. 命名空間,C語言寫大程序一般每個模塊都會有個前綴,但是寫起來麻煩,其實有時候在一個地方只會用到一個模塊的內容,所以用using xxx::xxx感覺會比較方便些。
3. 類的支持,尤其是成員函數什麼的使用起來方便,還有constructor,不用每次手動調用初始化。
(關於這個還是有一點問題我沒有解決的,好像是全部類變數的初始化問題,我比較健忘,記不清了)
4.inline關鍵字,可以解決宏的一些缺陷 (有熱心網友指出,用C也有__inline關鍵字)
5.引用參數的支持,比直接使用指針省事放心些
6.模板的支持,(這個在我之前發過的一個關於宏的帖子里有提到一點,也有提供代碼,這個帖子的附件裡面也有代碼)
7.至少,網上說的,C++具有C的全部優點
關於我上面說的優點,也有網友對我的觀點不屑,
有的說C++效率低下(關於這個我並不理解,因為我反匯編看過,沒有明顯的區別,除非你使用了繼承多態的特性可能會有問題,
但是,在有些地方就需要使用這些特性,特別是在比較大的系統里,比如GUI,就算是用C語言去模擬面象對象的實現過程效率也是差不多的)
還有網友稱C++的一些語法特性為語法糖,沒多大用處(呵呵,這個就看個人喜好了,就像學過匯編的哥們可能就喜歡寫匯編,不喜歡用C語言一樣)

我也不打算說服所有的人,我只是希望有興趣的人能和我一起交流意見,我之前發了那個帖子之後,就有一位華工剛畢業的師兄感興趣,通過郵件和我交流
只可惜那個時候我一直沒什麼時間繼續解決那些問題。趁這個下午有點時間,我就改了一下之前的代碼,再到這里發帖,希望有興趣橘猜的人能一起交流。

下面是我遇到的一些問題,有的已經解決,有的還沒解決:

1. 以前的庫函數怎麼使用?
在函數聲明前加上 extern "C" 就可以了,因為C++支持函數重載之類的東東,所以生成的目標代碼的名字和C會有些不同,用extern "C"強製成C語言的名字規則。
現在新版本的庫好像已經加上了,這里順便問一下,新版本的庫在官網的哪裡下載?我不要一點就直接彈出下載的鏈接

新版的STM32的庫的頭文件前面是
#ifdef __cplusplus
extern "C" {
#endif

後面
#ifdef __cplusplus
}
#endif
這就是為了兼容C++的。

2. 中斷函數進不去呀?
中斷函數定義前也要加上 extern "C"。中斷函數,名字已經固定了(在你使用MDK給的啟動代碼的情況下),
而C++對函數的生成的目標代碼的命名方式和C語言不一樣(為了支持重載),
然後我是以這種方式來解決的,
#define ARMAPI extern "C"
ARMAPI void EXTI15_10_IRQHandler(void)
{
...
}

3. 對庫裡面定義的結構體有警告: warning: #368-D: class "<unnamed>" defines no constructor to initialize the following:
這個沒有關系的,我用這段代碼屏蔽了中間警告
#ifdef __cplusplus
extern "C" {
//消除 warning: #368-D: class "<嫌賀unnamed>" defines no constructor to initialize the following:
#pragma diag_remark 368
#endif

...
...

#ifdef __cplusplus
//恢復368號警告
#pragma diag_default 368
}

4. C++有 new 關鍵字,類似C的malloc,但是這個是需要有內存管理提供動態內存的,這個在一個沒有操作系統的MCU上咋整呀?
其實關於使用C++的,國外已經有成功的例子了(只是IDE用的不是MDK。。。),我從網友提供的鏈接去下載了源代碼:
http://andybrown.me.uk/ws/2011/12/28/stm32plus-a-c-library-for-stm32-development/
(PS:看了他們的代碼庫,我發現我以前寫的文件系統實在是弱啊。。。沒關系,會繼續完善的)

人家是這么搞的,利用函數重載,重載了new操作符,(軟體模擬會跳進重載的函數里)
,自己只要提供malloc和free以及堆的一些初始化就行了(這個一般要上了OS才有內存管理的吧。。。)

/* * Implement C++ new/delete operators using the heap */
void *operator new(size_t size)
{ return malloc(size); }

void *operator new[](size_t size)
{ return malloc(size); }

void operator delete(void *p)
{ free(p); }

void operator delete[](void *p)
{ free(p); }

還有些沒解決的問題

5. 定義全局類變數後會有錯誤:
..\output\stm32test.axf: Error: L6218E: Undefined symbol __cpp_initialize__aeabi_ (referred from anon$$obj.o).
class A
{
public :
A()
{
int x, y;
x = 5;
y = 7;
x = y;
y = x + 8;
}
};
A a;

有些地方可能不清楚,原帖子在這個鏈接:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5401612&bbs_page_no=1&search_mode=3&search_text=Pony279&bbs_id=9999

然後是我剛剛做的設置IO口模式的幾個函數的測試代碼,因為實現代碼比較長,我不會帖上來,
在附件裡面有完整的代碼,測試代碼在gpio_test_120309a.cpp文件里,相關的代碼全部在 MYLIB文件夾裡面也有。
(自己在學習的時候整理的函數都在那裡面,其實內容比較少。。。)
我這里只是為了演示使用的便利性的提高和代碼的閱讀性的提高。

SetMode函數實現是利用了函數重載的,和默認參數。如果不知道什麼是重載的,先不要去想語法,直接看代碼,看得懂不?
int main(void)
{
{using namespace gpio; //在這個代碼block裡面使用gpio的命名空間。

SetMode(GPIOA, Pin(0), OUTPUT); //設置PA0為輸出模式,有默認參數 開漏輸出, 這里沒有寫出來
SetMode(GPIOA, Pin(1), OUTPUT, OPEN_DRAIN, _50M);
SetMode(GPIOA, Pin(2), OUTPUT, PUSH_PULL, _50M);
SetMode(GPIOA, Pin(3), INPUT); //有默認參數,上拉輸入,沒有寫出來。
SetMode(GPIOA, Pin(8), INPUT, PULL, DOWN);
SetMode(GPIOB, Pin(3), INPUT);
SetMode(GPIOB, Pin(8), INPUT, PULL, DOWN);
}
//模擬結果和預期一致。
while(1);
}

函數重載是語法上允許同名函數的存在,但是需要這兩個函數的參數列表是不同的,使用的時候,編譯器會知道你要調用的是哪個函數。
在寫代碼的時候對於一個同樣功能但是參數類型不同的函數,如果需要起不同的名字,不論是寫代碼還是讀代碼都會比較痛苦的,

我上面好像提了幾次代碼的閱讀性的問題,因為我一直很重視代碼的閱讀性,這一點從我之前發的那個關於宏的帖子大家也可以知道。
因為,我想老鳥應該有體會,其實程序猿花在讀代碼上的時間,是遠大於寫代碼的時間的。

好像扯遠了。。。就先到這里吧。。。

Ⅳ c語言51,stm32等單片機程序的大專是什麼專業

計算機專業。C語言是一門面坦或向過程的、抽象化的通用程序設計鋒和語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲銀信盯器。

Ⅵ stm32用什麼語言編程

現在困耐普遍都是使用keil的環境下,c語言編模尺指程。旦配都有庫函數,直接調用庫函數就方便多了。匯編也可以,不過維護性不好。還有就是你可以去用stm32 cube這個工具圖形化編程,更加方便簡單了

Ⅶ 利用stm32的單片機完成下面的要求,程序該怎麼寫,用C語言

用兩個定時器分別對兩個LED燈閃爍,KEY1和KEY2要設置為外部中斷輸入,當進入中斷時KEY1_DANG或KEY2_DANG指向下一個檔位,並且發送串口。給你提供點思路。
void main()
{
while(1)
{
if(key1_dang==0x01)
中斷定時1設置為0.2秒
if(key1_dang==0x02)
中斷定時1設置為0.4秒
if(key1_dang==0x03)
中斷定時1設置為0.6秒
if(key1_dang==0x04)
中斷定時1設置為0.8秒
if(key1_dang==0x05)
中斷定時1設置為1.0秒

if(key2_dang==0x01)
中斷定時2設置為0.2秒
if(key2_dang==0x02)
中斷定時2設置為0.4秒
if(key2_dang==0x03)
中斷定時2設置為0.6秒
if(key2_dang==0x04)
中斷定時2設置為0.8秒
if(key2_dang==0x05)
中斷定時2設置為1.0秒
}

}

Ⅷ 如何快速的學會單片機C語言編程

很多想學單片機的人問我的第一句話就是怎樣才能學好單片機?對於這個問題我今天就我自己是如何開始學單片機,如何開始上手,如何開始熟練這個過程給大家講講。

先說說單片機,一般我們現在用的比較多的的MCS-51的單片機,它的資料比較多,用的人也很多,市場也很大。就我個人的體會怎麼樣才能更快的學會單片機這門課。單片機這門課是一項非常重視動手實踐的科目,不能總是看書,但是學習它首先必須得看書,因為從書中你需要大概了解一下,單片機的各個功能寄存器,而說明白點,我們使用單片機就是用軟體去控制單片機的各個功能寄存器,再說明白點,就是控制單片機那些管腳的電平什麼時候輸出高,什麼時候輸出低。由這些高低電平的變化來控制你的系統板,實現我們需要的各個功能。至於看書,只需大概了解單片機各管腳都是干什麼的?能實現什麼樣的功能?第一次,第二次你可能看不明白,但這不要緊,因為還缺少實際的感觀認識。所以我總是說,學單片機看書看兩三天的就夠了,看小說你一天能看五六本,看單片機你兩三天看兩三遍就夠了,可以不用仔細的看。推薦一本書,就這一本就足夠,書名是《新編MCS-51單片機應用設計》,是哈爾濱工業大學出版社出的的,作者是張毅剛。大概了解一下書上的內容,然後實踐,這是非常關鍵的,如果說學單片機你不實踐那是不可能學會的,關於實踐有兩種方法你可以選擇,一種方法:你自己花錢買一塊單片機的學習板,不要求功能太全的,對於初學者來說你買功能非常多的那種板子,上面有很多東西你這輩子都用不著,我建議有流水燈、數碼管、獨立鍵盤、矩陣鍵盤、AD或DA(原理一樣)、液晶、蜂鳴器,這就差不多了。如果上面我提到的這些,你能熟練應用,那可以說對於單片機方面的硬體你已經入門了,剩下的就是自己練習設計電路,不斷的積累經驗。只要過了第一關,後面的路就好走多了,萬事開頭難,大家可能都聽過。方法二:你身邊如果有單片機方面的高手,向他求助,讓他幫你搭個簡單的最小系統板。對於高手來說,做個單片機的最小系統板只需要一分鍾的時間,而對於初學者可就難多了,因為只有對硬體了解了,才能熟練運用。而如果你身邊沒有這樣的高手,又找不到可以幫助你的人,那我勸你最好是自己買上一塊,畢竟自己有一塊要方便的多,以後做單片機類的小實驗時都能用得上,還省事。

有了單片機學習板之後你就要多練習,最好是自己有台電腦,一天少看電影,少打游戲,把學習板和電腦連好,打開調試軟體坐在電腦前,先學會怎麼用調試軟體,然後從最簡單的流水燈實驗做起,等你能讓那八個流水燈按照你的意願隨意流動時你已經入門了,你會發現單片機是多麼迷人的東西啊,太好玩了,這不是在學習知識,而是在玩,當你編寫的程序按你的意願實現時你比做什麼事都開心,你會上癮的,真的。做電子類的人真的會上癮。然後讓數碼管亮起來,這兩項會了後,你已經不能自拔了,你已經開始考慮你這輩子要走哪一行了。就是要這樣練習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,或是問別人,當得到解答後你會記住一輩子的,知識必須用於現實生活中,解決實際問題,這樣才能發揮它的作用,你自己好好想想,上了這么多年大學,天天上課,你在課堂上學到了什麼?是不是為了期末考試而忙碌呢?考完得了90分,哈哈哈好高興啊,下學期開學回來忘的一干二凈,是不是?你學到什麼了?但是我告訴你單片機一旦學會,永遠不會忘了。另外我再說說用匯編和C語言編程的問題。很多同學大一二就開設了C語言的課,我也上過,我知道那時天天就是幾乘幾,幾加幾啊,求個階乘啊。學完了有什麼用?讓你用C語言編單片機的程序你是不是就傻了?書上的東西我們必須要會運用。單片機編程用C語言或匯編語言都可以,但是我建議用C語言比較好,如果原來有C語言的基礎那學起來會更好,如果沒有,也可以邊學單片機邊學C語言,C語言也挺簡單,只是一門工具而已,我勸你最好學會,將來肯定用得著,要不你以後也得學,你一點匯編都不會根本無所謂,但你一點C語言都不會那你將來會吃苦頭。匯編寫程序代碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到演算法方面的問題時,根本是麻煩的不得了,現在單片機的主頻在不斷的提高,我們完全不需要那麼高效率的代碼,因為有高頻率的時鍾,單片機的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,只需要變一個IO口寫個溫度感測器的程序在哪裡都能用,所以我勸大家用C語言。

總結上面,只要你有信心,做事能堅持到底,有不成功不放棄的強烈意志,那學個單片機來說就是件非常容易的事。

步驟:1.找本書大概了解一下單片機結構,大概了解就行。不用都看懂,又不讓你出書的。(三天)

2.找學習板練習編寫程序,學單片機就是練編程序,遇到不會的再問人或查書。 (二十天)

3.自己網上找些小電路類的資料練習設計外圍電路。焊好後自己調試,熟悉過程。 (十天)

4.自己完全設計具有個人風格的電路,產品,。。。你已經是高手了。 。。。。

看到了嗎?下功夫一個多月你就能成為高手,我就講這么多了,學不學得會,下不下得了功夫就看你的了。
參考資料:

Ⅸ 用c語言開發stm32和開發其他東西感覺不太一樣吧

首先得要看你做的東西有多復雜,所寫的代碼能有多大。
「人有多大力就辦多大事」,STM32的功能遠比51、AVR之類的單片機要強大得多,相對來說開發的產品功能比較大,代碼也會比較復雜。

首先有完整的框架是非常必須的,我個人認為這里的框架有兩層,一個是在STM32上移植現有的操作系統或者一些穩定的代碼框架,另外一個是自己的編程風格。

你想很方便的開發相對復雜的東西,建議你首先在STM32上移植一個小型操作系統或一種框架,然後在操作系統之上編寫你自己的應用去開發產品。在沒有操作系統或框架的情況下開發是非常麻煩的事情。要做到條理清晰的話,那就應該去迎合操作系統或框架的風格去編寫代碼,這答案並不唯一。 舉個簡單例子,現在比較熱門的STM32F103或STM32F407開發產品,一般會移植一個ucosii或rt-thread操作系統(當然也有移植linux或android的,但我個人很少見),ucosii我沒實際開發過我就不說了,像rt-thread這樣的實時操作系統,它具有多任務編程,那麼我們就需要迎合它的特點,比如我串口作為一個線程,LCD、LED掃描作為一個線程,數據採集作為一個線程,鍵盤掃描作為一個線程等等,在他們的線程中只各自做自己的事情,然後在增加一個頂層的線程專門來負責處理其他線程所產生的消息事件(或者給其他各線程發送消息事件),頂層的線程是作為一個中心處理線程來合理安排和處理其他各個線程的消息事件。
至於在這方面的提升,只能是通過實踐來達到效果,這里的「實踐」不是說要完全自己去摸索,你需要有東西來借鑒,因為現在一些操作系統、或框架、或編程風格都是比較成熟,你直接拿來看,看看別人是怎麼寫的代碼,然後自己再去仿照著能不能寫的出來,再分析裡面的優缺點。你要是還在學校且資源有限,建議你可以花個幾百塊錢上淘寶買一個開發板,一般的開發板都有各個外設的實驗,以及綜合實驗,或許還會有操作系統或框架的移植和使用。

Ⅹ stm32單片機c語言詳解

32單片機隨緣的詳解就是根據你常規的單片機語言進行調整。