没看过gd32的库,但我觉得stm32的库确实就是稀烂,绝对不是这点点命名风格问题。
我最近开始尝试用rust做stm32的开发了,目前感觉良好。
rust的好处有几个,一个是非常严格的编译期代码检查,基本上能通过编译的代码就不会
有c里面的内存管理问题。对于嵌入式设备来说,你只要操行逻辑问题即可,不用担心代
码会跑飞。
第二个是rust能做到zero cost abstraction,不像c的hal库,一用编译出来的尺寸
就暴涨。
第三个是rust有很强的描述能力,都2020年了,用c做点事情实在是太折腾了。用了
rust总算有点新时代语言的感觉了...
第四个是目前rust还相对小众,但这种语言设计风格掌握的门槛较高,反过来也只有高手
和对某些方面有完美主义追求的人才会使用,所以目前rust的库代码质量相对较高,是我
看到的各种生态中质量最高的,没有之一。
可以去github看看example感受下:
https://github.com/stm32-rs/stm32f1xx-hal/tree/master/examples
我选个adc的例子贴下,这tm才叫HAL库啊,之前的stm32官方库那写的都是什么鬼东西。
#![deny(unsafe_code)]
#![no_main]
#![no_std]
use panic_semihosting as _;
use cortex_m_rt::entry;
use stm32f1xx_hal::{adc, pac, prelude::*};
use cortex_m_semihosting::hprintln;
#[entry]
fn main() -> ! {
// Acquire peripherals
let p = pac::Peripherals::take().unwrap();
let mut flash = p.FLASH.constrain();
let mut rcc = p.RCC.constrain();
// Configure ADC clocks
// Default value is the slowest possible ADC clock: PCLK2 / 8. Meanwhile ADC
// clock is configurable. So its frequency may be tweaked to meet certain
// practical needs. User specified value is be approximated using supported
// prescaler values 2/4/6/8.
let clocks = rcc.cfgr.adcclk(2.mhz()).freeze(&mut flash.acr);
hprintln!("adc freq: {}", clocks.adcclk().0).unwrap();
// Setup ADC
let mut adc1 = adc::Adc::adc1(p.ADC1, &mut rcc.apb2, clocks);
#[cfg(feature = "stm32f103")]
let mut adc2 = adc::Adc::adc2(p.ADC2, &mut rcc.apb2, clocks);
// Setup GPIOB
let mut gpiob = p.GPIOB.split(&mut rcc.apb2);
// Configure pb0, pb1 as an analog input
let mut ch0 = gpiob.pb0.into_analog(&mut gpiob.crl);
#[cfg(feature = "stm32f103")]
let mut ch1 = gpiob.pb1.into_analog(&mut gpiob.crl);
loop {
let data: u16 = adc1.read(&mut ch0).unwrap();
hprintln!("adc1: {}", data).unwrap();
#[cfg(feature = "stm32f103")]
{
let data1: u16 = adc2.read(&mut ch1).unwrap();
hprintln!("adc2: {}", data1).unwrap();
}
}
【 在 tom6bj (tom) 的大作中提到: 】
: 具体怎么烂法, 举个例子?
: 我是觉得取寄存器时用函数调用风格的RDATA(USART1)之类不如stm32官方库的USART1->RDR看着舒
服, 不过纯小写+下划线的命名风格比匈牙利式看起来更顺眼.
: 个人喜好问题吧
: ...................
--
修改:lvsoft FROM 49.94.69.*
FROM 49.94.69.*