怎么样用stm32产生占空比的矩形方波驱动

2019-07-14 23:49发布

最近在做无线照明通信系统,用led发出的光把信号发送出去,现在想用STM32产生占空比根据输入信号变化的矩形方波驱动led,想请教下这个矩形方波怎样产生?tiM_OCInitStructure.TIM_Pulse 怎样和输入信号建立联系?[size=11.818181991577148px]请大牛们帮帮忙





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
surround
1楼-- · 2019-07-15 06:33
直接就用PWM,或者定时器  恩我是想用PWM,比方发ABC,那么每个字母代表的CCRx的值不一样,怎样把他们建立联系?
笔画张
2楼-- · 2019-07-15 10:57
你要想产生方波, 可以使用硬件PWM, 或者使用一个定时器,定时器到的时候GPIO置高电平,定时器再次到的时候,再置低电平, 一次看定时器到的次数,从而产生一个你需要的方波信号。
这个应该很好实现,就是用timer作为定时,产生一个自己想要的波形
用PWM,不同的字母有不同的占空比,,至于那个字母用什么占空比,自己定义,类似于密码,接收方要解码,就需要你的密码本
xuhailin110
3楼-- · 2019-07-15 11:07
        while(1)
        {
                        delay_ms(100);
                if(dir)pwmval+=200;
                else pwmval-=200;

                if(pwmval>2000)dir=0;
                if(pwmval==200)dir=1;       
                                                                                                 
                TIM->CRR2=pwmval;}
void TIM3_PWM_Init(u16 arr,u16 psc)
{                                                          
        //此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1;       //TIM3时钟使能   

        GPIOA->CRH&=0XFFFFFFF0;//PA8输出
        GPIOA->CRH|=0X00000004;//浮空输入
                 
        GPIOA->CRL&=0X0FFFFFFF;//PA7输出
        GPIOA->CRL|=0XB0000000;//复用功能输出           
        GPIOA->ODR|=1<<7;//PA7上拉       

        TIM3->ARR=arr;//设定计数器自动重装值
        TIM3->PSC=psc;//预分频器不分频
       
        TIM3->CCMR1|=7<<12;  //CH2 PWM2模式                 
        TIM3->CCMR1|=1<<11; //CH2预装载使能          

        TIM3->CCER|=1<<4;   //OC2 输出使能          

        TIM3->CR1=0x8000;   //ARPE使能
        TIM3->CR1|=0x01;    //使能定时器3                                                                                   
}           
xuhailin110
4楼-- · 2019-07-15 16:10
        while(1)
        {
                        delay_ms(100);
                if(dir)pwmval+=200;
                else pwmval-=200;

                if(pwmval>2000)dir=0;
                if(pwmval==200)dir=1;       
                                                                                                 
                TIM->CRR2=pwmval;}
void TIM3_PWM_Init(u16 arr,u16 psc)
{                                                          
        //此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1;       //TIM3时钟使能   

        GPIOA->CRH&=0XFFFFFFF0;//PA8输出
        GPIOA->CRH|=0X00000004;//浮空输入
                 
        GPIOA->CRL&=0X0FFFFFFF;//PA7输出
        GPIOA->CRL|=0XB0000000;//复用功能输出           
        GPIOA->ODR|=1<<7;//PA7上拉       

        TIM3->ARR=arr;//设定计数器自动重装值
        TIM3->PSC=psc;//预分频器不分频
       
        TIM3->CCMR1|=7<<12;  //CH2 PWM2模式                 
        TIM3->CCMR1|=1<<11; //CH2预装载使能          

        TIM3->CCER|=1<<4;   //OC2 输出使能          

        TIM3->CR1=0x8000;   //ARPE使能
        TIM3->CR1|=0x01;    //使能定时器3                                                                                   
}           
xuhailin110
5楼-- · 2019-07-15 19:44
 精彩回答 2  元偷偷看……
190471306
6楼-- · 2019-07-15 23:41
stm32上不是有PWM(脉冲宽度调制器)。。。

一周热门 更多>