STM32F2xx的定时器的应用
来源:互联网 发布:模型预测控制 知乎 编辑:程序博客网 时间:2024/04/28 12:42
定时器计数值的确定。
TIMER的时钟不是直接来源于APB1或者APB2,而是来自经过APB1或者APB2一个倍频器后的时钟。当APBx的预分频数为1时,这个倍频器不起作用,此时定时器的时钟频率等于APBx的频率;当APBx倍频数为其他数值时(即预分频数位2,4,8,16时),这个倍频数起作用,定时器时钟为APBx的两倍。例如AHB=60MHz,APB1为AHB的2分频,即为30MHz,则挂载在APB1下的时钟的频率为60MHz(2倍频)。
各个功能定时器的比较表。
Timer分布
TIM号
引脚映射
说明
TIMER
TIM1
TIM1_BKIN-PA6
TIM1_CH1N-PA7
TIM1_CH2N-PB0
TIM1_CH3N-PB1
TIM1_ETR-PE7
TIM1_CH1N-PE8
TIM1_CH1-PE9
TIM1_CH2N-PE10
TIM1_CH2-PE11
TIM1_CH3N-PE12
TIM1_CH3-PE13
TIM1_CH4-PE14
TIM1_BKIN-PE15
TIM1_CH1N-PB13
TIM1_CH2N-PB14
TIM1_CH3N-PB15
TIM1_CH1-PA8
TIM1_CH2-PA9
TIM1_CH3-PA10
TIM1_CH4-PA11
TIM1_ETR-PA12
高级控制定时器。可作为三相六通道PWM波形发生器。
也可以当做普通功能的定时器。
可以使用以下四种独立通道:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
TIM2
TIM2_CH1_ETR-PA0
TIM2_CH2-PA1
TIM2_CH3-PA2
TIM2_CH4-PA3
TIM2_CH1_ETR-PA5
TIM2_CH3-PB10
TIM2_CH4-PB11
TIM2_CH1_ETR-PA15
TIM2_CH2-PB3
通用功能定时器。
32位定时器,32位自动重装的上升或者下降计数器和一个16位预分频器。
TIM3
TIM3_CH1-PA6
TIM3_CH2-PA7
TIM3_CH3-PB0
TIM3_CH4-PB1
TIM3_CH1-PC6
TIM3_CH2-PC7
TIM3_CH3-PC8
TIM3_CH4-PC9
TIM3_CH1-PB4
TIM3_CH2-PB5
通用功能定时器。
16位定时器,16位自动重装的上升或者下降计数器和一个16位预分频器。
TIM4
TIM4_CH1-PD12
TIM4_CH2-PD13
TIM4_CH3-PD14
TIM4_CH4-PD15
TIM4_CH1-PB6
TIM4_CH2-PB7
TIM4_CH3-PB8
TIM4_CH4-PB9
TIM4_ETR-PE0
通用功能定时器。
16位定时器,16位自动重装的上升或者下降计数器和一个16位预分频器。
TIM5
TIM5_CH1-PA0
TIM5_CH2-PA1
TIM5_CH3-PA2
TIM5_CH4-PA3
TIM5_CH1_ETR-PH10
TIM5_CH2-PH11
TIM5_CH3-PH12
TIM5_CH4-PI0
通用功能定时器。
32位定时器,32位自动重装的上升或者下降计数器和一个16位预分频器。
TIM6
基本时钟。
主要作为DAC的触发器和波形发生器;也可以用作通用16位定时器。
TIM7
基本时钟。
主要作为DAC的触发器和波形发生器;也可以用作通用16位定时器。
TIM8
TIM8_ETR-PA0
TIM8_BKIN-PA6
TIM8_CH1N-PA7
TIM8_CH2N-PB0
TIM8_CH3N-PB1
TIM8_CH2N-PB14
TIM8_CH3N-PB15
TIM8_CH1-PC6
TIM8_CH3-PC8
TIM8_CH4-PC9
TIM8_CH1N-PH13
TIM8_CH2N-PH14
TIM8_CH3N-PH15
TIM8_CH4-PI2
TIM8_ETR-PI3
TIM8_BKIN-PI4
TIM8_CH1-PI5
TIM8_CH2-PI6
TIM8_CH3-PI7
高级控制定时器。可作为三相六通道PWM波形发生器。
也可以当做普通功能的定时器。
可以使用以下四种独立通道:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
TIM9
TIM9_CH1-PE5
TIM9_CH2-PE6
TIM9_CH1-PA2
TIM9_CH2-PA3
基于自动重装的16位上升计数器和一个16位预分频器。两个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
TIM10
TIM10_CH1-PF6
TIM10_CH1-PB8
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
TIM11
TIM11_CH1-PF7
TIM11_CH1-PB9
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
TIM12
TIM12_CH1-PH6
TIM12_CH2-PH9
TIM12_CH1-PB14
TIM12_CH2-PB15
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
TIM13
TIM13_CH1-PF8
TIM13_CH1-PA6
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
TIM14
TIM14_CH1-PF9
TIM14_CH1-PA7
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3. PWM发生器;
4. 单相输出模式。
Independent watchdog
独立看门狗。
基于12位向下计数器和八位预分频器,可以由独立的32K内部RC。可以主芯片断电下由纽扣电池继续工作。
Window watchdog
窗口看门狗。
基于7位可以自由运行的向下计数器。
SysTick timer
主要用于实时操作系统,也可以用在标准的向下计数器。
1. 24位向下计数器;
2. 重载功能;
3. 当计数到0产生一个系统中断标志;
4. 可编程时钟资源。
systemtick的时钟直接来源于AHB,而且是24位的定时时钟,一般常用在实时操作系统中。定时非常准确。以下是systemtick的配置函数,由专门的中断void SysTick_Handler(void)。
/**
* @brief SysTick时钟配置。
* @note 调用的是系统中的配置函数,将其函数名改掉而已,便于统一管理。
* 只需要在该配置中加入计数值即可实现任意时间的定时配置,包括1us。
* <h2><center>需要结合中断函数。
* void SysTick_Handler(void){···}</center></h2>
* @param ticks : 计数值。该计数值可通过以下公式求得:AHB_Clk*需要定时值,
* 例如需要定时1ms,且60MHz的AHB,则计数值 = 60MHz*1ms = 600000。
* @retval 返回配置是否成功标志。
*/
60MHz AHB1时钟systemtick定时中断。
uint32_t BSP_CLK_SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
30MHz APB1时钟10us定时中断。
void TIM_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure1;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure1.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure1);
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period = 599;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
30MHz APB1时钟1ms定时中断。
void TIM_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure1;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure1.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure1);
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period = (60000-1);
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
- STM32F2xx的定时器的应用
- STM32F2xx的定时器的应用
- STM32F2xx的定时器的应用
- STM32F2xx的定时器说明
- STM32F2xx的tcp_echoserver例程解说
- STM32F2xx的tcp_echoserver例程解说
- STM32F2xx的tcp_echoserver例程解说
- stm32f2xx与stm32f10x 在正交编码器应用关于定时器初始化中的区别
- 定时器的应用:俄罗斯方块
- 定时器quartz的应用
- 计数器定时器的应用
- 定时器的应用举例
- MFC定时器的应用
- MFC定时器的应用
- MFC定时器的应用
- MFC定时器的应用
- 定时器的应用
- 定时器的应用2
- python中的全局就能量的使用方法
- Objective-c内存管理机制
- 前置操作与后置操作
- OpenSCManager function
- Windows开发者如何选择开发环境(IDE)
- STM32F2xx的定时器的应用
- Dynamics CRM 2011 编程系列(26):自定义工作流
- struts2 action中获取request session application的方法
- MultiMedia APIs for iPhone
- IOS内存管理
- windows 网络系统
- 【Cocos2dx通信(Http&Socket)相关编译到Android细节总结】编译加入curl关联lib与头文件 && 解决pthread的cancel函数NDK不支持,找不到sockaddr_i
- test
- spring mvc配置及整合hibernate