打印
[STM32F1]

STM32输出PWM波 遇到一些问题

[复制链接]
268|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanghqi|  楼主 | 2022-12-1 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32输出PWM波 遇到一些问题

使用特权

评论回复
沙发
zhanghqi|  楼主 | 2022-12-1 21:17 | 只看该作者
用Tim3输出PWM波。 使用PA6、PA7、PB0、PB1。能够发出占空比不同的方波。

使用特权

评论回复
板凳
zhanghqi|  楼主 | 2022-12-1 21:21 | 只看该作者
代码如下:
void TIM3_PWM_Init(void)
{        
        GPIO_InitTypeDef         GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef        TIM_OCInitStructure;

//        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB2Periph_GPIOA, ENABLE); //使能TIM3时钟,GPIOA时钟
        RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3,ENABLE);
        RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);

    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*GPIOB Configuration: TIM3 channel 3 and 4 as alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

        /* Time base configuration */
    TIM_TimeBaseStructure.TIM_Period = 999;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 750;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

  /* PWM1 Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 500;
  TIM_OC2Init(TIM3, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

  /* PWM1 Mode configuration: Channel3 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 250;
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);

  /* PWM1 Mode configuration: Channel4 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 100;
  TIM_OC4Init(TIM3, &TIM_OCInitStructure);
  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

  TIM_ARRPreloadConfig(TIM3, ENABLE);
  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);
}
更多操作

使用特权

评论回复
地板
zhanghqi|  楼主 | 2022-12-1 21:25 | 只看该作者
使用其他IO口,比如PA4、PA5或者PB6、PB7,在IO口处检测不到方波.

使用特权

评论回复
5
juventus9554| | 2022-12-1 21:26 | 只看该作者
有杂波和程序没啥关系的

使用特权

评论回复
6
xxrs| | 2022-12-1 21:28 | 只看该作者
使用其他定时器,比如Tim2,就检测不到方波。

使用特权

评论回复
7
happy_10| | 2022-12-1 21:30 | 只看该作者
是不是其他IO不能输出方波?

使用特权

评论回复
8
zhanghqi|  楼主 | 2022-12-1 21:35 | 只看该作者
int main(void)
{
        u32 i;
        u32 uwErrorIndex=0;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM,ENABLE);
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
        
        PWR_BackupAccessCmd(ENABLE);
        
        PWR_BackupRegulatorCmd(ENABLE);
        while(PWR_GetFlagStatus(PWR_FLAG_BRR) == RESET);
        
        
//         for(i = 0; i < 4096; i+=4)
//         {
//                 *(__IO uint32_t *) (BKPSRAM_BASE+i) = i;
//         }
        
                for (i=0; i< 4096; i+= 4)
  {
    if ((*(__IO uint32_t *) (BKPSRAM_BASE + i)) != i)
    {
      uwErrorIndex++;
        
    }

  }

使用特权

评论回复
9
虚幻的是灵魂| | 2024-5-20 16:43 | 只看该作者

使用特权

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

本版积分规则

852

主题

11757

帖子

5

粉丝