完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
直接就用PWM,或者定时器
|
|
|
|
用PWM或者用定时器来模拟。
|
|
|
|
|
|
|
|
你要想产生方波, 可以使用硬件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(脉冲宽度调制器)。。。
|
|
|
|
用定时器就可以了,
|
|
|
|
谢谢楼主!谢谢楼主的楼主分享!学习了!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 04:01 , Processed in 0.764061 second(s), Total 91, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号