打印

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

[复制链接]
515|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
社畜一枚|  楼主 | 2020-4-25 07:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用定时器产生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); //中断函数执行结束后清除中断标志位,退出中断
        
}

使用特权

评论回复

相关帖子

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

本版积分规则

397

主题

401

帖子

0

粉丝