OpenEdv-开源电子网

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

TIM4复用pwm输出,程序没问题啊,怎么输出的不是PWM波啊?PB6输出

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-5-27
在线时间
0 小时
发表于 2015-5-27 14:54:34 | 显示全部楼层 |阅读模式
5金钱
TIM4复用pwm输出,程序没问题啊,怎么输出的不是PWM波啊?
[mw_shl_code=c,true]void PWM_Init(void)//初始化PWM端口,使能电机控制端口 //u16 arr,u16 psc { //此部分需手动修改IO口设置 RCC->APB2ENR|=1<<0; //复用 RCC->APB2ENR|=1<<3; // EN PB口 RCC->APB2ENR|=1<<5; // EN PD口 RCC->APB1ENR|=1<<2; //TIM4时钟使能 GPIOD->CRL&=0XFFFFFFF0; GPIOD->CRL|=0X00000003;// PD0推挽输出 3=普通推挽输出 GPIOD->ODR|=1<<0;//PD0上拉 最大速度50MHz 使能电机驱动 // AFIO->MAPR|=0XFFFFFFFF; // AFIO_MAPR 位11:10 // AFIO->MAPR&=0<<12;// TIM4_REMAP=0 PB6 GPIOB->CRL&=0XF0FFFFFF;//PB6 输出 GPIOB->CRL|=0X0B000000;//复用功能输出 GPIOB->ODR|=1<<6;//PB6上拉 TIM4->CCMR1|=7<<4; //PWM2,CH1 TIM4->CCMR1|=1<<3; //OC1PE :输出比较1预装载使能 TIM4->CCMR1|=1<<0; //CC1E=1:输入/捕获1输出使能 TIM4->CR1=0x8000; //ARPE使能 TIM4->CR1|=0x01; //使能定时器4 } [/mw_shl_code]


最佳答案

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

void PWM_Init(void)//初始化PWM端口,使能电机控制端口 //u16 arr,u16 psc {   //此部分需手动修改IO口设置 RCC->APB2ENR|=1<<0;    //复用 RCC->APB2ENR|=1<<3;    // EN PB口 RCC->APB2ENR|=1<<5;    // EN PD口 RCC->APB1ENR|=1<<2;       //TIM4时钟使能   GPIOD->CRL&=0XFFFFFFF0; GPIOD->CRL|=0X00000003;// PD0 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-5-27
在线时间
0 小时
 楼主| 发表于 2015-5-27 14:54:35 | 显示全部楼层
void PWM_Init(void)//初始化PWM端口,使能电机控制端口 //u16 arr,u16 psc
{  
//此部分需手动修改IO口设置
RCC->APB2ENR|=1<<0;    //复用
RCC->APB2ENR|=1<<3;    // EN PB口
RCC->APB2ENR|=1<<5;    // EN PD口
RCC->APB1ENR|=1<<2;       //TIM4时钟使能

 
GPIOD->CRL&=0XFFFFFFF0;
GPIOD->CRL|=0X00000003;// PD0推挽输出   3=普通推挽输出
GPIOD->ODR|=1<<0;//PD0上拉  最大速度50MHz 使能电机驱动

AFIO->MAPR|=0XFFFFFFFF; //   AFIO_MAPR 位11:10
AFIO->MAPR&=0XFFFFEFFF;//  TIM4_REMAP=0   PB6 

GPIOB->CRL&=0XF0FFFFFF;//PB6 输出  
GPIOB->CRL|=0X0B000000;//CNF6[1:0]:MODE6[1:0]=10 11复用功能输出
GPIOB->ODR|=1<<6;//PB6上拉

TIM4->CCMR1|=7<<4; //PWM2,CH1
TIM4->CCMR1|=1<<3; //位3  OC1PE :输出比较1预装载使能  

TIM4->CCER|=1<<1;//高电平有效
TIM4->CCER&=0XFFFE; //位0    CC1E=0;  关闭- OC1禁止输出
TIM4->CCMR1&=0XFFFC;  //位1:0=00:CC1通道被配置为输出  
 // CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。
TIM4->CCER|=1<<0; //位0   1: 开启- OC1信号输出到对应的输出引脚。

TIM4->EGR|=1<<0;  //重新初始化计数器,UG :产生更新事件 (Update generation)  
//并产生一个更新事件 使能计数器前设置
// TIM4->CR1|=1<<4; //DIR  1:计数器向下计数
// TIM4->CR1|=1<<7; //ARPE:自动重装载预装载允许位 1:TIMx_ARR寄存器被装入缓冲器
  TIM4->CR1&=0x0090; //CMS[1:0]:=00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数
  TIM4->CR1|=0x0090;   //位7,4=1  //位7 ARPE:自动重装载预装载允许位//位4 DIR=1:方向向下计数
  TIM4->CR1|=0x01;    //位0  CEN:使能计数器  
 

void motor_dr_fr(u8 x,u16 arr,u16 ccr) //方向,频率,占空比控制函数
{

TIM4->ARR=arr;//设定计数器自动重装值 
TIM4->SC=0;//10KHz     定时器每隔0.0001秒涨一次   再把这个值乘以(ARR+1)得出PWM频率                                                       //预分频器不分频
TIM4->CCR1=ccr;
}

回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5703
金钱
5703
注册时间
2013-11-22
在线时间
1198 小时
发表于 2015-5-27 21:58:07 | 显示全部楼层
ARR   SC   CCR1的值呢?
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-5-27
在线时间
0 小时
 楼主| 发表于 2015-5-28 22:17:59 | 显示全部楼层
已经解决了,谢谢,这三个值我在另外的函数里设置的,忘了贴出来了。问题不在这,现把正确的贴出来
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 23:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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