ST意法半导体
直播中

李桂英

8年用户 1454经验值
私信 关注
[问答]

STM32F103C8T6如何在运行时更新DMA?

我的问题是关于 STM32F103C8T6(blue Pill) 中的 HAL 库,我刚开始使用 stm32,我对 arduino 很了解。
我正在尝试为单相逆变器制作正弦 PWM。为此,我需要 timer1 的通道 1 来生成互补的 pwm 信号,我已经使用 DMA(占空比数组)完成了该信号,以改变占空比。
我用过:
HAL_TIM_PWM_Start_DMA(&htim1, TIM_CHANNEL_1, (uint32_t *) 正弦缓冲器, 60);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
产生脉宽调制。
但此循环 DMA 缓冲区包含仅生成 100% 正弦幅度的值。(最大占空比)。
所以为了对项目实施反馈,我必须更新 DMA 数组值(到初始值的某个百分比)
现在我不知道如何实施它,
如果有一种方法,例如 CCR = ( array[x] * percentage)
或任何其他方法到多个 DMA 数组值(1 到 100%)。
我将从模拟引脚读取百分比。



回帖(1)

高桂清

2022-12-6 14:49:37
通常,您使用两倍大的 DMA 数组。在 Half Transfer 中断中,您可以更新前半部分,在 Transfer Complete 中断中更新后半部分。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分