注意,这里是“用”而不是学,因为对有过单片机开发经验的程序员来说,Arduino根本不用学,几乎是看一些函数就能熟练使用。
像单片机比较常用的一些功能,Arduino一个函数就能完成。
//串口定义
Serial.begin(9600);
//串口输出
print("Hello World");
//串口换行输出
println("Hello World");
//引脚定义
pinMode(D8,OUTPUT);
//引脚设置电平
digitalWrite(D8,HIGH);
而在STM32中,一个简单的串口定义,就需要数行代码。本人很少玩32,所以下面是网上找的一段STM32串口定义代码:
GPIO_InitTypeDef gpioinitStructure;//结构体变量定义,结构体定义要在时钟之前
USART_InitTypeDef usartinitStucture;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//配置gpio,串口,串口复用时钟
//先配置tx输出引脚io(pa9)
gpioinitStructure.GPIO_Pin =GPIO_Pin_9;//选择引脚
gpioinitStructure.GPIO_Speed=GPIO_Speed_50MHz;//选择电平大小,初始状态无电平
gpioinitStructure.GPIO_Mode =GPIO_Mode_AF_PP;//用推挽输出
GPIO_Init(GPIOA,&gpioinitStructure );//端口初始化
//再配置rx输出引脚io(pa10)
gpioinitStructure.GPIO_Pin =GPIO_Pin_10;
gpioinitStructure.GPIO_Speed=GPIO_Speed_50MHz;//选择电平大小,初始状态无电平
gpioinitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&gpioinitStructure );//再次端口初始化,因为过程相同且都是gpio所以不用再定义
//串口结构体的配置
usartinitStucture.USART_BaudRate =115200;//波特率
usartinitStucture.USART_HardwareFlowControl =USART_HardwareFlowControl_None;//无限流
usartinitStucture.USART_Parity =USART_Mode_Rx | USART_Mode_Tx;//输入输出模式
usartinitStucture.USART_WordLength =USART_Parity_No;//无校验位
usartinitStucture.USART_StopBits =USART_StopBits_1;//一个停止位
usartinitStucture.USART_Mode =USART_WordLength_8b;//有效数据长度8bit
USART_Init(USART1,&usartinitStucture);//串口1初始化
USART_Cmd(USART1,ENABLE);//打开串口1
这使得你根本不需要学习底层的东西,只要会用Arduino封装的函数,一行代码就能做到几十行代码的效果。代码的高度封装和使用的简洁,是使用arduino的第一个理由。
使用Arduino的第二个理由是,当你想要编程更复杂的功能,Arduino有个万能的方法——找库。
几乎你想要控制的市面上通用的大部分传感器,都能找到对应的库或例程代码。
当你拿到一个陌生的传感器,使用Arduino的第一反应不是去看文档,找协议。而是直接去找库,百度、github,总能找到你想要的,拿来主义可太香了。
但也并不是说要永远坐享其成,你可以去看库的提供者写的代码,学习写库的方法,在库代码中学习这款传感器的原理,这也都是可以做的。
可能很多产品并不会用arduinoUNO的328P芯片,主流依然是STM32或能联网的ESP8266,也有些用51,但对于电子爱好者来说,用更少的时间学习就能完成想要的复杂功能,这是一个无法拒绝的诱惑。
随着编程的门槛越来越低,Arduino这种平台的优越性也越发明显,它的低门槛也引入越来越多对电子感兴趣的爱好者。
希望看了这篇文章,能让你对Arduino和其他主板之间的取舍有一个引导作用。内行大佬自不用说,但对小白来说,仅仅是爱好,Arduino已经能达成任何你心中所想。
有问题可以评论我提问,我也会收集问题放到后续的更新中。
关注我,更多Arduino等有趣的电子世界内容我会在后面慢慢更新。