本期主要验证Beetle ESP32 C6 Mini 外设中 IO 与串口功能;
在如下原理图中:
IO 口比较典型:
GPIO15 --> LED1, 高电平点亮
GPIO09 --> KEY, 低电平触发
UART 功能:
TX --> GPIO16
RX--> GPIO17
连接Beetle ESP32 C6 Mini 与USB 转UART 功能;
设置软件代码如下:
#include <Arduino.h>
struct Button {
const uint8_t PIN;
uint32_t numberKeyPresses;
bool pressed;
};
Button button1 = {9, 0, false};
#define LED 15
uint8_t stateLED = 0;
void ARDUINO_ISR_ATTR isr() {
button1.numberKeyPresses += 1;
button1.pressed = true;
}
void setup() {
pinMode(LED, OUTPUT);
pinMode(button1.PIN, INPUT_PULLUP);
attachInterrupt(button1.PIN, isr, FALLING);
Serial.begin(115200);
}
void loop() {
if (button1.pressed) {
Serial.printf("Button 1 has been pressed %lu times\n\r", button1.numberKeyPresses);
button1.pressed = false;
stateLED = stateLED^1;
digitalWrite(LED,stateLED);
}
}
最终输出:
代码实现了 IO的输入输出, 中断, 串口的打印功能;
单独验证IO口从1到0 输出的时间;
void setup() {
pinMode(6, OUTPUT);
}
void loop()
{
digitalWrite(6,0);
digitalWrite(6,1);
}
此时输出波形; 高低电平的时间并不是一样长;
如果代码变成如下;
void setup() {
pinMode(6, OUTPUT);
}
void loop()
{
digitalWrite(6,1);
digitalWrite(6,0);
}
也就新一轮的loop 开始中间是有间隔的;这个和普通的main.c 函数有什么区别呢?
查阅原函数可以看见main.cpp 设计如下, 所有就会有以上区别;