电赛培训-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 |
|
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三种模式,分别对应上升沿,下降沿,任意电平变化触发中断。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!