stm32 tim3ch2一直输出3.3v高电平控制不了怎么回事
时间: 2023-07-19 11:53:00 浏览: 47
可能是以下几个原因导致的:
1. TIM3_CH2输出模式配置不正确,需要确认TIM3_CH2输出模式是否为PWM输出模式。
2. TIM3_CH2的GPIO口配置不正确,需要确认TIM3_CH2对应的GPIO口是否正确配置为复用模式。
3. TIM3_CH2的占空比设置不正确,需要确认TIM3_CH2的占空比是否正确设置。
4. TIM3_CH2的时钟源设置不正确,需要确认TIM3_CH2所用的时钟源是否正确设置。
以上这些问题都可能导致TIM3_CH2输出3.3v高电平控制不了,你可以逐一排查这些问题。
相关问题
stm32f103c8t6的TIM3ch2驱动sg90舵机代码
以下是一个基本的STM32F103C8T6的TIM3ch2驱动SG90舵机的代码:
```c
#include "stm32f10x.h"
void TIM3_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 开启TIM3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 开启GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // TIM3_CH2(PB5)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化GPIOB
TIM_TimeBaseStructure.TIM_Period = 20000 - 1; // PWM频率为50Hz
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; // APB1时钟频率为72MHz
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频因子
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能
TIM_OCInitStructure.TIM_Pulse = 1500; // 初始占空比50%
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性为高
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_Cmd(TIM3, ENABLE); // 使能TIM3
TIM_CtrlPWMOutputs(TIM3, ENABLE); // 使能TIM3的PWM输出
}
void DelayMs(uint32_t milliseconds)
{
uint32_t i;
for(i = 0; i < milliseconds; i++)
{
uint32_t j;
for(j = 0; j < 10727; j++); // 大概延时1ms
}
}
int main(void)
{
TIM3_Configuration();
while(1)
{
TIM_SetCompare2(TIM3, 1000); // 占空比为5%
DelayMs(1000);
TIM_SetCompare2(TIM3, 1500); // 占空比为7.5%
DelayMs(1000);
TIM_SetCompare2(TIM3, 2000); // 占空比为10%
DelayMs(1000);
}
}
```
在上面的代码中,我们使用了STM32F103C8T6板子上的TIM3_CH2(PB5)来驱动SG90舵机。我们在TIM3的PWM输出通道2上配置了一个50Hz的PWM信号,并且使用了一个20000的计数器周期和一个72的预分频器来实现这个频率。然后,我们在TIM_OCInitStructure中设置了一个初始的占空比50%(1500),并且使能了输出和高电平输出极性。最后,我们在主循环中改变了占空比来控制舵机的位置。
STM32 F407 TIM3输出PWM
好的,关于 STM32 F407 的 TIM3 输出 PWM,我可以给你一些指导。
步骤如下:
1. 配置 TIM3 时钟和引脚
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能 TIM3 时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //使能 GPIOB 时钟
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_TIM3); //将 PB5 引脚复用为 TIM3_CH2
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
2. 配置 TIM3 的基本参数
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 999; //设置计数器自动重装值,决定 PWM 周期
TIM_TimeBaseStructure.TIM_Prescaler = 83; //设置预分频器,将 APB1 时钟除以预分频器作为计数器时钟
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
3. 配置 TIM3 的 PWM 参数
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //设置 PWM1 模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能输出
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //设置输出极性为高电平
TIM_OCInitStructure.TIM_Pulse = 500; //设置占空比,决定 PWM 高电平时间
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3_CH2
4. 启动 TIM3
TIM_Cmd(TIM3, ENABLE);
这样,TIM3 就可以输出 PWM 信号了。其中,TIM_TimeBaseStructure.TIM_Period 和 TIM_OCInitStructure.TIM_Pulse 可以根据需要调整,以控制 PWM 的周期和占空比。另外,TIM3_CH2 对应的是 GPIOB_Pin_5,如果需要使用其他引脚输出 PWM,需要相应地修改 GPIO_PinAFConfig 和 GPIO_InitStructure。