STM32CubeMX使用9 配置Time4 PWM(DMA)输出

以STM32F407VGT6为例

使用Time4的通道1(PB6)和通道2(PB7)

  1. 打开一个配置好的系统时钟工程。可参考STM32CubeMX使用1 配置系统时钟

  2. 寻找通道1和通道2对应引脚PB6和PB7

  3. 打开Tim4的PWM控制引脚

  4. 详细介绍配置参数

  5. 配置DMA

  6. 生成代码

  7. 常用

    cpp 复制代码
    uint16_t pwm1_buf1[10] = {10,11,12,33,34,36,67,68,69,104};
    uint16_t pwm1_buf2[10] = {20,21,22,43,44,46,77,78,79,94};
    uint32_t dma_ch1_num = 0;//记录进入中断的次数
    uint32_t dma_ch2_num = 0;//记录进入中断的次数
    
    int main(void)
    {
        int count = 1;
        MX_DMA_Init();
        rt_thread_mdelay(1000);
        MX_TIM4_Init();
        rt_thread_mdelay(1000);
    
        HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_1, (uint32_t*)pwm1_buf1, 10);
        HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_2, (uint32_t*)pwm1_buf2, 10);
    	while (count++)
    	{
    		LOG_D("CCR1=%d, CCR2=%d  [%d:%d]\r\n", TIM4->CCR1, TIM4->CCR2,dma_ch1_num,dma_ch2_num);
    	}
    
    
    void DMA1_Stream0_IRQHandler(void)
    {
      /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
        dma_ch1_num++;
      /* USER CODE END DMA1_Stream0_IRQn 0 */
      HAL_DMA_IRQHandler(&hdma_tim4_ch1);
      /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
    
      /* USER CODE END DMA1_Stream0_IRQn 1 */
    }
    
    /**
      * @brief This function handles DMA1 stream3 global interrupt.
      */
    void DMA1_Stream3_IRQHandler(void)
    {
      /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */
        dma_ch2_num++;
      /* USER CODE END DMA1_Stream3_IRQn 0 */
      HAL_DMA_IRQHandler(&hdma_tim4_ch2);
      /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */
    
      /* USER CODE END DMA1_Stream3_IRQn 1 */
    }
    
    void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
    {
    	//如果想让dam传输完成后保存最后一个CCR值继续输出PWM,屏蔽以下即可
    	//如果想只发送一次后就关闭PWM输出,打开即可
    	#if 1
        HAL_TIM_PWM_Stop_DMA(&htim4, TIM_CHANNEL_1);  /* 传输完成后手动停止PWM */
        HAL_TIM_PWM_Stop_DMA(&htim4, TIM_CHANNEL_2);  /* 传输完成后手动停止PWM */
    	#endif
    }
相关推荐
zcmodeltech3 小时前
工程机械与矿山机械沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的露天开采-井下掘进-智慧矿山全场景联动方案
数据库·stm32·单片机·嵌入式硬件·制造·多分类
云泽8084 小时前
深入浅出 STM32(十五):多通道GPIO驱动的软件抽象与实现
stm32·单片机·嵌入式硬件
嵌入式阿蔡4 小时前
OTA 实战五(收官):量产落地 Checklist —— 版本号 / 防回滚 / 灰度 / 断点续传
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
碧海银沙音频科技研究院6 小时前
基于杰理AC7016C的GTCRN门控卷积神经网络语音增强方法
人工智能·嵌入式硬件·语音识别
遇雪长安7 小时前
STM32_BOOT未引出_串口升级系统Bootloader方案
stm32·单片机·嵌入式硬件·bootloader
dcdannycheung7 小时前
【无标题】
嵌入式硬件
自小吃多7 小时前
Capture软件原理图添加元器件笔记
笔记·嵌入式硬件
tangchao340勤奋的老年?8 小时前
AMT630C 开阳电子 RISC‑V 显示 SoC|工业级双屏驱动 MCU,带 CAN 总线,国产 HMI 控制芯片
单片机·嵌入式硬件
youshi66688 小时前
stm32-SPI通信协议、软件SPI
stm32·单片机·嵌入式硬件
振南的单片机世界8 小时前
EXTI“一线多挂”陷阱:PA0和PB0同时触发,中断函数懵了
arm开发·stm32·单片机·嵌入式硬件