打印
[STM32F4]

PA.10 电压是不对的

[复制链接]
802|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengf|  楼主 | 2022-4-17 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
偶然的机会得到一快ST的F411NUCLEO板,在用到TIM1高级定时器的时候碰到一些问题和大家讨论下,代码如下
void TIM1_GPIO_Configuration(void)
{
                GPIO_InitTypeDef GPIO_InitStructure;
                RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB,ENABLE);

                GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1);
                                
        
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//CH1
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
        
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//CH1N
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//CH2
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//CH2N
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//CH3
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//CH3N
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
                                
}


void TIM1_MODE_Configuration(void)
{
                        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
                        TIM_OCInitTypeDef TIM_OCInitStructure;
                        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

        
                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
        
                        TIM_TimeBaseInitStructure.TIM_Period= 4999;                        
                        TIM_TimeBaseInitStructure.TIM_Prescaler=0;                        
                        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;               
                        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;               
                        TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;               
                        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);
        
                        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               
                        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;               
                        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;               
                        TIM_OCInitStructure.TIM_Pulse=0;               
                        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;               
                        TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;               
                        TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;               
                        TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;        
                        TIM_OC1Init(TIM1,&TIM_OCInitStructure);        
                        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
        
                        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
                        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
                        TIM_OCInitStructure.TIM_Pulse=0;
                        TIM_OC2Init(TIM1,&TIM_OCInitStructure);               
                        TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
               
                        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
                        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
                        TIM_OCInitStructure.TIM_Pulse=0;
                        TIM_OC3Init(TIM1,&TIM_OCInitStructure);               
                        TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);
        
                        TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;
                        TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;      
                        TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;      
                        TIM_BDTRInitStructure.TIM_DeadTime=5;
                        TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;


                        TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;   
                        TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;   
                        TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
                                                        

                        TIM_ARRPreloadConfig(TIM1,ENABLE);
                        TIM_CtrlPWMOutputs(TIM1,ENABLE);
                        TIM_Cmd(TIM1,ENABLE);               
}

我用万用表打了一下,PA.8=0V(CH1),PA7=3.3V(CH1N),PA.9(CH2)=0V,PB.0(CH2N)=3.3V,PA.10(CH3)=2.26V,PB.1(CH3N)=3.3V,很明显PA.10 电压是不对的

使用特权

评论回复
沙发
zwll| | 2022-4-17 21:42 | 只看该作者
尝试不同的占空比

使用特权

评论回复
板凳
pengf|  楼主 | 2022-4-17 21:44 | 只看该作者
尝试了不同的占空比后,问题还是出在这个PA.10上

使用特权

评论回复
地板
huangchui| | 2022-4-17 21:47 | 只看该作者
看了下你的程序没啥问题;

你把PA10设置成普通IO看看,电平反转是否可以,确认下是不是IO坏了;

使用特权

评论回复
5
yszong| | 2022-4-17 21:49 | 只看该作者
或者换块板子;

使用特权

评论回复
6
pengf|  楼主 | 2022-4-17 21:51 | 只看该作者
也可以用ST软件生成初始化代码看看

使用特权

评论回复
7
pengf|  楼主 | 2022-4-17 21:54 | 只看该作者
PA10是可以输出PWM波的,可否可以理解成IO口可行,而且我的PWM波是以2.26V为电压基准进行叠加的

使用特权

评论回复
8
zhanghqi| | 2022-4-17 21:57 | 只看该作者

那说明PWM功能是没问题的;
你PWM输出高电平是多少V啊?

使用特权

评论回复
9
huangchui| | 2022-4-17 21:59 | 只看该作者
低电平一直是2.26V吗?

使用特权

评论回复
10
zhanghqi| | 2022-4-17 22:01 | 只看该作者
你外围有没有接什么芯片,逐一排查吧

使用特权

评论回复
11
pengf|  楼主 | 2022-4-17 22:04 | 只看该作者
嗯,那我按大家的说法挨个排查一下,谢谢哈

使用特权

评论回复
12
SantaBunny| | 2023-3-3 12:44 | 只看该作者
先看看你的布局布线有没有问题布局布线 先不要怀疑芯片

使用特权

评论回复
13
周半梅| | 2024-4-5 07:03 | 只看该作者

每个电容与纹波电流源的引线阻抗一样

使用特权

评论回复
14
Pulitzer| | 2024-4-5 08:06 | 只看该作者

时间片轮的设计思想

使用特权

评论回复
15
童雨竹| | 2024-4-5 10:02 | 只看该作者

大大减小与其他引线之间的容性耦合

使用特权

评论回复
16
Wordsworth| | 2024-4-5 11:05 | 只看该作者

需要在做项目的过程中经历磨难

使用特权

评论回复
17
Clyde011| | 2024-4-5 12:08 | 只看该作者

硬件设计和软件设计本来就是鱼和熊掌的关系,两者不可兼得

使用特权

评论回复
18
公羊子丹| | 2024-4-5 13:01 | 只看该作者

与电感和续流二极管相连

使用特权

评论回复
19
万图| | 2024-4-5 14:04 | 只看该作者

结构化模块化的程序设计的思想,使最基本的要求

使用特权

评论回复
20
Uriah| | 2024-4-5 15:07 | 只看该作者

确定好硬件原理图,硬件布线,最后才是软件的开发

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

10129

帖子

3

粉丝