• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

MCU主流開發(fā)語言有哪些?

04/25 11:33
475
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

微信公眾號 | strongerHuang

單片機有很多叫法,MCU(Microcontroller Unit,微控制單元),又叫微控制器等。

隨著物聯(lián)網(wǎng)的普及,單片機現(xiàn)在的需求越來越大了。同時,隨著單片機性能和資源的增強,開發(fā)單片機的語言也越來越多了。

那么,你知道單片機目前支持哪些主流開發(fā)語言嗎?

1、匯編語言說明:匯編語言是一種底層(低級)的、與硬件緊密相關(guān)的編程語言。它直接映射到機器語言,允許程序員直接控制硬件資源。

舉例:用匯編語言寫一段51單片機(AT89S52)點燈程序。

ORG0x0000 ?; 程序起始地址
MOVP1,?#0x00 ?; 初始化P1口為低電平
MAIN:MOVP1.0,?#1 ?; 點亮LED,將P1.0置為高電平ACALLDELAY ? ; 調(diào)用延時子程序MOVP1.0,?#0 ?; 熄滅LED,將P1.0置為低電平ACALLDELAY ? ; 調(diào)用延時子程序SJMPMAIN ? ? ; 無限循環(huán)
DELAY:;延時子程序MOVR2,?#50DELAY_LOOP:DJNZR2, DELAY_LOOP? ? RET

2、C語言說明:C語言是最常用的一種用于單片機的開發(fā)語言,也是一種高級編程語言,具有較好的可移植性和可讀性。對于單片機,通常使用嵌入式C來進行開發(fā)。

舉例:用C語言寫一段STM32單片機點燈程序。

#include?"stm32f4xx_hal.h"
intmain(void){??HAL_Init();
??SystemClock_Config();
??__HAL_RCC_GPIOA_CLK_ENABLE(); ?// 啟用GPIOA時鐘
? GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置GPIO引腳? GPIO_InitStruct.Pin?=?GPIO_PIN_5; ? ? ?// 假設(shè)LED連接到GPIOA的引腳5? GPIO_InitStruct.Mode?=?GPIO_MODE_OUTPUT_PP;?// 推挽輸出? GPIO_InitStruct.Pull?=?GPIO_NOPULL; ? ? ??// 無上下拉? GPIO_InitStruct.Speed?=?GPIO_SPEED_FREQ_LOW;?// 低速??HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
while?(1)? {? ??HAL_GPIO_WritePin(GPIOA,?GPIO_PIN_5,?GPIO_PIN_SET);?// 點亮LED? ??HAL_Delay(1000);?// 延時1秒
? ??HAL_GPIO_WritePin(GPIOA,?GPIO_PIN_5,?GPIO_PIN_RESET);?// 關(guān)閉LED? ??HAL_Delay(1000);?// 延時1秒? }}

3、C++語言說明:C++是一種基于C語言的面向?qū)ο缶幊陶Z言,盡管在單片機領(lǐng)域使用相對較少,但還是一些現(xiàn)代的單片機也開始支持C++。

舉例:用C++語言寫一段STM32單片機點燈程序。

int?main(void){LED_Class?LED1(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF);LED_Class?LED2(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);
? LED1.Init();? LED2.Init();
while(1)? {? ? LED1.Open();? ? LED2.Open();? ? Delay(10);
? ? LED1.Close();? ? LED2.Close();? ? Delay(10);? }}

當然,這里定義的類和調(diào)用的函數(shù)接口,請看我之前推送的文章《單片機能用C++開發(fā)嗎?》。

4、Python語言說明:Python雖然不常用于傳統(tǒng)的單片機編程,但一些微控制器如MicroPython和CircuitPython支持Python語言,使得開發(fā)更加簡化。

舉例:用MicroPython語言寫一段單片機點燈程序。

import?machineimport?time
led_pin?= machine.Pin(2, machine.Pin.OUT) ?# 假設(shè)LED連接到引腳2
whileTrue:? ??led_pin.on() ? # 點亮LED? ??time.sleep(1) ?# 延時1秒
? ??led_pin.off() ?# 關(guān)閉LED? ??time.sleep(1) ?# 延時1秒

說明一下,這里代碼使用的MicroPython,而不是標準的Python。確保你的開發(fā)板支持MicroPython,并已正確安裝和配置。在實際的嵌入式開發(fā)中,你可能還需要考慮硬件配置、時鐘設(shè)置以及其他底層細節(jié)。

5、Rust語言說明:Rust本身并不是直接用于編寫STM32單片機程序的常見語言,但你可以通過一些工具和庫來實現(xiàn)。

舉例:用Rust語言寫一段STM32單片機點燈程序。

#![no_std] ?#![no_main] ?#![feature(lang_items)] ?
extern crate cortex_m; ?extern crate cortex_m_rt?as?rt; ?extern crate stm32f1xx_hal?as?hal;?// 注意:這里需要根據(jù)你的STM32型號選擇合適的HAL庫 ?
use?core::panic::PanicInfo; ?use?hal::prelude::*; ?use?hal::stm32; ?use?rt::entry; ?
// 語言項 ?#[lang = "start"] ?fn?start(_main: &() -> !, _argc: isize, _argv: *const?*const?u8) -> !?{ ?? ??// 初始化HAL和CPU ?? ? let cp = cortex_m::Peripherals::take().unwrap(); ?? ? let dp = stm32::Peripherals::take().unwrap(); ?
? ? let mut rcc = dp.RCC.constrain(); ?? ? let mut gpioa = dp.GPIOA.split(&mut rcc.ahb); ?
? ??// 假設(shè)LED連接在GPIOA的PIN5上 ?? ? let mut led = gpioa.pa5.into_push_pull_output(); ?
? ? loop { ?? ? ? ??// 打開LED ?? ? ? ? led.set_high().unwrap(); ?? ? ? ??// 延時一段時間(這里需要實現(xiàn)一個延時函數(shù)) ?? ? ? ??delay_ms(1000); ?
? ? ? ??// 關(guān)閉LED ?? ? ? ? led.set_low().unwrap(); ?? ? ? ??// 再次延時 ?? ? ? ??delay_ms(1000); ?? ? } ?}?

6、其他編程語言

除了以上匯編、C語言、C++、Python語言,其實還有極少一些用Java語言,但JAVA需要運用虛擬機,需要在高性能的單片機上運行。

還看到有用一種叫Ada的編程語言,據(jù)說主要用在在一些航空航天和軍事應(yīng)用中得到廣泛應(yīng)用,具有強大的靜態(tài)類型檢查和并發(fā)編程支持。

除了上面說到的匯編、C語言、C++、Python語言,你還想到有哪些?或者你用過哪些編程語言開發(fā)單片機?

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級嵌入式軟件工程師,業(yè)余維護公眾號『strongerHuang』,分享嵌入式軟硬件、單片機、物聯(lián)網(wǎng)等內(nèi)容。