打印
[STM32F0]

STM32F0,除了用MCO的的GPIO外,其它GPIO都可以使用systemclock的时钟吗

[复制链接]
1696|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
289947679|  楼主 | 2016-1-11 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F0,除了用MCO的的GPIO外,其它GPIO都可以使用systemclock的时钟吗
沙发
airwill| | 2016-1-11 22:19 | 只看该作者
问题没有说清楚, MCO 是输出, 不是使用 xx 时钟. GPIO 口当然内部使用时钟信号的. 但不能输出.
不过通过定时器, 你还是可以得到比较高的频率输出的.

使用特权

评论回复
板凳
289947679|  楼主 | 2016-1-13 14:12 | 只看该作者
airwill 发表于 2016-1-11 22:19
问题没有说清楚, MCO 是输出, 不是使用 xx 时钟. GPIO 口当然内部使用时钟信号的. 但不能输出.
不过通过定 ...

我现在F0主频是48M,我想用timer clk输出24m的占空比是50的PWM ,现在程序怎么做

使用特权

评论回复
地板
airwill| | 2016-1-13 17:37 | 只看该作者
试试: 设定时器溢出为1. OCR 为0, 用 PWM 输出.

使用特权

评论回复
5
289947679|  楼主 | 2016-1-15 17:49 | 只看该作者
本帖最后由 289947679 于 2016-1-15 17:51 编辑
airwill 发表于 2016-1-13 17:37
试试: 设定时器溢出为1. OCR 为0, 用 PWM 输出.
用f030f4p6,GPIO:PB1.想输出36MPWM,(内部时钟是48M)调了好久都没有出来

void TIM_Config(void)
{
//NVIC_InitTypeDef NVIC_InitStructure;
TIM_OCInitTypeDef TIM_OCInitSrtucture;
        
GPIO_InitTypeDef GPIO_InitStructure;
        //TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//ʹÄÜTIM3ʱÖÓ
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
        //RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE);
        /* ÅäÖÃGPIO¹Ü½Å¸´ÓÃ*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
        //Ó³ÉäI/OΪÍâÉèËùÓÃ
         GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_1);
}

void TIM_PWM_Config(void)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

//u16 CCR1_Val = 500;
   /* Time base configuration */  
   TIM_TimeBaseStructure.TIM_Period = 1;       //µ±¶¨Ê±Æ÷´Ó£°¼ÆÊýµ½£¹£¹£¹Ê±£¬¼´Îª1000´ÎΪһ¸öÖÜÆÚ
  TIM_TimeBaseStructure.TIM_Prescaler = 1;    //ÉèÖÃÔ¤·ÖƵ£º²»·ÖƵ
   TIM_TimeBaseStructure.TIM_ClockDivision = 0; //ÉèÖÃʱÖÓ·ÖƵϵÊý£º²»·ÖƵ
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;  //ÏòÉϼÆÊýģʽ

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

   /* PWM1 Mode configuration: Channel1 */
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //ÅäÖÃΪPWMģʽ£±
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_Pulse =0;   //ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚ500ʱ£¬Îª¸ßµçƽ

  TIM_OC1Init(TIM3, &TIM_OCInitStructure); //ʹÄÜͨµÀ1

   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);


   TIM_ARRPreloadConfig(TIM3, ENABLE); // ʹÄÜTIMÖØÔؼĴæÆ÷ARR

   /* TIM3 enable counter */
   TIM_Cmd(TIM3, ENABLE);                   //ʹÄܶ¨Ê±Æ÷£³
}

使用特权

评论回复
6
289947679|  楼主 | 2016-1-15 18:37 | 只看该作者
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
uint16_t TimerPeriod = 0;
uint16_t Channel1Pulse = 0, Channel2Pulse = 0, Channel3Pulse = 0, Channel4Pulse = 0;

void TIM_Config(void)
{
//NVIC_InitTypeDef NVIC_InitStructure;
TIM_OCInitTypeDef TIM_OCInitSrtucture;
       
GPIO_InitTypeDef GPIO_InitStructure;
        //TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        //RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能TIM3时钟
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
        //RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE);
        /* 配置GPIO管脚复用*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;// | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
        //映射I/O为外设所用
         GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_1);
}

void TIM_PWM_Config(void)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

//u16 CCR1_Val = 500;
   /* Time base configuration */  
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能TIM3时钟
   TIM_TimeBaseStructure.TIM_Period = 1000;       //当定时器从0计数到999时,即为1000次为一个周期
  TIM_TimeBaseStructure.TIM_Prescaler = 0;    //设置预分频:不分频
   TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分频系数:不分频
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

   /* PWM1 Mode configuration: Channel1 */
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //配置为PWM模式1
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_Pulse =500;   //设置跳变值,当计数器计数到这个值时,电平发生跳变
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于500时,为高电平

  TIM_OC1Init(TIM3, &TIM_OCInitStructure); //使能通道1

   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);


   TIM_ARRPreloadConfig(TIM3, ENABLE); // 使能TIM重载寄存器ARR

   /* TIM3 enable counter */
   TIM_Cmd(TIM3, ENABLE);                   //使能定时器3
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

22

帖子

1

粉丝