你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MCU实战经验】+编译器安装途径

[复制链接]
huangfeian 发布时间:2014-4-16 21:39
  最近在研究STM32开发板,遇到个很奇怪的问题问题,查了很多资料都找不到原因,我想做一个利用按键来控制一下pwm波的开关,按键用的是外部中断EXTI0,GPIOA_0,PWM用的是TIM1_CH1,单独在KEIL环境下都可以运行,可是组合起来时在keil中就编译不了了。(以下是代码)
解决途径:编译软件没安装在C盘,且安装文件不包含汉字

int main(void)

        /* config the sysclock to 72m */      
      SystemInit();


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA, ENABLE);
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
          TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        uint16_t CCR1_Val = 2047;
       TIM_TimeBaseStructure.TIM_Prescaler = 0;
       TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
       TIM_TimeBaseStructure.TIM_Period = 4095;
       TIM_TimeBaseStructure.TIM_ClockDivision = 0;
       TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

       TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);


     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
     TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
     TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

     TIM_OC1Init(TIM1, &TIM_OCInitStructure);

  
      TIM_Cmd(TIM1, ENABLE);

      TIM_CtrlPWMOutputs(TIM1, ENABLE);        
        EXTI_PA0_Config(); 

  while(1)                            
  {
  }
}

//下面的是个子函数
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* 配置P[A|B|C|D|E]0为中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn  ;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

/*
* 函数名:EXTI_PB0_Config
* 描述  :配置 PB0 为线中断口,并设置中断优先级
* 输入  :无
* 输出  :无
* 调用  :外部调用
*/
void EXTI_PA0_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure; 
        EXTI_InitTypeDef EXTI_InitStructure;

        /* config the extiline(PB0) clock and AFIO clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);

        /* config the NVIC(PB0) */
        NVIC_Configuration();

        /* EXTI line gpio config(PB0) */        
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;       
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;         // 上拉输入
     GPIO_Init(GPIOA, &GPIO_InitStructure);

        /* EXTI line(PB0) mode config */
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); 
      EXTI_InitStructure.EXTI_Line = EXTI_Line0;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure); 
}


void EXTI0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确保是否产生了EXTI Line中断
  {
              GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
  }  
}
收藏 评论0 发布时间:2014-4-16 21:39

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版