OpenEdv-开源电子网

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

关于PWM的小问题(菜鸟发帖求拯救)

[复制链接]

9

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2011-10-21
在线时间
4 小时
发表于 2011-11-25 20:28:41 | 显示全部楼层 |阅读模式

 原子哥的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;
}
其他都照用的是原子例程中的代码,劳烦各位大神看看哪里没有设置对或者忘了设置 谢谢了

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-25 20:46:13 | 显示全部楼层
你用软件仿真看看寄存器的情况.时钟开启了么?
复用时钟使能了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2011-10-21
在线时间
4 小时
 楼主| 发表于 2011-11-25 21:50:09 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这是整个PWM_Init函数,我一般是不贴程序的,但这个实在让人纠结不已,所以还请您受累麻烦看看,其实基本没怎么变,那些时钟开启我用的就是例程原有的句子,翻了参考手册,关于TIM3的时钟设置可以在不修改的情况下直接用,一个是用TIM3_CH1一个是用TIM3_CH2都在TIM3里而且用一个TIMx_CCMR1就能设置,关于main中主要的while循环就贴在楼顶,基本也没怎么变

void WM_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->SC = psc; //预分频器不分频
TIM3->CCMR1 |= 7<<12; //CH2 WM2模式
TIM3->CCMR1 |= 1<<11; //CH2预装载使能
TIM3->CCER |= 1<<4; //OC2输出使能

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

TIM3->CR1 = 0X8000; //ARPE使能
TIM3->CR1 = 0X01; //使能定时器3
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-26 00:33:50 | 显示全部楼层
回复【3楼】城南小卒:
---------------------------------
你的程序我仿真是OK的哦
实际测试也是正常的.
不过我是接在PA8上.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-8-15
在线时间
3 小时
发表于 2012-2-18 16:50:39 | 显示全部楼层
按楼主的程序测试没什么问题
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2012-3-5
在线时间
0 小时
发表于 2012-3-5 20:04:34 | 显示全部楼层
m
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 01:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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