功能描述:通过配置STM32F405RGT6的TIM2的输出比较通道3,在PA2上输出一个频率为2kHz,占空比为80%的方波信号。
- main.c文件内容如下
#include "stm32f4xx.h" // Device header
#include "Timer.h"
int main(void)
{
Timer_Init();
while(1)
{
}
}
- Timer.c文件内容如下
#include "Timer.h"
/**
* @摘要 初始化TIM
* @参数 无
* @返回值 无
* @说明 无
*/
void Timer_Init(void)
{
//开启GPIOA的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
//将PA2配置为复用模式,复用为TIM2_CH3
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM2);
//定义GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
//初始化上述结构体
GPIO_StructInit(&GPIO_InitStructure);
//配置GPIO模式为复用模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//配置GPIO输出类型为推挽输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//指定GPIO引脚为Pin2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
//配置GPIO的速度为高速100MHZ
GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
//初始化对应的GPIO
GPIO_Init(GPIOA, &GPIO_InitStructure);
//开启TIM2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//选择TIM2的时钟模式为内部模式,时钟源为内部时钟(42*2=84MHZ)
TIM_InternalClockConfig(TIM2);
//定义时基单元初始化结构体
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
//初始化上述结构体
TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure);
//配置预分频系数为420
TIM_TimeBaseInitStructure.TIM_Prescaler = 420-1;
//配置自动重装值为100
TIM_TimeBaseInitStructure.TIM_Period = 100-1;
//配置计数模式为向上计数
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
//配置定时器时钟频率与数字滤波器所使用的采样时钟之间的分频比
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
//配置重复计数器的值为0
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
//初始化时基单元
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
//定义输出比较通道初始化结构体
TIM_OCInitTypeDef TIM_OCInitStructure;
//初始化上述结构体
TIM_OCStructInit(&TIM_OCInitStructure);
//配置输出比较模式为PWM模式1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
//配置输出的有效电平的极性
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
//配置CCR寄存器的值
TIM_OCInitStructure.TIM_Pulse = 80;
//配置输出状态为使能
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
//初始化输出比较通道3
TIM_OC3Init(TIM2, &TIM_OCInitStructure);
//开启TIM2,此时计数器开始工作
TIM_Cmd(TIM2, ENABLE);
}
- Timer.h文件内容如下
#ifndef __TIMER_H
#define __TIMER_H
#include "stm32f4xx.h" // Device header
void Timer_Init(void);
#endif