本帖最后由 phpython 于 2017-8-18 16:14 编辑
芯片为 STM32F103RCT6
pwm.c
[mw_shl_code=c,true]//CH1 PWM输出初始化设置
void Tim1PwmInit(u16 arr,u16 psc){
//声明定时器1 PWM 输出结构体变量
TIM_OCInitTypeDef TIM1_OCInitStruct;
//声明定时器1结构体变量
TIM_TimeBaseInitTypeDef TIM1_TimeBaseInitStruct;
//声明GPIO结构体变量
GPIO_InitTypeDef GPIOA_InitStruct;
//使能定时器1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
//使能IO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//初始化IO配置
GPIOA_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIOA_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIOA_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIOA_InitStruct);
//定时器配置
TIM1_TimeBaseInitStruct.TIM_Period = psc;//设置用来作为 TIMx 时钟频率除数的预分频值 不分频
TIM1_TimeBaseInitStruct.TIM_Prescaler = arr;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80K
TIM1_TimeBaseInitStruct.TIM_ClockDivision = 0;//时钟分割:TDTS = Tck_tim
TIM1_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseInitStruct);
//设置定时器外设PWM输出配置
TIM1_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2; //脉宽调制模式 2
TIM1_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM1_OCInitStruct.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM1_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
TIM_OC1Init(TIM1,&TIM1_OCInitStruct);
//定时器输出PWM使能
TIM_CtrlPWMOutputs(TIM1,ENABLE);
//CH1 预装载使能
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
//使能 TIMx 在 ARR 上的预装载寄存器
TIM_ARRPreloadConfig(TIM1,ENABLE);
//使能定时器
TIM_Cmd(TIM1,ENABLE);
}
[/mw_shl_code]
main.c
[mw_shl_code=c,true]int main(){
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延时函数初始化
// LedInit(); //初始化与 LED 连接的硬件接口
Tim1PwmInit(899,0);//不分频。PWM 频率=72000/(899+1)=80Khz
while(1){
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare1(TIM1,led0pwmval);
}
}
//int main(){
// delay_init(); //延时函数初始化
// LedInit(); //初始化与 LED 连接的硬件接口
//
// while(1){
// GPIO_SetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
// delay_ms(500);
// GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
// delay_ms(500);
// }
//}
[/mw_shl_code]
在线急等,谢谢高手
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这行被你屏蔽掉了,肯定看不到灯的亮度变化了,应该是这个问题
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
如果按这样的顺序定义变量,其他的都是例程,仿真都没有问题,下载到开发板上就出现DS0就常亮,把这变量定义顺序换一下就正常,为什么会出现这个现象,我也不知道具体的原因,期待有人能够解答。
一周热门 更多>