
上期在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占空比一致。 |
NUCLEO-C071RB评测4_模拟和硬件SPI驱动3.5寸TFT彩屏
NUCLEO-C071RB评测3_PWM测试
NUCLEO-C071RB评测1_GPIO测试
【STM32C0评测】+NUCLEO-C071 PWM输出测试
【STM32C0测评】Nucleo-C092开发板功耗测试
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(软件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件软件IIC一网打尽)
【STM32C0测评】Nucleo-C092开发板USART串口测试
【STM32C0评测】汇总以及视频讲解