ch32v307定时器pit中断

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); // 绑定指纹模块中断服务函数
  // 初始化定时器11秒定时中断
  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的最大工作频率,否则可能会导致数据传输错误。