上期在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占空比一致。 |
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【NUCLEO-WB09KE评测】+基于STM32CubeMX创建工程点灯
【NUCLEO-WB09KE评测】+实现读取温湿度传感器SHTC3数据
【NUCLEO-WB09KE评测】+实现串口printf打印和shell移植
【NUCLEO-WB09KE评测】使用I2C点亮一个OLED
有奖直播 | 详解最新入门级32位MCU-STM32C071
【NUCLEO-WB09KE评测】STM32WB09KE的内部BootLoader使用
新品STM32C071不简单,高达128KB闪存和24KB RAM,让成本5美元的图显系统也拥有丝滑GUI!
【NUCLEO-H533RE评测】串口Ymodem协议升级程序