OpenEdv-开源电子网

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

为什么我定时器1 输出4路pwm波 却有两路不能输出 两路可以呢?

[复制链接]

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2013-3-17 20:33:39 | 显示全部楼层 |阅读模式
//此部分需手动修改IO口设置
RCC->APB2ENR|=1<<0;       //开启辅助时钟
RCC->APB2ENR|=1<<11;
// RCC->APB1ENR|=1<<2;       //TIM4时钟使能    
AFIO->MAPR=3<<6;  //TIM1完全映射
    RCC->APB2ENR|=1<<6;    //使能PORTe时钟  
GPIOE->CRH&=0XF00F0F0F;//PE11 PE13  E9 PE14输出
    GPIOE->CRH|=0X0BB0B0B0;//复用输出
    GPIOE->ODR|=1<<9;//PE9上拉
GPIOE->ODR|=1<<11;//PD13上拉
GPIOE->ODR|=1<<13;//PD14上拉
    GPIOE->ODR|=1<<14;//PD11上拉
TIM1->ARR=arr;//设定计数器自动重装值 
TIM1->SC=psc;//预分频器不分频
TIM1->CCMR1|=6<<12;  //CH2 PWM2模式  
TIM1->CCMR1|=1<<11; //CH2预装载使能   
    TIM1->CCMR1|=6<<4;  //CH1 PWM2模式
TIM1->CCMR1|=1<<3; //CH1预装载使能
TIM1->CCMR2|=6<<12;  //CH4 PWM2模式
TIM1->CCMR2|=1<<11;  //CH4 
    TIM1->CCMR2|=6<<4;  //CH3 PWM2模式
TIM1->CCMR2|=1<<3;  //CH3 PWM2模式
TIM1->CCER|=1<<4;   //OC2 输出使能 开关位   
TIM1->CCER|=1<<0;   //OC1 输出使能 开关位
TIM1->CCER|=1<<8;   //OC3 输出使能 开关位
    TIM1->CCER|=1<<12;  //OC4 输出使能 开关位
TIM1->BDTR|=1<<15; // 主输出使能
TIM1->CR1|=1<<7;   //ARPE使能 
    TIM1->DIER|=1<<0;   //允许更新中断
TIM1->DIER|=1<<6;   //允许触发中断  
  TIM1->DIER|=1<<4;   //允许触发中断
MY_NVIC_Init(0,1,TIM1_UP_IRQChannel,2);//抢占0,子优先级2,组2
MY_NVIC_Init(0,2,TIM1_CC_IRQChannel,2);//抢占0,子优先级2,组2
PWM0_VAL=500; //设置PWM位为10khz 占空比50% 
PWM1_VAL=500;
PWM2_VAL=250;
PWM3_VAL=250;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-17 20:51:20 | 显示全部楼层
软件仿真看看寄存器内容,对比下看看先.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-17 21:17:32 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子个 你这句   TIM1->CR1=0x8000;   //ARPE使能  感觉不对啊
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-17 21:19:46 | 显示全部楼层
他是第七位啊
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-17 22:12:20 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
 TIM1->DIER|=1<<0;   //允许更新中断
TIM1->DIER|=1<<6;   //允许触发中断    
  TIM1->DIER|=1<<4;   //允许触发中断
  

这三个设置有问题吗? 因为我要用到 定时1 的 溢出中断 和匹配中断 的服务子程序
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-17 23:27:30 | 显示全部楼层
回复【3楼】电子好学者:
---------------------------------
是不对,0X0080才对.呵呵.
回复【5楼】电子好学者:
---------------------------------
没问题啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-18 09:46:43 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
那你那个 TIM1->CR1=0x8000;   //ARPE使能   不对 怎么还可以程序正常跑 ?   好奇怪啊
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-18 09:50:23 | 显示全部楼层
那这个预装载  和没有 最大区别是什么呢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-18 13:57:17 | 显示全部楼层
回复【8楼】电子好学者:
---------------------------------
在没有精确波形控制要求的前提下,没区别.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-18 18:05:34 | 显示全部楼层
那哪里 有介绍 这个关于 波形精确不精确的呢  32手册里面吗?
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-18 22:46:23 | 显示全部楼层
MY_NVIC_Init(0,2,TIM1_CC_IRQChannel,2);//抢占0,子优先级2,组2 回复【9楼】正点原子:
---------------------------------
原子个  MY_NVIC_Init(0,2,TIM1_CC_IRQChannel,2);//抢占0,子优先级2,组2  我设置这个  目的是  cnt的值和ccrx的值一样是 进入中断

TIM1->DIER|=1<<4;   //允许触发中断 我就知道使能这个  
其他的 看的好乱啊 求解答啊  还要设置那些呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-18 23:16:04 | 显示全部楼层
回复【11楼】电子好学者:
---------------------------------
你现在的代码是什么情况呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-19 16:33:01 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
我是想写  我设置的是 1ms 溢出中断     71+1分频 arr值为1000    那么 我要实现的是    我通道1 和通道2  输出两路pwm波  比如占空比为 500   百分之五十   那么 我通道的4 的占空比就为 250  也就是百分之二十五   那么我设置的是  cnt值为250 时 就会和通道4  ccr4 值匹配  (TIM1->DIER|=1<<4;   //允许触发中断                    MY_NVIC_Init(0,2,TIM1_CC_IRQChannel,2);//抢占0,子优先级2,组2   )中断   然后再 1ms到时   (                       TIM1->DIER|=1<<0;   //允许更新中              TIM1->DIER|=1<<6;   //允许触发中断
  MY_NVIC_Init(0,1,TIM1_UP_IRQChannel,2);//抢占0,子优先级2,组2) 溢出中断  我程序是这样设置的
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-19 16:33:34 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
原子 你说理论上可以实现吗?  我就怕理论不能实现  那我就在瞎写了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-19 18:46:18 | 显示全部楼层
回复【14楼】电子好学者:
---------------------------------
按你的思路,编出来看看先了.
PWM输出,是可以软件仿真的,这个你软防就能解决问题了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
 楼主| 发表于 2013-3-19 19:48:29 | 显示全部楼层
可是 有个疑惑 就是 匹配中断后 cnt的值是 从250 开始计数吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-23 04:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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