OpenEdv-开源电子网

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

关于ALIENTEK MiniSTM32开发板 PWM输出实验

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-3-31
在线时间
0 小时
发表于 2012-4-6 09:30:28 | 显示全部楼层 |阅读模式

 麻烦各位高手帮帮忙:

原来的PWM输出实验是用TIM3的CH2输出PWM波,控制LED0的亮暗,我改动了一下,想用TIM3的CH2控制LED0,TIm3的CH1控制LED1,即将板子的管脚PA7(CH2)与PA8(LED0)相连,PA6(CH1)与PD2(LED1)相连  部分程序如下:
void PWM_Init(u16 arr,u16 psc)
{
 RCC->APB1ENR|=1<<1;//tim3使能
 GPIOA->CRH&=0xfffffff0;
 GPIOA->CRH|=0x00000004;//设置PA8为浮空输入
 GPIOD->CRL&=0xfffff0ff;//PD2
 GPIOD->CRL|=0x00000400;//设置PD2为浮空输入
 GPIOA->CRL&=0x00ffffff;
 GPIOA->CRL|=0xbb000000;//PA7 PA6为复用功能输出
 GPIOA->ODR|=1<<7;//A7,A6 上拉
 GPIOA->ODR|=1<<6;
 TIM3->ARR=arr;
 TIM3->SC=psc;
 TIM3->CCMR1|=7<<12;
 TIM3->CCMR1|=7<<4;
 TIM3->CCMR1|=1<<11;
 TIM3->CCMR1|=1<<3;
 TIM3->CCER|=1<<4;
 TIM3->CCER|=1<<0; 
 TIM3->CR1=0x8000;
 TIM3->CR1|=0x01;
 
}


主程序:
int main(void)
{   
  u16 led0pwmval=0;
 u16 led1pwmval=0;
 u8 dir=1;
 
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 uart_init(72,9600);  //串口初始化
 LED_Init();      //初始化与LED连接的硬件接口
 WM_Init(900,0);//pwm初始化
   
    while(1)
 { 
  
  delay_ms(10);
  if(dir){led0pwmval++;led1pwmval++;}
  else{led0pwmval--;led1pwmval--;}
  
  if(led0pwmval>300)dir=0;
  if(led0pwmval==0)dir=1;
  LED0_PWM_VAL=led0pwmval;
  LED1_PWM_VAL=led1pwmval;
      
 } 
}

结果是只有LED0正常变化,LED1没有反应,为啥呢?  我测试了下将PA6 PA7分别接到LED0,都能观察到LED0的变化,说明CH1、CH2都产生了PWM输出,为啥他们接到LED1的时候灯就没反应呢???

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-4-6 09:41:00 | 显示全部楼层
LED1默认是不是连接了一个IO口?
你这个IO口是不是应该设置一下呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2012-4-6 10:12:13 | 显示全部楼层
应该是led1设置上面出了问题,你既然都是有pwm产生,肯定是led1后面的设置!
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-3-31
在线时间
0 小时
 楼主| 发表于 2012-4-6 10:28:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子老大,我在PWM_Init()中使用
GPIOD->CRL&=0xfffff0ff;//PD2
GPIOD->CRL|=0x00000400;//设置PD2为浮空输入
两条语句对LED1的IO口进行了设置,请问还需要进行什么地方的改动呢?
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-3-31
在线时间
0 小时
 楼主| 发表于 2012-4-6 10:31:05 | 显示全部楼层
回复【3楼】sun1238898:
---------------------------------
我觉得也是LED1的设置有问题,但是原程序对LED0的设置为
GPIOA->CRH&=0xfffffff0;
GPIOA->CRH|=0x00000004;//设置PA8为浮空输入
而我添加了
GPIOD->CRL&=0xfffff0ff;//PD2
GPIOD->CRL|=0x00000400;//设置PD2为浮空输入
两句,请问还学要设置哪些参数呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-4-6 11:20:40 | 显示全部楼层
回复【5楼】wanggg360:
---------------------------------
这样设置了应该是OK的了.
软件仿真到while(1)的时候,看看PD.2是不是浮空输入?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2012-3-18
在线时间
0 小时
发表于 2012-4-6 22:36:32 | 显示全部楼层
PWM_Init(900,0); //不分频。PWM频率=72000/900=8Khz
pwm例程中  算出的pwm频率怎么是8k呢  时钟频率CK_CNT等于fCK_PSC/(PSC[15:0]+1)    这个不分频不还是72M吗 
新手请教 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-4-6 23:36:10 | 显示全部楼层
注释有误
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-3-31
在线时间
0 小时
 楼主| 发表于 2012-4-7 09:56:38 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
PD2显示的是floating input   我看了原理图中PD2与TIM3_ETR共用一个IO口,会不会在使用TIM3的时候,ETR功能会影响PD2?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-4-7 12:11:42 | 显示全部楼层
回复【9楼】wanggg360:
---------------------------------
只要你不去设置PD2为复用输出,就不会影响的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

96

主题

247

帖子

1

精华

高级会员

Rank: 4

积分
801
金钱
801
注册时间
2012-6-29
在线时间
0 小时
发表于 2012-10-20 23:03:44 | 显示全部楼层
这个问题,你设置了LED1的时候,注意,有一个接口复用的问题,寄存器AFIO->MAPR内的关于TIM3的复用定义如下:

11-10位(TIM3_REMAP[1:0]):定时器3重映像。这些位可由软件置1或置0,控制定时器3的通道1至4在GPIO端口的映像。定义:【00】:没有重映像(CH1-4:PA6-7/PB0-1);【01】:未用组合; 【10】:部分映像(CH1-4:PB4-5/PB0-1); 【11】:完全映像(CH1-4:PC6-9)。 注:重映像不影响在PD2上的TIM3_ETR。

你LED1的复用必须使用寄存器内的管脚输出,才能复用,你输出在PD2上,怎么可能输出PWM。

解决办法:
1.选择复用、启动复用
2.在TIM3的复用端口上输出PWM
3.用杜邦线把TIM3上的复用端口上的输出,连接到PD.2的管脚上

这样才能得到LED1的PWM显示.............

以上应该是正确的.
原子的LED0是PWM输出在PA.7上,然后用杜邦线连到PA.8上,才能看得到LED0的PWM显示。。。。。。
 
http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4666068
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 15:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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