OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3810|回复: 3

求高手解疑答惑GPIO和PWM配置先后顺序

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-4-26
在线时间
4 小时
发表于 2015-7-17 01:28:23 | 显示全部楼层 |阅读模式
5金钱
为什么我main函数先配置PWM_Configuration();再配置GPIO_Configuration();的话,就只有PB0不能输出PWM波。而先配置GPIO_Configuration();再配置PWM_Configuration();的话,PB0,PA8,PA9,PA10都不能输出PWM波了。想问下有没有哪位高手知道其中缘由

主函数:
[mw_shl_code=c,true]#include "pbdata.h" int main() { RCC_Configuration(); PWM_Configuration(); GPIO_Configuration(); OLED_Init(); while(1) { } }[/mw_shl_code]
时钟和GPIO配置:
[mw_shl_code=c,true]#include"pbdata.h" void RCC_Configuration(void) { SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1 | RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6); //12M adc不能大于14M } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; //OLED的IO口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); //CCD的IO口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //PWM的IO口配置 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6| GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); //禁止JTAG,保留SW GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); } [/mw_shl_code]

PWM配置:
[mw_shl_code=c,true]#include"PWM.h" u16 a,b,zt1,zt2,zt3,zt4,zt5,yt1,yt2,yt3,yt4,yt5,zs1,zs2,tou,ys1,ys2; void PWM_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; //定时器结构体 TIM_OCInitTypeDef Tim_OCInitStructure;//PWM结构体 //GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE); //端口映射 //TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除定时器 //定时器设置 PWM(35-260) TIM_TimeBaseStruct.TIM_Period=1999; // 初值 TIM_TimeBaseStruct.TIM_Prescaler=719; //预分频 TIM_TimeBaseStruct.TIM_ClockDivision=0; TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up; //向上模式 TIM_TimeBaseStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStruct); TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_TimeBaseStruct.TIM_Period=1999; // 初值 TIM_TimeBaseStruct.TIM_Prescaler=719; //预分频 TIM_TimeBaseStruct.TIM_ClockDivision=0; TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up; //向上模式 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStruct); TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct); TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStruct); //PWM设置 Tout=((Period+1)*(Prescaler+1))/Tim 若Prescaler不为1则Tim应乘以2 Tim_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式 Tim_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //PWM极性 Tim_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //PWM使能 Tim_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset; //TIM2全部通道输出 TIM_OC1Init(TIM2,&Tim_OCInitStructure); TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable); TIM_OC2Init(TIM2,&Tim_OCInitStructure); TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable); TIM_OC3Init(TIM2,&Tim_OCInitStructure); TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable); TIM_OC4Init(TIM2,&Tim_OCInitStructure); TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable); //TIM3全部通道输出 TIM_OC1Init(TIM3,&Tim_OCInitStructure); TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_OC2Init(TIM3,&Tim_OCInitStructure); TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_OC3Init(TIM3,&Tim_OCInitStructure); TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_OC4Init(TIM3,&Tim_OCInitStructure); TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable); //TIM4全部通道输出 TIM_OC1Init(TIM4,&Tim_OCInitStructure); TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC2Init(TIM4,&Tim_OCInitStructure); TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC3Init(TIM4,&Tim_OCInitStructure); TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC4Init(TIM4,&Tim_OCInitStructure); TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable); Tim_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式 Tim_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //PWM极性 Tim_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //PWM使能 Tim_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Disable; //Tim_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //TIM1全部通道输出 TIM_OC1Init(TIM1,&Tim_OCInitStructure); TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); TIM_OC2Init(TIM1,&Tim_OCInitStructure); TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable); TIM_OC3Init(TIM1,&Tim_OCInitStructure); TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable); TIM_OC4Init(TIM1,&Tim_OCInitStructure); TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable); TIM_Cmd(TIM1,ENABLE); TIM_Cmd(TIM2,ENABLE); TIM_Cmd(TIM3,ENABLE); TIM_Cmd(TIM4,ENABLE); TIM_CtrlPWMOutputs(TIM1,ENABLE); } [/mw_shl_code]



最佳答案

查看完整内容[请看2#楼]

都是要先设置好模式,然后开启定时器设置。否则,你开启了,然后io口模式不对,肯定不正常了。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2015-7-17 01:28:24 | 显示全部楼层
都是要先设置好模式,然后开启定时器设置。否则,你开启了,然后io口模式不对,肯定不正常了。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-4-26
在线时间
4 小时
 楼主| 发表于 2015-7-20 18:48:51 | 显示全部楼层
回复【2楼】Admin:
---------------------------------
你的意思是先配置IO口和定时器完了最后再执行这个么?
   TIM_Cmd(TIM1,ENABLE);
    TIM_Cmd(TIM2,ENABLE);  
    TIM_Cmd(TIM3,ENABLE);
    TIM_Cmd(TIM4,ENABLE);
    TIM_CtrlPWMOutputs(TIM1,ENABLE);
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-4-26
在线时间
4 小时
 楼主| 发表于 2015-7-20 18:50:42 | 显示全部楼层
如果是那样的话,为什么我的  B0   口还是不能输出?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 23:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表