
上期在TIM定时器上实现了PWM脉冲输出,本次就换成使用DMA方式实现PWM脉冲。通过DMA方式可以实现任意个不同占空比的脉冲。 下面是定时器的DMA设置。通过Add添加DMA,这里最多只能添加3路控制。这里是通过RAM内存设置的占空比数据发送到TIM的外设输出PWM占空比,所以传输内存到外设方向。 接着是内存地址自增,外设地址按半字宽度,内存地址随便BYTE,HALFWORD,或者WORD宽度都行,就是定义缓存的时候要匹配好字节宽度。这里内存使用BYTE宽度,定义的时候使用uint8_t buff[],这样可以节省内存。内存自增是按对齐的宽度增加地址的。 设置完成后生成代码。 接下来实现DMA方式发送增加代码: uint8_t pwmch1[128]; 定义内存缓存 volatile uint8_t pwm_lock = 0; 定义DMA发送完成标识。 在TIM定时器DMA发送完成中回调函数中设置标志。 接下来在主函数中实现发送函数。在缓存中设置每个PWM脉冲的占空比需要的计数值,然后调用HAL_TIM_PWM_Start_DMA(&htim3,TIM_CHANNEL_1,(uint32_t *)pwmch1,128); 实现DMA发送。后面while(pwm_lock);为等待DMA发送完成。 接下来看看DMA发送的效果。可以看到捕捉的GPIO与预期的PWM占空比一致。 |
有奖直播 | 超性价比入门级MCU:STM32C0全新子产品线深度解读
【STM32C0测评】Nucleo-C092开发板驱动DS1302实验
【NUCLEO-STM32U385RG开发板测评】03 与PC实现shell的交互
【STM32峰会观看直播获奖】晒奖品
STM32C071RB外部中断控制小灯点亮熄灭
STM32C071RB实现串口收发功能
【STM32C071RBT6测评】——PWM输出测试:实现一个呼吸灯
NUCLEO-C071RB评测7_UART不定长数据收发的再测试
【STM32C0评测】C071:USB的使用
【STM32C0评测】C071:IIC的使用