BaseTIM
- BaseTIM(TIM6&TIM7) 没有CKD(clock division),否则会出现hardfault. 同时没有Repeatation 和Counter Mode.
- BaseTIM 有一个DMA中断请求应该源自TIM6_DAC_IRQn中的DAC.
- BaseTIM 可以设置OnePulse Mode.
- TIM_SelectOnePulseMode(TIM6, TIM_OPMode_Single)
- 遇到的问题是输出频率过高时好像不能在示波器(TDS2012)上正常显示
GeneralTIM
- TIM3&TIM4 -> 16bits, TIM2&TIM5->32bits.
- 支持增量编码器和霍尔传感器(Supports incremental (quadrature) encoder and hall-sensor circuitry for positioning purposes)。
- Trigger input for external clock or cycle-by-cycle current management(外部时钟触发输入或逐周期电流管理).
- 寄存器读写规则:写入只能按寄存器的位数来(32bits or 16 bits),读出可任意(8 or 16 or 32)。
- TIMx_CR2[6:4]->MMS[2:0]用以主模式下定时器同步时选择从定时器的触发方式。
- 每条语句都需要单片机的以时钟周期去执行,这是一种思维。
- 往预装载寄存器里写入新值时,先失能UEV(by UDIS),以免更新影子寄存器。
- Flag一般需要软件清零(但也存在读寄存器就可清零的情况),最好是中断服务程序的第一句就清除。
- 如下图,APB1= AHB1/4=168M/4= 21M,当预分频值为1时,APBx_TIM_CLK=APBxCLK=21M, 不为1时, APBx_TIM_CLK=APBxCLK * 2=42M,这其实间接保证了Timer的最大频率为21M。
- 时钟来源可以选内部时钟、定时器内部分频、定时器外部触发、其他外部触发信号
- 对于输出比较和输入捕获的理解还不够深,或许得再看一遍。
- 改变工作模式时,最好先关闭相应的寄存器及功能,以免修改不成功或者出错误,这是一种思维。
- STM32库函数为有时一个寄存器写了几个函数接口,看起来很方便,其实冗余。
- 使用定时器的PWM模式只能在4个通道产生频率相同但占空比不同的输出信号,使用定时器的输出比较模式可以在4个通道上产生频率不同,占空比也不同的输出信号。
- 死区时间控制?
- 电容触摸按键