OpenEdv-开源电子网

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

关于用原子例程输出方波个数的问题

[复制链接]

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-19
在线时间
0 小时
发表于 2015-4-19 15:21:26 | 显示全部楼层 |阅读模式
5金钱
我用的是原子的例程,板子也是mini板子的,是RBT6的,我不知道该怎么改来输出方波的个数。。。求大神

最佳答案

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

可以用定时器1,的重复计数功能。比较简单。 也可以用中断统计。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-19 15:21:27 | 显示全部楼层
可以用定时器1,的重复计数功能。比较简单。
也可以用中断统计。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-19
在线时间
0 小时
 楼主| 发表于 2015-4-20 15:18:03 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
http://www.openedv.com/posts/list/36090.htm。。。。我看了这个里面的程序,但是我要两路,第一路用TIM2和3可以产生我需要的,第二路用TIM4和TIM1就不行,最后加了那句TIM1专门要加的,还是不行。达不到用TIM2和TIM3的效果。。。不知道是怎么回事
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-19
在线时间
0 小时
 楼主| 发表于 2015-4-20 15:20:00 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
---------------------------------
#include "pwm1.h"  
  
/****************************  

02 **TIM4的通道1使用单脉冲模式  

03 **TIM1使用门控模式用来输出PWM  

04 **  

 ****************************/ 

//TIM2per:重装值  

 //Compare1:比较捕获1的预装载值  
void Vertical_Motor_Init(u16 TIM4per, u16 TIM1per, u16 TIM1Compare1)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

TIM_OCInitTypeDef TIM_OCInitStruct;

GPIO_InitTypeDef GPIO_InitStruct;



RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能定时器4的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//使能定时器1的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOA和GPIOB时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用IO时钟



GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;//PA8  //TIM1-CH1   A8

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA,&GPIO_InitStruct);


GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;//PB6    //TIM4-CH1   B6

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB,&GPIO_InitStruct);



//TIM4工作在单脉冲下

TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//没有时钟分割

TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式

TIM_TimeBaseInitStruct.TIM_Prescaler = 7200;//预分频值,每100us计数一次

TIM_TimeBaseInitStruct.TIM_Period = TIM4per;//重装值

TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);



TIM_SelectOnePulseMode(TIM4,TIM_OPMode_Single);//设置TIM2在单脉冲模式,且是单一的脉冲,在下一个更新事件停止

TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);//使能定时器2的通道1预装载寄存器

TIM_SelectOutputTrigger(TIM4,TIM_TRGOSource_OC1Ref);



TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平

TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1输出使能

TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//有效电平为高

TIM_OCInitStruct.TIM_Pulse = 1;//比较捕获1的预装载值

TIM_OC1Init(TIM4,&TIM_OCInitStruct);



TIM_Cmd(TIM4,DISABLE);//先不使能能TIM2





//TIM3工作在从模式的门控模式下的PWM输出模式

TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//没有时钟分割

TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式

TIM_TimeBaseInitStruct.TIM_Prescaler = 720;//预分频值,10us计数一次

TIM_TimeBaseInitStruct.TIM_Period =  TIM1per;//重装值

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);



TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Gated);//TIM3为门控模式

TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Enable);//使能TIM3的主从模式使能

TIM_SelectInputTrigger(TIM1,TIM_TS_ITR1);//内部触发,从TIM2触发



TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1输出使能
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//有效电平为高
   TIM_OCInitStruct.TIM_Pulse = TIM1Compare1;//比较捕获1的预装载值
   TIM_OC1Init(TIM1,&TIM_OCInitStruct);

   TIM_Cmd(TIM1,ENABLE);//使能TIM3


}



//设置PWM的输出

//Cycle:为周期,单位(us)

//Pulse_Num:为脉冲个数(小于3200)

void Vertical_TIM1_TIM4_PWM(u16 Vertical_Cycle, u16 Vertical_Pulse_Num)

{

u16 TIM1per=0;
  u32 Time=0;

 //改变TIM3的重装值改变脉冲频率这里设置脉冲占空比为50%

 //改变TIM2的预分频器和重装值改变脉冲个数



   Time=Vertical_Cycle * Vertical_Pulse_Num;
  
   Time/=100;//预分频为7200,100us计数一次

   TIM1per=Vertical_Cycle/10;//预分频为720,10us计数一次



   TIM_SetAutoreload(TIM4,Time+1);//设置TIM2的重装值

   TIM_SetAutoreload(TIM1,TIM1per-1);//设置TIM3的重装值

   TIM_SetCompare1(TIM1,TIM1per/2);//设置占空比为50%
  
   TIM_Cmd(TIM4,ENABLE);//使能TIM2
TIM_CtrlPWMOutputs(TIM1,ENABLE);  //设置MOE输出,使能PWM输出

}
这个是我的用TIM4和TIM1的程序,就是不得行,主函数里面和之前的那个连接里面的程序是一样的>
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 15:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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