OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2605|回复: 4

PWM输出问题

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-3-13
在线时间
5 小时
发表于 2016-3-13 16:31:00 | 显示全部楼层 |阅读模式
1金钱
#include "pbdata.h"

void RCC_Configuration(void);
void GPIO_Configuration(void);
void TIM3_Configuration(void);
void NVIC_Configuration(void);
void EXTI_Configuration(void);
void USART_Configuration(void);

int fputc(int ch,FILE *f)
{
        USART_SendData(USART1,(u8)ch);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
        return ch;
}

int main(void)
{
    RCC_Configuration();       
    GPIO_Configuration();
    EXTI_Configuration();
    NVIC_Configuration();
         TIM3_Configuration();
    USART_Configuration();
   
         TIM_SetCompare2(TIM3,360);
        while(1)
        {
        }
   
}


void RCC_Configuration(void)
{
     SystemInit();

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
}

void GPIO_Configuration(void)
{
     GPIO_InitTypeDef GPIO_InitStructure;       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//PWM输出,Tim3_CH2对应为PA.7
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;        //外部中断
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX,PA.9
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX,PA.10
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
}

void TIM3_Configuration(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
        TIM_OCInitTypeDef TIM_OCInitStructure;


        TIM_TimeBaseStruct.TIM_Period=799;//³õÖµ
TIM_TimeBaseStruct.TIM_Prescaler=99;
        TIM_TimeBaseStruct.TIM_ClockDivision=0;
        TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);

        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OC2Init(TIM3,&TIM_OCInitStructure);
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);

        TIM_Cmd(TIM3,ENABLE);         
}


void EXTI_Configuration(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;

        EXTI_ClearITPendingBit(EXTI_Line5);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);

        EXTI_InitStructure.EXTI_Line=EXTI_Line5;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;

        EXTI_Init(&EXTI_InitStructure);
}

void NVIC_Configuration(void)
{
            NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

void USART_Configuration(void)
{
     USART_InitTypeDef USART_InitStructure;

        USART_InitStructure.USART_BaudRate=9600;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;

        USART_Init(USART1,&USART_InitStructure);
        USART_Cmd(USART1,ENABLE);
        USART_ClearFlag(USART1,USART_FLAG_TC);


}


外部中断的中断服务程序
void EXTI9_5_IRQHandler(void)
{
        u16 ReadValue=0;
        if(EXTI_GetITStatus(EXTI_Line5)==SET)
   {
                if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)==Bit_RESET)       
                {
                ReadValue =GPIO_ReadInputData(GPIOB);
                printf("%d\r\n",ReadValue);
                }
            EXTI_ClearITPendingBit(EXTI_Line5);
          delay_ms(10);
   }       
}
问题是PWM波无法输出,去掉外部中断程序后才可以输出,但是这两个应该是独立的,现在有了问题,不知道应该如何改。EXTI9_5这个通道我改为EXTI3,依然不能出波形。外部中断是由一个方波输入的,通过GPIOA_5产生下降沿时进中断程序

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2015-10-5
在线时间
27 小时
发表于 2016-3-13 16:52:35 | 显示全部楼层
原因可能是你写了中断服务函数,程序卡死在那了,因为你的PA5是浮空输入
首先是如果你要PA5产生下降沿时进入中断程序,那么PA5的模式配置应该是上拉输入GPIO_Mode_IPU;这样按键按下才会确保产生下降沿。
然后如果你的 delay_ms(10);用的是滴答定时器的话,在按键中断那不要放这个延时函数
回复

使用道具 举报

4

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2015-10-5
在线时间
27 小时
发表于 2016-3-13 16:54:52 | 显示全部楼层
可以试试用在线调试看看程序卡在哪了
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-3-13
在线时间
5 小时
 楼主| 发表于 2016-3-13 17:18:54 | 显示全部楼层
程序去掉delay了,也改成IPU输入了,在Analysis Window下运行还是没有波形
回复

使用道具 举报

4

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2015-10-5
在线时间
27 小时
发表于 2016-3-14 10:49:29 | 显示全部楼层
6274865哈哈哈 发表于 2016-3-13 17:18
程序去掉delay了,也改成IPU输入了,在Analysis Window下运行还是没有波形

Analysis Window输出的端口设置配置好了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 17:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表