keil写stm32f103rct6用定时器3输出脉冲的标准库的代码
时间: 2023-07-14 13:12:01 浏览: 99
GD32F103标准库完整工程Keil,可下载直接使用.zip
以下是使用定时器3输出脉冲的标准库代码:
```
#include "stm32f10x.h"
#define PULSE_PERIOD 9999 // 脉冲周期为10000个计数器时钟周期,计数器从0开始计数
void TIM3_GPIO_Config(void);
void TIM3_Mode_Config(void);
int main(void)
{
TIM3_GPIO_Config(); // 配置TIM3的GPIO引脚
TIM3_Mode_Config(); // 配置TIM3为PWM输出模式
while(1);
}
/**
* @brief 配置TIM3的GPIO引脚
* @param 无
* @retval 无
*/
void TIM3_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // TIM3_CH3对应GPIOB的PB0引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化GPIOB的PB0引脚
}
/**
* @brief 配置TIM3为PWM输出模式
* @param 无
* @retval 无
*/
void TIM3_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 使能TIM3时钟
TIM_TimeBaseStructure.TIM_Period = PULSE_PERIOD; // 设置计数器周期为PULSE_PERIOD
TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock/1000000-1; // 设置预分频值为1MHz
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 初始化TIM3的计数器和分频器
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // PWM输出模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能
TIM_OCInitStructure.TIM_Pulse = PULSE_PERIOD/2; // 初始占空比为50%
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 高电平有效
TIM_OC3Init(TIM3, &TIM_OCInitStructure); // 配置TIM3通道3
TIM_Cmd(TIM3, ENABLE); // 使能TIM3
TIM_CtrlPWMOutputs(TIM3, ENABLE); // 使能TIM3的PWM输出
}
```
在这个例子中,我们使用了定时器3的通道3输出脉冲。GPIOB的PB0引脚连接到了TIM3_CH3通道的输出端口。在TIM3_Mode_Config函数中,我们使用了PWM输出模式1来控制脉冲的占空比。TIM_TimeBaseInitTypeDef结构体用于配置计数器和分频器,TIM_OCInitTypeDef结构体用于配置PWM输出通道的参数。最后,我们使用了TIM_Cmd函数启动定时器3,并使用TIM_CtrlPWMOutputs函数使能PWM输出。在while循环中,我们什么也不做,只是让程序保持运行状态。
阅读全文