先简单的使用串口通信AT指令
刚开始不知道用什么开发好 在博客找了很久本来打算用 eclipse
不过突然发现可以用Arduino
不过下载真的好慢
于是开始看一下函数准备一下
一、基本函数
1、setup() 函数
Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。
通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。
2、loop()函数
在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。
通常我们会在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。
二、功能函数
1、GPIO
①在使用输入或输出功能前,需要先通过pinMode() 函数配置引脚的模式为输入模式或输出模式。
pinMode(pin, mode)
pin 指定配置的引脚编号
mode 指定的配置模式。通常可用模式有三种, INPUT:输入模式,OUTPUT:输出模式,INPUT_PULLUP :输入上拉模式
②让某个引脚输出高电平或者是低电平。
digitalWrite(pin, value)
pin 指定配置的引脚编号
value 指定输出的电平。HIGH:输出高电平,LOW:输出低电平
③读取某个引脚的电平状态,返回值为获取到的信号状态,1为高电平,0为低电平。
digitalRead(pin)
pin 指定配置的引脚编号
2、外部中断
①对中断引脚进行初始化配置,以开启Arduino的外部中断功能。
attachInterrupt(pin, ISR, mode)
pin 指定配置的引脚编号
ISR 中断服务函数名,该函数由用户自己定义
mode 中断模式,HIGH:上升沿触发、LOW:下降沿触发
示例:
attachInterrupt(2, Hello, LOW);
该语句会开启Arduino Uno的 2号引脚(中断编号0)的外部中断功能,并指定下降沿时触发该中断。Hello() 函数是自己定义的一个函数,函数里面执行什么也是根据自己的需要来写。
当2号引脚上电平由高变低后,该中断会被触发,Arduino即会运行Hello() 函数中的语句。
②中断分离函数,可以对已经配置了中断的引脚关闭中断功能。
detachInterrupt(pin)
pin 指定配置的引脚编号
3、时钟相关
①获取Arduino通电后(或复位后)到现在的时间。返回值为系统运行时间,单位毫秒ms。
millis()
②获取Arduino通电后(或复位后)到现在的时间。返回值为系统运行时间,单位微秒us。
micros()
③毫秒级延时。
delay(ms)
ms 延时时间,类型unsigned long
④微秒级延时。
delayMicroseconds(us)
us 延时时间,类型unsigned int
4、串口
①使用串口与计算机通信,需要先使用Serial.begin() 初始化Arduino的串口通信功能。
Serial.begin(speed, config)
speed 串口通信波特率,常用波特率:300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200
config 数据位、校验位、停止位配置(也可以不配置)
例如:Serial.begin(9600, SERIAL_8E2) 是将串口波特率设为9600,数据位8,偶校验,停止位2。
提示:Serial.begin函数也可以只配置波特率,如:Serial.begin(9600)
②串口打印输出。
Serial.print(val)
val 要输出的数据,各种类型的数据均可
③在输出完指定数据后,再输出一组回车换行符。
Serial.println(val)
val 要输出的数据,各种类型的数据均可
④接收串口数据。调用该语句,每次都会返回一个字节的数据,这个返回值便是当前串口读取到的数据。
Serial.read()
提示:以上几个是串口最常用最基础的函数,还有很多函数和用法这里没有介绍,感兴趣的同学可以自己去查阅。
5、PWM
①PWM输出功能。
在Arduino Uno中,提供PWM功能的引脚为3、5、6、9、10、11。
analogWrite(pin,value)
pin 要读取模拟值的引脚,被指定的引脚必须是模拟输入引脚
value PWM的脉冲宽度,范围为0~255
提示:在analogWrite() 函数内部,已经完成了引脚的初始化,因此不用在Setup() 函数中进行初始化操作。
6、ADC
①ADC输入功能。
模拟输入引脚是带有ADC(Analog-to-Digital Converter,模数转换器)功能的引脚。它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读入模拟值的功能。
Arduino Uno模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示。
analogRead(pin)
pin 要读取模拟值的引脚,被指定的引脚必须是模拟输入引脚
提示:在analogRead() 函数内部,已经完成了引脚的初始化,因此不用在Setup() 函数中进行初始化操作。
示例:analogRead(A0),即是读取A0引脚上的模拟值。
以上是一些比较简单容易理解的函数
和开发STM32有所相似所以比较容易理解
以下记录一个陌生的知识点——利用PROGMEM将数据写到闪存(程序存储空间)
单片机采用哈弗结构,将程序存储器和数据存储器分开,而数据存储器RAM通常比较小,而程序存储器Flash空间比较大,因此就需要将占用空间较大的不需要改变的数据放在Flash中。
比如需要单片机支持LCD显示文字,就需要一个庞大的字体库,可达到几kb,这么大的数据量放在RAM中是不合适的,只能放在Flash中。
pgmspace.h就提供了与之相关的读写操作。
由于编译时经常遇到如下问题:
【程序存储空间】剩余很多,而【动态内存】不足,导致无法成功写入。
这个问题往往出现在声明了数据“较大”的常量特别是数组的情况下。
为解决这个问题,我们可以将本来应该写到【动态内存】的常量,写入【程序存储空间】,以达到节约【动态内存】空间的目的。
定义全局常量时,使用 PROGMEM 关键字,或使用 PROGMEM 数据类型,告诉编译器 “ 把这个信息存到程序存储空间 ”,而不是存到“ 动态内存 ”。