电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
stm32f103 TIM3 UG位更新
已解决
73482
个问题
已帮助
5993
位优秀工程师
stm32f103 TIM3 UG位更新
11
2013-04-26
浏览量:1810
stm32 TIM3 工作于PWM1,向上计数,软件仿真中:中断函数里更改CCR1的值,然后再软件设置UG位产生更新,将CCR1的值更新到影子寄存器,发现CNT清零了,但是为什么CCR1影子寄存器的值没有被更新啊?谢谢了 void TM3_PWM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //比较捕获模式初始化 //基本的初始化 TIM_TimeBaseStructure.TIM_Prescaler=0; //PSC预分频 不分频72MHZ TIM_TimeBaseStructure.TIM_Period=900; //自动重载寄存器 0到999 1000次一个周期 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1 ; //不分频 见TIMx_CR1寄存器位9 位8 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1 ; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=CCR1_Val; //设定比较值 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC1Init(TIM3,&TIM_OCInitStructure); //初始化了通道1 TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_ITConfig(TIM3,TIM_IT_CC1,ENABLE); //使能匹配中断 //使能TM3重载寄存器ARR TIM_ARRPreloadConfig(TIM3,ENABLE); //使能TM3 TIM_Cmd(TIM3,ENABLE); } void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3,TIM_IT_CC1)==SET) { TIM_ClearITPendingBit(TIM3,TIM_IT_CC1); //软件清0 CCR1_Val++; TIM_SetCompare1(TIM3,CCR1_Val); TIM_ClearFlag(TIM3,TIM_FLAG_Update); TIM_GenerateEvent(TIM3,TIM_EventSource_Update); if(CCR1_Val==998) CCR1_Val=500; } }
显示全部
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
gtrjolin1990
TIM_ClearFlag(TIM3,TIM_FLAG_Update);这句不对,要清除的是cc1的标记
发布于
2013-04-26
举报
评论 0
0
0
其他答案
数量:
9
秀文
影子寄存器你是看不到的
发布于
2013-04-26
举报
评论 0
0
0
zhengxingli
这个不是影子寄存器吗?可是每次我进中断CNT的值几乎一样,说明CCR1没有更新到影子寄存器中啊
发布于
2013-04-26
举报
评论 0
0
0
力洪
亲,这么多寄存器你能操作过来啊!果断用库吧!必然趋势!
发布于
2013-04-28
举报
评论 0
0
0
hongni
你的理解有点偏差,CCR1是通道值他的改变影响占空比,影子寄存器是一个后台寄存器,看不到,只在开启了预装载时起作用,它实际上只起一个缓冲的作用.开启预装载后通道值写入新数值后pwm并不马上起作用,这是为了防止出现意外的逻辑.那么什么时候起作用最合适呢?就是在每个pwm的起始点,此时一定是无效电平这是更新通道值是绝对没问题的.pwm的起始点也就是定时器的回0点.这部分是不需要额外操作的.
UG位的引入是为了在程序中除定时器回零以外的情况要触发更新中断而设立的,你的应用中用不着它.
发布于
2013-04-28
举报
评论 0
0
0
11
开启预装载,直接写通道值,别的都是硬件完成的你不需要管它.
发布于
2013-04-28
举报
评论 0
0
0
xiamx
用的是库函数啊
发布于
2013-04-28
举报
评论 0
0
0
11
看错了!悲剧
,建议楼主编辑下吧,这样看好累哦!用添加代码的形式贴进来!
发布于
2013-04-28
举报
评论 0
0
0
人生就一个字
您好,我现在有点钻牛角尖了,我是想在使能预装载的情况下,看看软件置位UG到底能不能更新影子寄存器...有点乱了...
发布于
2013-04-28
举报
评论 0
0
0
d6372b97c2fc28a9
怎么都喜欢贴这么长的代码
发布于
2019-03-13
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
stm32f103 TIM3 UG位更新
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: