初中生
最后登录1970-1-1
在线时间 小时
注册时间2018-7-2
|
利用定时器产生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); //中断函数执行结束后清除中断标志位,退出中断
}
|
|