求助!编写的程序不知道哪里出了错!调节不了亮度#include "stm32f10x.h" //包含stm32f10x.h的头文件
void delay_nms(uint16_t ms) //定义毫秒延时子函数
{
uint16_t i;//定义无符号字符型
for(;ms>0;ms--) //毫秒级
for(i=10000;i>0;i--);
}
//LED的初始化配置函数
void LED_config(void)
{
GPIO_InitTypeDef gpio; //定义InitTypeDef类型的结构体指针 gpio
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA的外设时钟
gpio.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
gpio.GPIO_Pin=GPIO_Pin_7;
gpio.GPIO_Speed=GPIO_Speed_2MHz; //速度50MHZ
GPIO_Init(GPIOA,&gpio); //调用GPIO_Init函数 对GPIOA口初始化
}
void KEY_config(void) //KEY_按键的初始化配置函数
{
GPIO_InitTypeDef gpio; //定义结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA的时钟
gpio.GPIO_Mode=GPIO_Mode_IPU; //输入上拉模式
gpio.GPIO_Pin=GPIO_Pin_15;
GPIO_Init(GPIOA,&gpio); //GPIOA口初始化
}
uint8_t KEY_scan(void) //判别哪个按键按下程序 按键扫描
{
uint8_t rtl; //定义一个rtl,用来接收按键返回的值
if((GPIO_ReadInputData(GPIOA)&0xF)==0XF)// 判别是否有 键按下
return 0xff; //如果没有按键按下,返回FF
delay_nms(10); //延时消抖
if((GPIO_ReadInputData(GPIOA)&0XF)==0XF) //再次判别是否有键按下_
return 0xff; //如果没有按键按下,返回FF
rtl=GPIO_ReadInputData(GPIOA)&0xF; //返回键值
while((GPIO_ReadInputData(GPIOA)&0XF)!=0XF); //等待按键释放
return rtl; //返回键值
}
void TIM3_CH2_PWM_Init(u16 per,u16 psc)//TIM2定时器中断PWM波的初始化配置
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* 开启时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);
TIM_TimeBaseInitStructure.TIM_Period=per; //自动装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC2Init(TIM3,&TIM_OCInitStructure); //输出比较通道2初始化
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR2 上的预装载寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE);//使能预装载寄存器
TIM_Cmd(TIM3,ENABLE); //使能定时器
}
int main(void)
{
uint16_t PWM=1000; //定义PWM波初始值为1000 即CRR的值
LED_config();//初始化灯
KEY_config();//初始化按键
TIM3_CH2_PWM_Init(500,72-1); //初始化PWM函数
while(1)
{
if(KEY_scan()==0xe)//按键按下
{
PWM-=200; //CCR的值右移一位,即除以2 原始PWM值:100% 按键按一次除一次为: 50%,25%,12.5%
if(PWM==0)//若CCR和seg的值小于125,则再赋值=为1000。
{
PWM=1000;
}
}
TIM_SetCompare2(TIM3,PWM);//函数,把PWM变量的值写入TIM2的输出通道3的CCR寄存器中,修改PWM占空比。
}
}
|