OpenEdv-开源电子网

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

STM32mini板,为什么LCD影响PWM波的输出

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-10-17
在线时间
1 小时
发表于 2016-10-17 21:36:12 | 显示全部楼层 |阅读模式
1金钱
我用STM32mini板输出三路占空比可调的PWM波,TIM1输出两路互补的PWM波,TIM3输出1路PWM波。我现在想在LCD上显示文字,为什么初始化LCD后,三路PWM波都不输出了?

最佳答案

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

已经解决了。原因是PB13被LCD占用,不能输出互补PWM波。需要部分重映射TIM1的互补管脚PB13到PA7。 OC1->A8 OC1N->A7。所以大家以后使用LCD的时候,要把PB管脚重映射一下,避免不必要的麻烦。具体代码是:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-10-17
在线时间
1 小时
 楼主| 发表于 2016-10-17 21:36:13 | 显示全部楼层
已经解决了。原因是PB13被LCD占用,不能输出互补PWM波。需要部分重映射TIM1的互补管脚PB13到PA7。 OC1->A8  OC1N->A7。所以大家以后使用LCD的时候,要把PB管脚重映射一下,避免不必要的麻烦。具体代码是:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);          GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);                   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8;
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-10-17
在线时间
1 小时
 楼主| 发表于 2016-10-17 21:42:24 | 显示全部楼层
程序如下,刚刚学单片机不久,求大神解答,谢谢啦

升压预测试程序.zip

3.12 MB, 下载次数: 128

回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5785
金钱
5785
注册时间
2013-11-22
在线时间
1213 小时
发表于 2016-10-18 00:03:01 | 显示全部楼层
检查下你的LCD接口是否占用了pwm IO口。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-10-17
在线时间
1 小时
 楼主| 发表于 2016-10-18 10:27:50 | 显示全部楼层


回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-10-17
在线时间
1 小时
 楼主| 发表于 2016-10-18 10:32:42 | 显示全部楼层
A2D2.tmp.jpg 我用到的管脚是PA0 1 6 8;PB13;其中PA0 1是ADC的输入;PA6是TIM3的PWM输出;PA8和PB13是TIM1的互补的PWM输出;
是不是PB13受到了影响导致不能输出。但是PB13不能输出,并不影响PA6和PA8啊?实际情况是三路PWM波都不能输出。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-10-17
在线时间
1 小时
 楼主| 发表于 2016-10-18 10:35:23 | 显示全部楼层
lycreturn 发表于 2016-10-18 00:03
检查下你的LCD接口是否占用了pwm IO口。

谢谢您。
但是为什么没被占用的IO口也不能输出PWM波呢?
具体描述请看5楼。
回复

使用道具 举报

30

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2015-8-24
在线时间
241 小时
发表于 2016-10-18 10:35:25 | 显示全部楼层
这个,我建议你看看,是不是定时器共用或者IO共用了???
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-10-17
在线时间
1 小时
 楼主| 发表于 2016-10-18 10:57:57 | 显示全部楼层
沉默焚烧 发表于 2016-10-18 10:35
这个,我建议你看看,是不是定时器共用或者IO共用了???

我把主程序这样写,这样PA6、PA8可以正常输出,但是PB13没有输出。好像PB13被LCD占用了。(具体见5楼)。是不是互补的一对PWM波只能用PA8和PB13输出,我看了好多程序都是这样的。能不能把PB13的互补波形的输出移到PA7这样?
int main(void)
{       

         
                TIM1_PWM_Init(999,719);
                TIM3_GPIO_Config();
                TIM3_Mode_Config(3599,0);
          LCD_Init();
         while(1)
         {
                 }
               
}
回复

使用道具 举报

30

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2015-8-24
在线时间
241 小时
发表于 2016-10-18 11:34:46 | 显示全部楼层
SunhaoHawson 发表于 2016-10-18 10:57
我把主程序这样写,这样PA6、PA8可以正常输出,但是PB13没有输出。好像PB13被LCD占用了。(具体见5楼)。 ...

你要看芯片引脚图,一般互补波形的,是有固定的一对的。
回复

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2018-8-5
在线时间
15 小时
发表于 2018-8-5 17:02:09 | 显示全部楼层
楼主,你的pwm有些复杂,看不懂。请教一下,我将例程的pwm输出和LCD显示移植在一起,led灯的效果是常亮,而不是呼吸灯的效果,为什么呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 07:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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