微信公眾號(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,?#50
DELAY_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?machine
import?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ī)?