OpenEdv-开源电子网

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

stm32 mini板 tim1 PWM和LCD初始化冲突,求解决

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-4-15
在线时间
4 小时
发表于 2016-4-15 21:15:07 | 显示全部楼层 |阅读模式
1金钱
这是PWM.c的程序
void TIM1_PWM_Init(u16 arr,u16 psc)
{  
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE);                                                                             

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; //TIM_CH1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

       
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位


        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
  TIM_OC2Init(TIM1, &TIM_OCInitStructure);
  TIM_OC3Init(TIM1, &TIM_OCInitStructure);
  TIM_OC4Init(TIM1, &TIM_OCInitStructure);

        TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主输出使能       

        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能         
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
        TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
  TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
       
        TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器
       
        TIM_Cmd(TIM1, ENABLE);  //使能TIM1


}
这是主函数

int main(void)
{       
        u16 led0pwmval=0;   
        u8 dir=1;       
        delay_init();                     //延时函数初始化          
//LED_Init();                          //初始化与LED连接的硬件接口

         LCD_Init();//不加LCD初始化,PWM正常,加了,管脚都是高电平,不变了
         TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz

        //         TIM5_PWM_Init(899,0);
           while(1)
        {
                delay_ms(10);         
                if(dir)led0pwmval++;
                else led0pwmval--;         
                if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;                                                    
   TIM_SetCompare1(TIM1,led0pwmval);       
   TIM_SetCompare2(TIM1,led0pwmval);               
         TIM_SetCompare3(TIM1,led0pwmval);       
         TIM_SetCompare4(TIM1,led0pwmval);
               
        }
          
       
}


LCD_Init();//不加LCD初始化,PWM正常,加了,管脚都是高电平,不变了
设置的是tim1四路输出

求解









正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

3

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-4-15
在线时间
4 小时
 楼主| 发表于 2016-4-15 21:34:24 | 显示全部楼层
不是高电平,是什么反应也没有了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-15 22:48:54 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-26
在线时间
5 小时
发表于 2016-6-5 15:34:43 | 显示全部楼层
这个问题你解决了吗  
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
发表于 2016-7-15 16:52:42 | 显示全部楼层

遇到到相同问题,求教原子哥。这样的话PWM输出,和LCD显示不就不能同时使用了吗?
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
发表于 2016-7-15 16:53:04 | 显示全部楼层

遇到到相同问题,求教原子哥。这样的话PWM输出,和LCD显示不就不能同时使用了吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-7-15 22:29:00 | 显示全部楼层
yukioooo 发表于 2016-7-15 16:52
遇到到相同问题,求教原子哥。这样的话PWM输出,和LCD显示不就不能同时使用了吗?

不冲突哦。IO都没有共用呢。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
发表于 2016-7-17 16:17:40 | 显示全部楼层
正点原子 发表于 2016-7-15 22:29
不冲突哦。IO都没有共用呢。

原子哥,请问,PWM初始化放在LCD初始化之后,PWM就没有输出,为什么?
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-7-17 16:24:45 | 显示全部楼层
唉……看不懂 库函数 …… 我一直都是直接操作寄存器!
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2016-7-18 14:12:56 | 显示全部楼层
LCD_Init里面有用到了printf  你把他注释掉
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2019-6-30
在线时间
58 小时
发表于 2020-10-23 10:35:39 | 显示全部楼层
sdfvzsd
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2020-5-5
在线时间
23 小时
发表于 2021-6-25 20:41:15 | 显示全部楼层
同样遇到了这个问题。。。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2021-7-11
在线时间
0 小时
发表于 2021-7-22 11:04:19 | 显示全部楼层
遇到同样的问题,把LCD初始化放到定时器初始化后面问题就解决了,不知道为啥
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2021-2-2
在线时间
6 小时
发表于 2021-8-21 08:16:46 | 显示全部楼层
楼主你解决了吗?我把printf函数注释掉后PWM波输出一段时间后程序就停止了
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-12-8
在线时间
3 小时
发表于 2021-8-31 17:08:57 | 显示全部楼层
是的我也遇到了,LCD_ID是9325,注释掉LCD_Init()函数里面的//LCD_Display_Dir(0);这个函数PWM输出就正常了。或者LCD_Init();放在
TIM1_PWM_Init(899,0)后,PWM可以输出,但是本来想输出30%的,结果变成70%了。
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2021-9-8
在线时间
7 小时
发表于 2021-12-3 22:09:26 | 显示全部楼层
我的是战舰版的,定时器输出PWM和LCD初始化冲突,输出的PWM波和设定的完全不一样
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 21:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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