www.openedv.com
您好,欢迎您!    会员注册 | 登入 
公告:欢迎访问www.openedv.com开源电子网,开源共享共同进步,祝您新年快乐,万事如意!
设为首页 | 加入收藏
论坛首页 » STM32/STM8专区 前往: 
关于PWM的小问题(菜鸟发帖求拯救)
发表人 内容
[Down] [Up]
[楼主位] 城南小卒

等级:NO
注册时间:
2011/10/21 17:13
文章: 18
离线

 原子哥的STM32不完全手册看到了PWM输出实验,例程中是通过把PA8作为浮空与PWM的输出端PA7短接,而我现在想用TIM3_CH1对应的PA6来输出PWM通过杜邦线短接,驱动PD2的LED1,但按照例程中的设置改了之后LED1不亮,只有LED0正常显示,不知道出了什么问题, 本人菜鸟,求拯救

timer.c   中添加的代码如下: 
 GPIOD->CRL &= 0XFFFFF0FF;   //PD2输出
 GPIOD->CRL |= 0X00000400;   //浮空输入
 GPIOA->CRL &= 0XF0FFFFFF;   //PA6输出
 GPIOA->CRL |= 0X0B000000;   //复用功能输出
 GPIOA->ODR |= 1<<6;      //上拉

 TIM3->CCMR1 |= 7<<4;  //CH1 PWM2模式
 TIM3->CCMR1 |= 1<<3;     //CH1预装载使能
 TIM3->CCER |= 1<<0;   //OC1输出使能

timer.h 中添加了一句:
#define LED1_PWM_VAL TIM3->CCR1

text.c(主函数)中在原有基础上添加如下:
  while(1)
 {
      delay_ms(10);

      if(dir)
      {
           led0pwmval++;
           led1pwmval++;
      }
      else
      {
           led0pwmval--;
           led1pwmval--;
      }

      if(led0pwmval >300)
           dir = 0;
      if(led0pwmval == 0)
      {
           dir = 1;
           delay_ms(150);
      }

      LED0_PWM_VAL = led0pwmval;
      LED1_PWM_VAL = led1pwmval;
}
其他都照用的是原子例程中的代码,劳烦各位大神看看哪里没有设置对或者忘了设置 谢谢了



[加为好友] 回复 引用回复
[Down] [Up]
[1楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8097
来自: 湖南
在线

你用软件仿真看看寄存器的情况.时钟开启了么?
复用时钟使能了么?



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
[Down] [Up]
[2楼] 城南小卒

等级:NO
注册时间:
2011/10/21 17:13
文章: 18
离线

回复【1楼】 正点原子 :
---------------------------------
这是整个PWM_Init函数,我一般是不贴程序的,但这个实在让人纠结不已,所以还请您受累麻烦看看,其实基本没怎么变,那些时钟开启我用的就是例程原有的句子,翻了参考手册,关于TIM3的时钟设置可以在不修改的情况下直接用,一个是用TIM3_CH1一个是用TIM3_CH2都在TIM3里而且用一个TIMx_CCMR1就能设置,关于main中主要的while循环就贴在楼顶,基本也没怎么变

void PWM_Init(u16 arr, u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR |= 1<<1; //TIM3时钟使能
GPIOA->CRH &= 0XFFFFFFF0; //PA8输出
GPIOA->CRH |= 0X00000004; //浮空输入
GPIOA->CRL &= 0X0FFFFFFF; //PA7输出
GPIOA->CRL |= 0XB0000000; //复用功能输出
GPIOA->ODR |= 1<<7; //上拉

GPIOD->CRL &= 0XFFFFF0FF;   //PD2输出
GPIOD->CRL |= 0X00000400;   //浮空输入
GPIOA->CRL &= 0XF0FFFFFF;   //PA6输出
GPIOA->CRL |= 0X0B000000;   //复用功能输出
GPIOA->ODR |= 1<<6;     //上拉

TIM3->ARR = arr; //设定计数器自动重装值
TIM3->PSC = psc; //预分频器不分频
TIM3->CCMR1 |= 7<<12; //CH2 PWM2模式
TIM3->CCMR1 |= 1<<11; //CH2预装载使能
TIM3->CCER |= 1<<4; //OC2输出使能

TIM3->CCMR1 |= 7<<4; //CH1 PWM2模式
TIM3->CCMR1 |= 1<<3;     //CH1预装载使能
TIM3->CCER |= 1<<0; //OC1输出使能

TIM3->CR1 = 0X8000; //ARPE使能
TIM3->CR1 = 0X01; //使能定时器3
}


[加为好友] 回复 引用回复
[Down] [Up]
[3楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8097
来自: 湖南
在线

回复【2楼】 城南小卒 :
---------------------------------
你的程序我仿真是OK的哦
实际测试也是正常的.
不过我是接在PA8上.



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
[Down] [Up]
[4楼] bravejt

等级:NO
注册时间:
2011/08/15 17:07
文章: 33
离线

按楼主的程序测试没什么问题


[加为好友] 回复 引用回复
[Down] [Up]
[5楼] sillyboyhe

等级:NO
注册时间:
2012/03/05 19:51
文章: 4
离线

m


[加为好友] 回复 引用回复
 
前往: 

Powered by ALIENTEK工作室 © 粤ICP备12000418号-1