金牌会员
- 积分
- 1790
- 金钱
- 1790
- 注册时间
- 2018-3-26
- 在线时间
- 294 小时
|
33金钱
本帖最后由 htao 于 2021-6-23 16:43 编辑
如图,输出可控的脉冲数之后,电平的状态很随机,怎么修改配置来保证输出之后,稳定在低电平图中写错了,是1MHZ 脉冲
在初始化中,也修改过几个部分,也没有变化
不太理解DMA DMA_InitStructure.DMA_PeripheralBaseAddr 外设基地址 和 DMA_InitStructure.DMA_MemoryBaseAddr 内存基地址具体的作用。
这个过程复盘一下,
首先初始化完,调用 TIM2_Dma_Pwm_Pulse_Output_Set(8-1,9 - 1,50,1000);
- void TIM2_Dma_Pwm_Pulse_Output_Set(u16 arr,u16 psc,u8 zhankongbi_temp,u16 geshu)
- {
- TIM_SetAutoreload(TIM2,arr); //设置重装载寄存器
- TIM_PrescalerConfig(TIM2,psc,TIM_PSCReloadMode_Immediate); //设置定时器时钟分频,立即生效
- DutyCycle1=(arr+1)*(100-zhankongbi_temp)/100; //计算占空比
- TIM_SetCompare1(TIM2,DutyCycle1); //占空比填入比较寄存器
- DMA_Cmd(DMA1_Channel2, DISABLE); //DMA失能才能设置
- DMA_SetCurrDataCounter(DMA1_Channel2,geshu+1); //设置DMA长度,即脉冲数量
- DMA_Cmd(DMA1_Channel2, ENABLE); //开启
- TIM_SetCounter(TIM2, 0); //确保定时器计数归零
- TIM_Cmd(TIM2, ENABLE); //开启
- }
复制代码- TIM_SetAutoreload(TIM2,arr); //设置重装载寄存器
复制代码 8-1 代表 计数到8 溢出一次。
- TIM_PrescalerConfig(TIM2,psc,TIM_PSCReloadMode_Immediate); //设置定时器时钟分频,立即生效
复制代码
9-1 预分配就是 72 / 9 = 8MHZ ,就是0.125us 计数一次。
- DutyCycle1=(arr+1)*(100-zhankongbi_temp)/100; //计算占空比
复制代码 DutyCycle1 = (7+1)*0.5 = 4
- TIM_SetCompare1(TIM2,DutyCycle1); //占空比填入比较寄存器
复制代码 改变CCR1比较寄存器,也就是在PWM 模式下,计数时小于 CCR1 时,输出初始化 时设定的有效电平TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
大于CCR1时输出无效电平, (这里可能正好相反,不过没什么差异)
- DMA_Cmd(DMA1_Channel2, DISABLE); //DMA失能才能设置
- DMA_SetCurrDataCounter(DMA1_Channel2,geshu+1); //设置DMA长度,即脉冲数量
- DMA_Cmd(DMA1_Channel2, ENABLE); //开启
复制代码 这里设置DMA 传输长度,另传输长度到了就产生中断。
- TIM_SetCounter(TIM2, 0); //确保定时器计数归零
- TIM_Cmd(TIM2, ENABLE); //开启
复制代码 开始。
上面个人的理解应该是没什么问题,问题是,这个跟,以下两个基地址设置是有什么关系。
- DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&TIM2->CCR1; //DMA外设基地址
- DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&DutyCycle1; //DMA内存基地址
复制代码
希望路过的大佬,指点一下,不胜感激。
附上工程
F103.zip
(4.28 MB, 下载次数: 29)
|
最佳答案
查看完整内容[请看2#楼]
问题解决:之前想的是把占空比设置成0,应该就会保持低电平,实际上没有,还是有些结束的时候是高电平。
TIM_SetCompare1(TIM2, 0);
然后修改成,在DMA中断的时候,把占空比修改成 100,就保持了低电平了。
TIM_SetCompare1(TIM2, 100);
|