ch32v307写as608指纹模块例程?,串口中断和定时器中断写法?,为什么开启定时器oled不能显示
发你一个事例你参考看看,as608 的:
#include <SoftwareSerial.h> // 引用软串口库
SoftwareSerial fingerSerial(10, 11); // 指定软串口RX和TX引脚
volatile bool fingerInterrupt = false; // 中断标志位
void setup() {
fingerSerial.begin(57600); // 初始化指纹模块串口
pinMode(2, INPUT_PULLUP); // 初始化指纹模块中断引脚
attachInterrupt(digitalPinToInterrupt(2), fingerISR, FALLING); // 绑定指纹模块中断服务函数
// 初始化定时器1为1秒定时中断
noInterrupts(); // 关闭所有中断
TCCR1A = 0; // 设置定时器1不使用PWM输出
TCCR1B = 0; // 清空定时器1控制寄存器B
TCNT1 = 0; // 清空定时器1计数器
OCR1A = 15624; // 设置定时器1计数周期,每15624个计数周期为1秒
TCCR1B |= (1 << WGM12); // 开启定时器1的CTC模式,计数到OCR1A后自动清零
TCCR1B |= (1 << CS12) | (1 << CS10); // 开启定时器1的分频器,256分频,时钟源为CPU时钟
TIMSK1 |= (1 << OCIE1A); // 设置定时器1的比较匹配中断
interrupts(); // 开启所有中断
}
void loop() {
if (fingerInterrupt) {
fingerInterrupt = false;
// 处理指纹模块中断事件
}
// 此处执行其他循环代码
}
void fingerISR() {
fingerInterrupt = true; // 改变指纹模块中断标志位
}
ISR(TIMER1_COMPA_vect) {
// 定时器1中断服务函数,每1秒执行一次
// 此处执行OLED的显示代码
}
如果开启定时器后OLED不能显示,请确保OLED的初始化代码被执行,且在定时器引起中断后OLED的刷新操作能够正常进行。
另外,如果使用的OLED驱动程序中有使用SPI接口通信的部分,还需要确保SPI总线时钟频率不超过OLED的最大工作频率,否则可能会导致数据传输错误。