gd32f470的定时器9通过dma输出pwm脉冲,代码怎么写
时间: 2023-07-28 14:11:59 浏览: 300
以下是使用定时器9和DMA输出PWM脉冲的示例代码:
```c
#include "gd32f4xx.h"
#define TIMER9_PERIOD 999 // PWM周期,单位为计数值
#define PWM_DUTY_CYCLE 500 // PWM占空比,单位为计数值
uint16_t pwm_data = PWM_DUTY_CYCLE; // PWM脉冲数据
void timer9_init(void)
{
rcu_periph_clock_enable(RCU_TIMER9); // 使能定时器9时钟
timer_deinit(TIMER9); // 复位定时器9
timer_oc_parameter_struct timer_ocinitpara;
timer_oc_struct_para_init(&timer_ocinitpara);
timer_ocinitpara.oc_mode = TIMER_OC_MODE_PWM0; // PWM模式0
timer_ocinitpara.oc_polarity = TIMER_OC_POLARITY_HIGH; // 输出极性为高
timer_ocinitpara.oc_pulse = PWM_DUTY_CYCLE; // PWM脉冲宽度
timer_output_channel_config(TIMER9, TIMER_CH_0, &timer_ocinitpara); // 配置TIM9_CH0为PWM输出
timer_auto_reload_value_config(TIMER9, TIMER9_PERIOD); // 配置PWM周期
timer_enable(TIMER9); // 启动定时器9
}
void dma_init(void)
{
rcu_periph_clock_enable(RCU_DMA0); // 使能DMA时钟
dma_deinit(DMA0, DMA_CH3); // 复位DMA0_CH3
dma_parameter_struct dma_init_struct;
dma_struct_para_init(&dma_init_struct);
dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL; // 存储器到外设
dma_init_struct.memory_addr = (uint32_t)&pwm_data; // 存储器地址为pwm_data
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; // 存储器地址自增
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT; // 存储器数据宽度为16位
dma_init_struct.number = 1; // DMA传输次数为1
dma_init_struct.periph_addr = (uint32_t)&TIMER_CAR(TIMER9); // 外设地址为定时器9的自动重载寄存器地址
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; // 外设地址不自增
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT; // 外设数据宽度为16位
dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH; // DMA优先级为最高
dma_single_data_parameter_config(DMA0, DMA_CH3, &dma_init_struct); // 配置DMA0_CH3
dma_channel_enable(DMA0, DMA_CH3); // 启动DMA0_CH3
}
int main(void)
{
timer9_init(); // 初始化定时器9
dma_init(); // 初始化DMA
while(1);
}
```
在以上代码中,我们使用了定时器9和DMA实现了输出PWM脉冲。具体实现步骤如下:
1. 初始化定时器9:启用定时器9时钟,复位定时器9,配置TIM9_CH0为PWM输出,配置PWM周期为TIMER9_PERIOD,启动定时器9。
2. 初始化DMA:启用DMA时钟,复位DMA0_CH3,配置DMA传输方向为存储器到外设,存储器地址为pwm_data,存储器地址自增,存储器数据宽度为16位,DMA传输次数为1,外设地址为定时器9的自动重载寄存器地址,外设地址不自增,外设数据宽度为16位,DMA优先级为最高,配置DMA0_CH3,启动DMA0_CH3。
在实际应用中,我们可以通过修改pwm_data的值来改变PWM脉冲的占空比,从而实现PWM输出的调节。
阅读全文
相关推荐
















