0
点赞
收藏
分享

微信扫一扫

ESP32学习导航帖1.一文学会esp32的ledc控制器(输出pwm波)


本篇帖子是esp32学习的一个导航帖,用于方便自己查找资料。有时候学习的时候写了一篇记录贴,可能后来找不到了,用导航帖可以很方便的找到想要的内容。

介绍

1.各版本esp32和esp8266开发板引脚图

2.Arduino ide配置esp32硬件支持(配置esp32的arduino开发环境)

3.Visual studio安装配置arduino开发环境(arduino&esp32) 

4.esp32用arduino ide上传程序出错总结

基础

1.一文学会esp32的ledc控制器(输出pwm波)

2.esp32的模拟输入(ADC)

3.esp32用mcpwm驱动电机

4.ESP32驱动0.96寸12864 OLED显示屏

5.使用esp32 download tool给esp32烧录固件

FOC无刷电机

1.simpleFOC控制无刷电机理论及实践

2.INA240三相无刷电机电流采样实例(arduino)

3.

自制

1.Baize_foc esp32无刷电机驱动错误问题记录贴

2.白泽平衡小车导航贴

3.Baize_foc esp32无刷电机驱动错误问题记录贴

4.ESP32的MOS管扩展板介绍及实践

联合ROS

1.esp32与ros局域网话题通讯

2.ros与esp32话题通信控制小车(长动与点动)

3.白泽四足机器人之——用rqt_plot工具显示mpu6050传感器数据(esp32采集imu数据通过局域网话题消息传回pc主机)

未分类

中断

定时器中断

hw_timer_t * timer = NULL;            //声明一个定时器


void IRAM_ATTR onTimer() { //中断函数

Serial.println('1');
}


void setup() {
Serial.begin(115200);
timer = timerBegin(0, 80, true); //初始化
timerAttachInterrupt(timer, &onTimer, true); //调用中断函数
timerAlarmWrite(timer, 1000000, true); //timerBegin的参数二 80位80MHZ,这里为1000000 意思为1秒
timerAlarmEnable(timer); //定时器使能

//timerDetachInterrupt(timer); //关闭定时器
}


void loop() {

}

外部中断

#include <Arduino.h>
// toggles LED when interrupt pin changes state

int led = 2;//板载led灯

volatile int state = LOW;
const byte interruptPin_0 = 19; //设置中断的目标对应的那个引脚
const byte interruptPin_1 = 18; //设置中断的目标对应的那个引脚

volatile int interruptCounter = 0; //0号中断发生中断的次数
volatile int interruptCounter_1 = 0; //1号中断发生中断的次数

portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED; //声明一个portMUX_TYPE类型的变量,
portMUX_TYPE mux_1 = portMUX_INITIALIZER_UNLOCKED;//利用其对主代码和中断之间的同步进行处理

void handleInterrupt() {//中断服务函数
portENTER_CRITICAL_ISR(&mux);//进入中断程序
delay(20); //延时20ms作为消抖,如果是很稳定的中断可以不加或者加很少的消抖时间
if(digitalRead(interruptPin_0) == 0) //因为是下拉触发,所以在消抖时间完后读取引脚高低电平,如果还是为低那么就代表出现了一次稳定的中断
{
interruptCounter++;
Serial.println("0号中断对应的引脚发生中断!!!");
Serial.print("0号中断发生次数:");Serial.println(interruptCounter);
state=!state;//状态翻转
}
portEXIT_CRITICAL_ISR(&mux);//处理完中断后,记得要退出中断。

}

void handleInterrupt_1() {//中断服务函数
portENTER_CRITICAL_ISR(&mux_1);//进入中断程序
delay(20); //延时20ms作为消抖,如果是很稳定的中断可以不加或者加很少的消抖时间
if(digitalRead(interruptPin_1) == 1) //因为是上拉触发,所以在消抖时间完后读取引脚高低电平,如果还是为高那么就代表出现了一次稳定的中断
{
interruptCounter_1++;
Serial.println("1号中断对应的引脚发生中断!!!");
Serial.print("1号中断发生次数:");Serial.println(interruptCounter_1);
state=!state;//状态翻转
}
portEXIT_CRITICAL_ISR(&mux_1);//处理完中断后,记得要退出中断。
}

void setup() {
Serial.begin(115200);
pinMode(led,OUTPUT);
digitalWrite(led,state);
Serial.println("中断测试实验");
pinMode(interruptPin_0, INPUT_PULLUP); //先把引脚设置为上拉输入模式
pinMode(interruptPin_1, INPUT_PULLDOWN); //这个我们设置为下拉
//通过调用attachInterrupt函数将中断附加到引脚
//handleInterrupt 是中断触发后的触发函数
//FALLING 代表下拉触发,也就是由高电平向低电平转化时触发 RISING当然就是上拉触发
attachInterrupt(digitalPinToInterrupt(interruptPin_0), handleInterrupt, FALLING);
attachInterrupt(digitalPinToInterrupt(interruptPin_1), handleInterrupt_1, RISING);
}
/*****************
* LOW: 当引脚为低电平时触发中断服务程序
CHANGE: 当引脚电平发生变化时触发中断服务程序
RISING: 当引脚电平由低电平变为高电平时触发中断服务程序
FALLING: 当引脚电平由高电平变为低电平时触发中断服务程序
******************/

void loop() {
}

举报

相关推荐

0 条评论