打印
[STM32F0]

STM32F0 PWM问题!!

[复制链接]
2605|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小S咯|  楼主 | 2017-11-30 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小S咯 于 2017-11-30 17:35 编辑

我用的是STM32F030K6T6芯片,我配置TIM1的3通道和TIM3的4通道PWM输出,为什么示波器看一直是高电平,没有PWM输出。另外有这个芯片的数据手册吗???网上找不到,下面程序。还有一个问题:因为定时器PWM不行,所以我就想IO口模拟PWM,于是开TIM3的中断,结果flash写会卡死,单独使用就没问题。
程序:
void fmc_write(uint32_t addr, uint16_t Data)
{
  FLASH_Unlock();
  FLASH_ErasePage(FLASH_START_ADDR+(addr*2));
  FLASH_ProgramHalfWord(FLASH_START_ADDR+(addr*2),Data);
  FLASH_Lock();
}

//GPIO初始化的
void gpio_init()
{
    GPIO_InitTypeDef GPIO_InitStructure1;   //PA
    GPIO_InitTypeDef GPIO_InitStructure2;   //PB
    /* GPIOA Periph clock enable */
    //PA9=P,PA10=Y,PA11=R     PWM
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure1.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_InitStructure1);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_2);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_2);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_2);

    /* GPIOB Periph clock enable */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    //PB0=G,PB1=B,PB4=A,PB5=W      PWM
    GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
    GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure2.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure2.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOB, &GPIO_InitStructure2);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_1);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_1);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_1);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_1);

}

//定时器初始化
void PWM_init()
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure1;
  TIM_OCInitTypeDef TIM_OCInitStructure1;

  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure3;
  TIM_OCInitTypeDef TIM_OCInitStructure3;

  //TIM1
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

  TIM_TimeBaseStructure1.TIM_Prescaler = 0;
  TIM_TimeBaseStructure1.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure1.TIM_Period = 255;
  TIM_TimeBaseStructure1.TIM_ClockDivision = 0;
  TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure1);

  TIM_OCInitStructure1.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure1.TIM_OutputState = TIM_OutputNState_Enable;
  TIM_OCInitStructure1.TIM_OCPolarity = TIM_OCPolarity_High;
  //CH1~CH4
//  TIM_SetCompare1(TIM1,64);
// TIM_OC1Init(TIM1,&TIM_OCInitStructure1);
// TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);

  TIM_SetCompare2(TIM1,128);
  TIM_OC2Init(TIM1,&TIM_OCInitStructure1);
  TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);

  TIM_SetCompare3(TIM1,200);
  TIM_OC3Init(TIM1,&TIM_OCInitStructure1);
  TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);

  TIM_SetCompare1(TIM1,255);
  TIM_OC4Init(TIM1,&TIM_OCInitStructure1);
  TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);

  TIM_Cmd(TIM1,ENABLE);
  TIM_CtrlPWMOutputs(TIM1,ENABLE);


  //TIM3
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  TIM_TimeBaseStructure3.TIM_Prescaler = 0;
  TIM_TimeBaseStructure3.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure3.TIM_Period = 16;
  TIM_TimeBaseStructure3.TIM_ClockDivision = 0;
  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure3);
  TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

  TIM_OCInitStructure3.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure3.TIM_OutputState = TIM_OutputNState_Enable;
  TIM_OCInitStructure3.TIM_OCPolarity = TIM_OCPolarity_High;
  //CH1~CH4
  TIM_SetCompare1(TIM3,6550);
  TIM_OC1Init(TIM3,&TIM_OCInitStructure3);
  TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

  TIM_SetCompare1(TIM3,13000);
  TIM_OC2Init(TIM3,&TIM_OCInitStructure3);
  TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);

  TIM_SetCompare1(TIM3,33000);
  TIM_OC3Init(TIM3,&TIM_OCInitStructure3);
  TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);

  TIM_SetCompare1(TIM3,45000);
  TIM_OC4Init(TIM3,&TIM_OCInitStructure3);
  TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);

  TIM_Cmd(TIM3,ENABLE);
  TIM_CtrlPWMOutputs(TIM3,ENABLE);
}
沙发
小S咯|  楼主 | 2017-11-30 17:36 | 只看该作者
TIM_Period、TIM_Prescaler和TIM_SetCompare()函数的值有问题吗?

使用特权

评论回复
板凳
nobleliom| | 2017-11-30 19:49 | 只看该作者
数据手册官网都有呀,ST官网都有的,另外不建议用IO模拟,太low了。

使用特权

评论回复
地板
会飞的大白| | 2017-11-30 19:53 | 只看该作者
直接用cubemx配置就好了,很方便的。

使用特权

评论回复
5
zhuomuniao110| | 2017-11-30 20:05 | 只看该作者
配置工具配置的还凑合,自己搞太复杂了,ST做的库超级难用。

使用特权

评论回复
6
wangdezhi| | 2017-11-30 21:28 | 只看该作者
这个就是使用的定时器

使用特权

评论回复
7
isseed| | 2017-11-30 21:29 | 只看该作者
8
suzhanhua| | 2017-11-30 21:29 | 只看该作者

使用特权

评论回复
9
wangdezhi| | 2017-11-30 21:37 | 只看该作者
楼主配置的IO是否正确呢

使用特权

评论回复
10
suzhanhua| | 2017-11-30 21:37 | 只看该作者
11
isseed| | 2017-11-30 21:37 | 只看该作者
12
小S咯|  楼主 | 2017-12-1 08:09 | 只看该作者
wangdezhi 发表于 2017-11-30 21:28
这个就是使用的定时器

没PWM输出

使用特权

评论回复
13
小S咯|  楼主 | 2017-12-1 08:10 | 只看该作者
wangdezhi 发表于 2017-11-30 21:37
楼主配置的IO是否正确呢

我的GPIO_INIT函数有问题吗?

使用特权

评论回复
14
小S咯|  楼主 | 2017-12-1 08:13 | 只看该作者
nobleliom 发表于 2017-11-30 19:49
数据手册官网都有呀,ST官网都有的,另外不建议用IO模拟,太low了。

ST官网030x系列网页都404

使用特权

评论回复
15
小S咯|  楼主 | 2017-12-1 08:16 | 只看该作者
isseed 发表于 2017-11-30 21:29
http://blog.csdn.net/ybhuangfugui/article/details/51581689

这个我有看过,我的配置跟他差不多,然而不知道哪里有问题

使用特权

评论回复
16
小S咯|  楼主 | 2017-12-1 08:53 | 只看该作者
解决了,把TIM_Cmd(TIM1,ENABLE);一定要放最后面

使用特权

评论回复
17
lbh422434251| | 2017-12-2 22:10 | 只看该作者
小S咯 发表于 2017-12-1 08:13
ST官网030x系列网页都404

404是你的网络有问题,你这代码太奇葩了,官网都有例程的,只要照着官网的例程就行了,固件库包里就有

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

178

帖子

4

粉丝