怎么样用stm32产生占空比的矩形方波驱动
直接就用PWM,或者定时器
用PWM或者用定时器来模拟。
直接就用PWM,或者定时器 恩我是想用PWM,比方发ABC,那么每个字母代表的CCRx的值不一样,怎样把他们建立联系?
你要想产生方波, 可以使用硬件PWM, 或者使用一个定时器,定时器到的时候GPIO置高电平,定时器再次到的时候,再置低电平, 一次看定时器到的次数,从而产生一个你需要的方波信号。
这个应该很好实现,就是用timer作为定时,产生一个自己想要的波形
用PWM,不同的字母有不同的占空比,,至于那个字母用什么占空比,自己定义,类似于密码,接收方要解码,就需要你的密码本
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
}
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
}
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
}
stm32上不是有PWM(脉冲宽度调制器)。
用定时器就可以了,