本帖最后由 南来之风 于 2025-11-9 20:31 编辑
硬件定时器模块在项目上应用非常广泛。PIC32MZ W1系列器件有六个可操作的同步16位定时器(默认),作为自由运行的间隔计时器,用于各种定时
应用程序和外部事件计数。支持以下模式:
- 同步内部16位定时器模式
- 同步内部16位门控定时器模式
- 同步外部16位定时器模式
使用下面的三种组合,可以实现三个32位同步定时器
- Timer2与Timer3、
- Timer4与Timer5结合,
- Timer6与Timer7。
32位定时器可以在三种模式下工作:
- 同步内部32位定时器模式
- 同步内部32位门控定时器模式
- 同步外部32位定时器模式
这些计时器具有以下主要功能:
- 可选择的时钟预分频器
- 定时器操作在CPU空闲模式
- 输入捕获和输出比较的时间基础模块(Timer2到Timer7仅限)
- ADC事件触发(仅Timer3和Timer5)
- 使用CLR, SET和INV进行快速位操作寄存器
定时器系统框图如下:
本次体验TIMER2的基础功能,用于实现100ms的定时器中断。
1. MCC中Device Resources -> Peripherals -> TIMER2,点击绿色➕:
2. 配置TMR2时钟分配系数,设置定时周期为100毫秒。
3. 点击Generate,自动生成代码。
4. 定义定时器中断回调函数: - void TMR2_CB(uint32_t status, uintptr_t context){
- static uint32_t i = 0;
- i++;
- if(i%10 == 0){
- GPIO_RK3_GREEN_Toggle();
- GPIO_RK1_RED_Toggle();
- sprintf(string2Uart, "\r\nHello MCHP, Time Elasped %d S", i/10);
- UART1_Write((void *)string2Uart, sizeof(string2Uart)/sizeof(string2Uart[0]));
- }
- }
5. 注册回调函数: - TMR2_CallbackRegister(TMR2_CB, 0);
6. 启动TIMER2模块:
效果:每秒钟切换LED状态,串口打印相应的数据。
演示:
|