嵌入式入门学习——3Arduino基于Protues仿真实现串口输出“hello world”
0 系列文章入口
为什么用串口开始
一般嵌入式都是从点灯开始的,但是点灯不太好对比开发的难度,比如使用51单片机点灯,看上去和使用Arduino点灯难度差不多,照例上代码:
51单片机
#include <reg51.h> // 包含51单片机寄存器的定义
void main() {
while(1) {
P1 = 0xFE; // 将P1.0设置为1,其他位设置为0。二进制是11111110
delay(500);
// 熄灭LED(P1.0输出低电平)
P1 = 0xFF; // 将P1.0设置为0,熄灭LED,但这里我们让LED持续点亮以查看效果
delay(500);
// 再次延时(如果需要)
}
}
// 延时函数示例(此代码段不在main函数中)
// 注意:这里的延时函数非常粗糙,仅用于演示
// 实际应用中请使用更精确的延时方法,如定时器
void delay(unsigned int ms) {
unsigned int i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
Arduino
// 定义LED连接的引脚
int ledPin = 9; // 假设我们将LED连接到数字引脚9
void setup() {
// 初始化引脚为输出模式
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH); // 打开LED(HIGH是5V,即给LED供电)
delay(1000); // 等待一秒(1000毫秒)
digitalWrite(ledPin, LOW); // 关闭LED
delay(1000); // 等待一秒
}
乍一看是不是差不多,但是要如果操作比较复杂的事情,比如串口,51的难度会急剧上升,你将面对不知道是什么含义的寄存器,甚至需要自己计算定时器的初始值和晶振的关系来获得一个合适的波特率,具体见嵌入式学习路线系列第二篇文章。对比了STM32、Arduino、51单片机的串口使用代码,明显是Arduino最为简洁直观。
为什么使用Protues
其实买个Arduino开发板很便宜,带Wifi功能的ESP8266开发板才十几块钱,插到电脑上装上驱动和软件就能用,编程器都不用。给个链接吧,我就是跟这个博主学的ESP8266 Arduino教程这是要付费20块的,我当时懒得找了就付费看了,讲的确实不错,不想付费的等后面我的教程吧哈哈。

图1 ESP8266开发板
但是嵌入式要学的东西真的太多了,常见主控芯片就有stc51、avr、stm32f1、stm32f4、msp430等等,还有很多类型的外设,比如按键、led、数码管、LCD1602、LED显示器、存储器等等,调试的过程中还可能看看波形、电压之类的
需要示波器、万用表,一开始就买很多东西然后不想学了,吃灰了就不好了。
快开始吧
首先我们需要装一个Protues,再给个链接Proteus8.9 下载与安装教程,讲的很好,我就不讲了。
装好后跟着图示走就行了
1:新建带固件的工程
2:选择Arduino
3:选择Arduino UNO

图2 新建Arduino工程
4:在setup函数中初始化串口Serial.begin(9600)//这里不要自己发挥,仿真不支持57600以上的高波特率,而且仿真自带的串口助手默认是9600
5:在loop函数里写你要输出的内容:Serial.println(“hello world\r\n”);
6:点“010”图标编译
7:看一下编译有没有报错

图3 编写程序
8:点这个像示波器的图标
9:点这个“VERTUAL TERMIMAL”(是的它还包含串口助手,当然没有我介绍的Jcom好用)串口助手——自动校验+控件+波形图Jcom
10: 双击把他放到画布上

图4添加串口助手
11:鼠标点到RXD、TXD上面变成小笔的时候连出线,拉出来一点之后就双击停止
12:选中线(鼠标停留线变红色即可)右击菜单选择“Place Wire Lable”

图5 添加电气连接
13: RXD线标IO1(也可以是RXD)、TXD线标IO0(也可以是TXD)
14:点三角形开始仿真
15:确认仿真没有报错
16:检验成果的时候到了

图6 终于hello出来了
结语
是的这个软件包含了开发环境和调试环境,兼顾软件和硬件,我觉得是很好的教学工具,我也是在大学接触这个软件的,不过工作中用的少,他有些缺点:不免费、STM32跑不到最高主频、容易闪退、示波器没有真的好用,不过用来教学和示例还是很棒的。
今天很晚了,估计不能更STM32的Arduino仿真了,尽请期待吧。
更多推荐


所有评论(0)