You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取修改Arduino Nano 33 IoT定时器/计数器 实现TC3复位及值读取

SAMD21架构TC3定时器寄存器读取与复位实现(适配Arduino Nano 33 IoT)

读取TC3计数器当前值

注意:读取计数器前必须等待寄存器同步完成,避免读取到不稳定的中间值
默认TC3多数场景下配置为16位计数模式,读取代码如下:

uint16_t get_TC3_counter_value() {
  // 等待TC3寄存器同步完成
  while (TC3->COUNT16.STATUS.bit.SYNCBUSY);
  // 返回16位计数器当前值
  return TC3->COUNT16.COUNT.bit.COUNT;
}

如果你的TC3配置为8位/32位计数模式,将代码中COUNT16对应替换为COUNT8/COUNT32即可。

复位TC3操作

复位分为两种场景,可按需选择:

仅复位计数器数值(保留TC3原有配置)

仅把计数器值清零,不修改分频、中断配置等参数:

void reset_TC3_counter_only() {
  while (TC3->COUNT16.STATUS.bit.SYNCBUSY);
  // 向计数寄存器写入0
  TC3->COUNT16.COUNT.bit.COUNT = 0;
  while (TC3->COUNT16.STATUS.bit.SYNCBUSY);
}

完整复位TC3外设(清空所有配置恢复默认值)

执行软件复位,会清空TC3的所有配置寄存器、中断标记、计数器值,复位后需要重新初始化TC3才能使用:

void full_reset_TC3_peripheral() {
  // 先关闭TC3
  TC3->COUNT16.CTRLA.bit.ENABLE = 0;
  while (TC3->COUNT16.STATUS.bit.SYNCBUSY);
  // 触发软件复位
  TC3->COUNT16.CTRLA.bit.SWRST = 1;
  // 等待复位完成,复位完成后SWRST位会自动清零
  while (TC3->COUNT16.STATUS.bit.SYNCBUSY || TC3->COUNT16.CTRLA.bit.SWRST);
}

注意事项

  • 如果你已经通过SAMD_TimerInterrupt库初始化过TC3,不需要额外引入其他头文件即可直接操作上述寄存器
  • 所有对TC3寄存器的读写操作前都需要等待SYNCBUSY位清零,否则操作会失效
  • 执行完整外设复位后,原有的定时器中断配置会被清空,需要重新初始化TC3后才能正常触发中断

内容的提问来源于stack exchange,提问作者Mara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:24:07