PWM输出实验,初始化函数[mw_shl_code=cpp,true]//pwm输出实验
void TIM3_Pwm_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC->APB1ENR=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<0; //开启辅助时钟
RCC->APB2ENR=1<<3; //开启PB5的时钟
//设置PB5为推挽复用输出
GPIOB->CRL&=0xFF0FFFFF;
GPIOB->CRL|=0xFFBFFFFF;
AFIO->MAPR&=0xFFFFF3FF; //清除MAPR的第【11:10】位
AFIO->MAPR|=1<<11; //设置TIM3为部分重映射
//初始化TIM3
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
//初始化TIM3_CH2
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OC2Init(TIM3, &TIM_OCInitStruct);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_Cmd(TIM3,ENABLE);
}[/mw_shl_code]如下:
主函数:[mw_shl_code=cpp,true] int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
uart_init(115200);
timer_Init(4999,7199);
TIM3_Pwm_Init(899,7199);
while(1)
{
TIM3->CCR2=450; //高电平占空比50%,持续时间45ms
}[/mw_shl_code]
第一次下载到电路板后,LED0正常闪烁,仿真的波形也符合预期,就过了。到了下一讲输入捕获实验,按照例程用TIM5_CH1捕获这个脉冲宽度,查看仿真是有波形的,但是仿真串口没有输出,下载到电路板上后LED0的也不正常闪烁,我又把这句代码贴在了while(1)里面循环,重新下载到电路板,仿真的波形还是正常45ms翻转一次,但是电路板上LED0变成了长亮,这是什么情况?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>