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

MCU主流開(kāi)發(fā)語(yǔ)言有哪些?

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

微信公眾號(hào) | strongerHuang

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

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

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

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

舉例:用匯編語(yǔ)言寫(xiě)一段51單片機(jī)(AT89S52)點(diǎn)燈程序。

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

2、C語(yǔ)言說(shuō)明:C語(yǔ)言是最常用的一種用于單片機(jī)的開(kāi)發(fā)語(yǔ)言,也是一種高級(jí)編程語(yǔ)言,具有較好的可移植性和可讀性。對(duì)于單片機(jī),通常使用嵌入式C來(lái)進(jìn)行開(kāi)發(fā)。

舉例:用C語(yǔ)言寫(xiě)一段STM32單片機(jī)點(diǎn)燈程序。

#include?"stm32f4xx_hal.h"
intmain(void){??HAL_Init();
??SystemClock_Config();
??__HAL_RCC_GPIOA_CLK_ENABLE(); ?// 啟用GPIOA時(shí)鐘
? 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; ? ? ??// 無(wú)上下拉? 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);?// 點(diǎn)亮LED? ??HAL_Delay(1000);?// 延時(shí)1秒
? ??HAL_GPIO_WritePin(GPIOA,?GPIO_PIN_5,?GPIO_PIN_RESET);?// 關(guān)閉LED? ??HAL_Delay(1000);?// 延時(shí)1秒? }}

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

舉例:用C++語(yǔ)言寫(xiě)一段STM32單片機(jī)點(diǎn)燈程序。

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);? }}

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

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

舉例:用MicroPython語(yǔ)言寫(xiě)一段單片機(jī)點(diǎn)燈程序。

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

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

5、Rust語(yǔ)言說(shuō)明:Rust本身并不是直接用于編寫(xiě)STM32單片機(jī)程序的常見(jiàn)語(yǔ)言,但你可以通過(guò)一些工具和庫(kù)來(lái)實(shí)現(xiàn)。

舉例:用Rust語(yǔ)言寫(xiě)一段STM32單片機(jī)點(diǎn)燈程序。

#![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型號(hào)選擇合適的HAL庫(kù) ?
use?core::panic::PanicInfo; ?use?hal::prelude::*; ?use?hal::stm32; ?use?rt::entry; ?
// 語(yǔ)言項(xiàng) ?#[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 { ?? ? ? ??// 打開(kāi)LED ?? ? ? ? led.set_high().unwrap(); ?? ? ? ??// 延時(shí)一段時(shí)間(這里需要實(shí)現(xiàn)一個(gè)延時(shí)函數(shù)) ?? ? ? ??delay_ms(1000); ?
? ? ? ??// 關(guān)閉LED ?? ? ? ? led.set_low().unwrap(); ?? ? ? ??// 再次延時(shí) ?? ? ? ??delay_ms(1000); ?? ? } ?}?

6、其他編程語(yǔ)言

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

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

除了上面說(shuō)到的匯編、C語(yǔ)言、C++、Python語(yǔ)言,你還想到有哪些?或者你用過(guò)哪些編程語(yǔ)言開(kāi)發(fā)單片機(jī)?

相關(guān)推薦

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

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