电赛培训-23-07-05

Arduino

软件:使用Arduino IDE,以C++风格语言编写相关库。
利用IDE编译固件下载到Arduino的前提条件是有bootloader程序。
所以从程序到固件的关键在于bootloader,其他单片机也可以装载bootloader固件,然后使用arduino库。

硬件 uno板

工作电压5v,可以typeB,DC5.5,或者跳线接入
共有14个数字输入输出(6个PWM口),6个模拟输入输出

系统指示灯

  • ON:系统指示灯
  • RX:接收指示灯
  • TX:发送指示灯
  • L:内置LED,对应13号数字口

    开始编写代码

    有两个一定会有的函数,void setup()和void loop(),分别是初始化和循环函数。
    setup会执行一次,loop在setup后会自动循环

    setup函数

    setup中用pinMode配置管脚模式为输出
    pinMode(pin编号,INPUT):高阻态,可认为是100m欧姆,电平不定。
    pinMode(pinnum,INPUT_PULLUP):内置上拉输入,无外部信号默认高电平。
    pinMode(pinnum,OUTPUT):输出模式,uno上高电平5v,电流<40mA

loop函数

  • digitalWrite(pinnum,HIGH/LOW):输出高低电平,只对output模式有效
  • digitalRead(pinnum):读取高低电平,返回HIGH/LOW两种电平
  • analogRead(anaPinNum):读取模拟输入电平,返回0-1023的数字,对应0-5v的电压
  • analogWrite(pwmPinNum,0-255):输出PWM波,对应0-5v的电压,频率为490Hz(3,9,10,11pin),或980Hz(5,6pin)
  • analogReference(AD参考电压输入来源):切换AD参考电压输入来源,有默认值,一般不用,可以让输出更加精细。

中断和轮询

轮询:不断重复读取某个状态值,缺点是占用资源
中断:可以通过某个状态改变来发送信号,然后发送信号后可以执行其他操作,之后再恢复到发送信号之前的状态。
管脚中断:attachInterrupt(digitalPinToInterrupt(pinnum),ISR,mode),第一个参数是中断管脚号(uno为2,3),第二个参数是中断服务函数(可以自定义),第三个参数是中断模式,有LOW,RISING,FALLING,CHANGE四种模式。

  • LOW:低电平触发
  • RISING:上升沿触发
  • FALLING:下降沿触发
  • CHANGE:任意电平变化触发

注意,终端服务函数应当很短,而且不能使用其他中断实现的函数,延时需要delayMicroseconds(us)
修改全局变量应当用volatile修饰,防止编译器优化

ESP32

硬件

esp32-WROOM-32
串口芯片:CP2102
核心频率240mHz
WiFi IEEE 802.11 b/g/n 2.4GHz
BLuetooth 4.2 BR/EDR and BLE
520k SRAM 448kB ROM
2个I2S,RMT远程控制,LED PWM,1个host SD/eMMC/SDIO,一个slave SDIO/SPI. TWAI(CAN),12bitADC,Ethernet

开发环境

MicroPython+Thonny

常用库

GPIO

1
2
3
4
5
6
7
from machine import Pin

p0 = Pin(0,Pin.OUT) # create output pin on GPIO0
p0.on() # set pin to "on" (high) level
p0.off() # set pin to "off" (low) level
p0.value(1) # set pin to on/high
p0.init(p0.IN,p0.PULL_DOWN) # set pin to input with a pull-down resistor

init函数中,id是强制的

  • mode指定引脚模式,有IN,OUT,OPEN_DRAIN,AF_OPEN_DRAIN四种模式

  • pull指定引脚是否连接弱上拉电阻,有None,PULL_UP,PULL_DOWN三种模式
    弱上拉指上拉电阻阻值较大,高电平很容易因为外部电流驱动而拉低。

  • drive具有不同的最大安全电流的限制,有DRIVE_0-3四种选择

  • alt为引脚的备用功能,仅对alt和alt_open_drain两种模式有效,有0-7八种选择

value函数中,如果不带参数,就是得到当前状态,如果在输出模式,需要带参数,变为设置电平

配置在引脚的触发源处于活动状态时要调用中断处理程序,如果引脚模式为Pin.IN,可以使用irq函数,如果引脚模式为Pin.IN,可以使用Pin.IRQ_RISING,Pin.IRQ_FALLING,Pin.IRQ_ANY三种模式,分别对应上升沿,下降沿,任意电平变化触发中断。