微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm32程序PB0没动静

stm32程序PB0没动静

时间:10-02 整理:3721RD 点击:
大虾给看看PB0没动静啊!这个程序是PA0输出一个占空比为10%的PWM,但是仿真时PB0没有波?,且周期是20ms实在是不解?
我是这么算的周期 T=((200*7200)/72000000)*2=40MS  可仿真出来的波的周期为20ms
void All_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;  //定义GPIO结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOB口时钟
/*将PB0配置为推挽输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50MHz时钟速度
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef  TIM2_TimeBaseStructure;//定义结构体
TIM_OCInitTypeDef  TIM2_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA及功能复用IO时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能TIM2时钟
//GPIOA配置为:定时器2的PWM 1个通道复用功能输出
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//I/O时钟为50MHz
   GPIO_Init(GPIOA, &GPIO_InitStructure);//根据上面指定参数初始化GPIO结构体
//定时器基本配置
TIM2_TimeBaseStructure.TIM_Period =200-1;//计数值为1000
TIM2_TimeBaseStructure.TIM_Prescaler = 7200-1;//3分频
TIM2_TimeBaseStructure.TIM_ClockDivision = 0;//采样分频0
TIM2_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseStructure);
TIM2_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//定时器配置为PWM1模式
TIM2_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM输出比较极性高
// PWM1模式通道1
TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//通道1输出使能
TIM2_OCInitStructure.TIM_Pulse =20;//脉宽值为200
TIM_OC1Init(TIM2,&TIM2_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化TIM2
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR1上的预装载寄存器

/* 配置输出比较通道1中断*/
TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);

TIM_Cmd(TIM2, ENABLE);//使能定时器2
}
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//判断TIM2的比较1通道是否有中断
{
  TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);//清除比较1中断标志位
  GPIOB->ODR^=GPIO_Pin_0;//将PB0电平反向
}
}

TIM2挂载在APB1上面,一般启动文件初始化APB1时钟为36M

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top