电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
用STM32的定时器TIM1产生四路两两互补的PWM波,用TIM2的中断来改变TIM1的输出波形的比较值
已解决
73482
个问题
已帮助
5993
位优秀工程师
用STM32的定时器TIM1产生四路两两互补的PWM波,用TIM2的中断来改变TIM1的输出波形的比较值
liubo
2021-03-31
浏览量:901
用STM32的定时器TIM1产生四路两两互补的PWM波,用TIM2的中断来改变TIM1的输出波形的比较值,时序图如下,示波器的波形图为:用TIM1的CH1CH2CH1NCH2N来产生A、B、C、D代码为
void TIM1_PWM_Init(u16 arru16 psc)
{
RCC->APB2ENR|=1<<11; //使能TIM1的时钟
// RCC->APB2ENR|=0<<1; //使能复用时钟
RCC->APB2ENR|=1<<2; //使能GPIOA的时钟CH1-PA9 CH2-PA10 CH1N-PB13 CH2N-PB14
RCC->APB2ENR|=1<<3; //使能GPIOB的时钟
GPIOA->CRH&=0XFFFFFF00; //PA9为复用推挽输出,最大速度50MHZ ,必须为复用推挽输出!!!
GPIOA->CRH|=0X000000BB;
GPIOB->CRH&=0XF00FFFFF; //PA9为复用推挽输出,最大速度50MHZ ,必须为复用推挽输出!!!
GPIOB->CRH|=0X0BB00000;
TIM1->CCR1=6199;
TIM1->CCR2=7199;
TIM1->ARR=arr; //设定计数器自动重装值
TIM1->PSC=psc; //预分频器不分频
// TIM1->BDTR|=0xCD; // 死区时间设定
TIM1->CCER|=1<<0;//TIM1CH1通道开关使能
TIM1->CCER|=1<<2;//TIM1CH1N 通道开关
TIM1->CCER|=1<<4;
TIM1->CCER|=1<<6;
TIM1->CCMR1|=7<<4; //CH1 PWM2模式
TIM1->CCMR1|=1<<3; //CH1预装载使能
TIM1->CCMR1|=7<<12; //CH2 PWM2模式
TIM1->CCMR1|=1<<11; //CH1预装载使能
TIM1->CR1|=0X80;// CR1 ARPE自动重装载预装载允许位使能
// TIM1->BDTR=0;
TIM1->BDTR=0x80;
TIM1->BDTR|=1<<15; //刹车使能位置1,开启所有输出通道
// TIM1->CR1|=0X01; //使能定时计数器1
}
void TIM2_Init(u16 arru16 psc )
{
RCC->APB1ENR|=1<<0; //使能TIM2的时钟
TIM2->CR1&=0XFFEE; //计数器向上计数
TIM2->CR1|=0X0001;
TIM2->ARR=arr;
TIM2->PSC=psc;
TIM2->DIER|=1<<0; //允许更新中断
MY_NVIC_Init(20TIM2_IRQn2); //抢占优先级2,子优先级2,组2
}
void TIM2_IRQHandler(void)
{
static u8 cnt=0;
if(TIM2->SR&0X0001) //产生溢出中断
{
if (cnt==0)
{
TIM2->ARR=7200; //定时器中断时间设置为100us
TIM2->PSC=0;
TIM1->CCR1|=1<<0;
TIM1->CCR1=6199; //6199
TIM1->CCR2=7199;
cnt=1;
}
if(cnt==1)
{
TIM2->ARR=7200; //定时器中断时间设置为800us
TIM2->PSC=7;
TIM1->ARR=7200; //定时器中断时间设置为800us
TIM1->PSC=7;
TIM1->CR1&=~(1<<0);
TIM1->CCR1=7199;
TIM1->CCR2=7199;
cnt=2;
LED1=!LED1;
}
if (cnt==2)
{
TIM2->ARR=7200; //定时器中断时间设置为100us
TIM2->PSC=0;
TIM1->ARR=7200; //定时器中断时间设置为100us
TIM1->PSC=0;
TIM1->CR1|=1<<0;
TIM1->CCR1=7199;
TIM1->CCR2=4500;
cnt=0;
}
}
TIM2->SR&=~(1<<0); //清楚中断标志位
}
感觉没有按照我的中断来输出波形,这是为什么呀,要实现我时序那样的波形应该写代码呀
显示全部
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
一笔之名也
没有按你的要求,你的要求是什么呢,说明白啊,这样才能根据程序看出问题的。或你自己测个波形说明
发布于
2021-04-08
举报
评论 0
0
0
其他答案
数量:
2
耳根的耳根
都是用的寄存器操作,无法判断,需要对底层寄存器有一定的了解才可以的,为什么不用库呢?
发布于
2021-03-31
举报
评论 0
0
0
莱克迷KW
你最好是发一下示波器的波形吧,这通过波形上就能看出是哪个中断的问题了
发布于
2021-04-02
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
用STM32的定时器TIM1产生四路两两互补的PWM波,用TIM2的中断来改变TIM1的输出波形的比较值
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: