野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10337|回复: 5

19节系统定时器,利用定时器发PWM信号,按键中断修改频率不成功

[复制链接]
发表于 2018-7-23 09:50:50 | 显示全部楼层 |阅读模式
利用定时器产生50%占空比方波,按键中断后修改频率,但是一直报错,不知道这么修改,请帮忙看看:
bsp_systick.h 程序:

#include"bsp_systick.h"
#include "stm32f10x_gpio.h"

void  SysTick_Delay_us(uint32_t us)  //延时1us
{
   uint32_t i;

   SysTick_Config(72);
  for(i=0;i<us;i++)
        {
           while( !((SysTick->CTRL)&(1<<16)));
       
        }
     SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk; //计时结束
       
}

void SysTick_Delay_ms(uint32_t ms)  //延时1ms
{
   uint32_t i;

   SysTick_Config(72000);
  for(i=0;i<ms;i++)
        {
           while( !((SysTick->CTRL)&(1<<16)));
       
        }
     SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk; //计时结束
       
}

void PWM_GPIO_Config(void)
{
       
    GPIO_InitTypeDef   GPIO_InitStruct;  //定义初始化一个结构体,GPIO_InitStruct的名字可以任意,前面的GPIO_InitTypeDef对应头文件里面的结构体定义,所以格式命名不能随便修改
       
          RCC_APB2PeriphClockCmd(PWM1_GPIO_CLK, ENABLE);//注意:时钟的初始化要放到GPIO函数初始化之前,否则初始化无效果,也就是说先打开时钟端口才可以初始化
          RCC_APB2PeriphClockCmd(PWM1_GPIO_CLK, ENABLE);
          RCC_APB2PeriphClockCmd(PWM1_GPIO_CLK, ENABLE);
       

       
       
       
    GPIO_InitStruct.GPIO_Pin    =  PWM1_GPIO_PIN;
    GPIO_InitStruct.GPIO_Mode   =  GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed  =  GPIO_Speed_50MHz;
       
     GPIO_Init(PWM1_GPIO_PORT , &GPIO_InitStruct);
       
//        GPIO_InitStruct.GPIO_Pin    =  LED_B_GPIO_PIN;
//        GPIO_InitStruct.GPIO_Mode   =  GPIO_Mode_Out_PP;
//        GPIO_InitStruct.GPIO_Speed  =  GPIO_Speed_50MHz;
//       
//       
//       
//       
//  GPIO_Init(LED_B_GPIO_PORT , &GPIO_InitStruct);//第二个变量是指针类型,对一个变量要取地址,用&符号
               
}

uint32_t  frequency_Up(void)
{

  return 100;
       
}


main()函数程序:
#include "stm32f10x.h"
//#include "stm32f10x_it.c"
#include "bsp_led.h"

#include "bsp_key.h"
#include "bsp_exti.h"
#include "stm32f10x_it.h"
#include "bsp_systick.h"

uint32_t  fre(void);
void delay(uint32_t count)
{
for(;count!=0;count--);

}

int main(void)
{  
        uint32_t  Pwm_time=10;
       
       

        }
       
        //KEY_GPIO_Config();
       
        EXIT_Key_config(); //调用键盘初始化
       
       
       
        PWM_GPIO_Config();
       
         while(1)
         {
                 
                 PWM1_ON;
                 SysTick_Delay_us(Pwm_time);
                 
                PWM1_OFF;
                 SysTick_Delay_us(Pwm_time);
         
         }
         
         
}


中断函数:

void EXTI0_IRQHandler() //EXTI0中断函数
{  
       
       
  if(EXTI_GetITStatus(EXTI_Line0) != RESET)
       
                {
               
                        Pwm_time=++;
                        LED_G_TOGGLE;//指示是否进入中断
                       
          }
        EXTI_ClearITPendingBit(EXTI_Line0); //中断函数执行结束后清除中断标志位,退出中断
       
}       





回复

使用道具 举报

 楼主| 发表于 2018-7-23 09:53:37 | 显示全部楼层
报错信息:identifier "Pwm_time" is undefined Pwm_time++;

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 09:54:55 | 显示全部楼层
qiuyuqiang001 发表于 2018-7-23 09:53
报错信息:identifier "Pwm_time" is undefined Pwm_time++;

我觉的是Pwm_time定义的问题,难道在main()函数里面定义的变量在中断函数里面不能直接调用??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 09:55:36 | 显示全部楼层
qiuyuqiang001 发表于 2018-7-23 09:54
我觉的是Pwm_time定义的问题,难道在main()函数里面定义的变量在中断函数里面不能直接调用??

  Pwm_time=++语句有错误,改为Pwm_time++;还是不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 13:06:32 | 显示全部楼层
qiuyuqiang001 发表于 2018-7-23 09:55
Pwm_time=++语句有错误,改为Pwm_time++;还是不行

版主不在吗?能不能帮忙给看看,调试很久了,一直觉得这个Pwm_time定义应该是全局变量,可是定义应该放在哪儿呢,各个头文件里面都放过,但是都不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 13:28:41 | 显示全部楼层
qiuyuqiang001 发表于 2018-7-23 13:06
版主不在吗?能不能帮忙给看看,调试很久了,一直觉得这个Pwm_time定义应该是全局变量,可是定义应该放在 ...

把 Pwm_time这个变量声明放在main()的前面,希望定义成全局变量,但是还是不行,中断函数报错就是说这个变量没有定义i
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 11:50 , Processed in 0.027464 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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