首页 > 其他分享 >关于使用CH32系列MCU定时器输出移相PWM波形

关于使用CH32系列MCU定时器输出移相PWM波形

时间:2023-11-28 11:35:14浏览次数:33  
标签:TimeBaseInitStructure TIM1 CH32 移相 TIM OCInitStructure GPIO MCU PWM

在定时器的输出模式中,有一种输出模式—翻转模式,通过使用该模式,可以使用一个定时器不同通道输出移相PWM波形。关于翻转模式,当核心计数器与比较捕获寄存器的值相同时,翻转该通道的电平。

使用翻转模式配置输出移相PWM波形代码如下:

/********************************** (C) COPYRIGHT *******************************
 * File Name          : main.c
 * Author             : WCH
 * Version            : V1.0.0
 * Date               : 2021/06/06
 * Description        : Main program body.
 * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
 * SPDX-License-Identifier: Apache-2.0
 *******************************************************************************/

/*
 *@Note
 PWM输出例程:
 TIM1_CH1(PA8)
 本例程演示 TIM_CH1(PA8) 引脚在 PWM模式1和PWM模式2 下,输出 PWM。

*/

#include "debug.h"

/*********************************************************************
 * @fn      TIM1_OutCompare_Init
 *
 * @brief   Initializes TIM1 output compare.
 *
 * @param   arr - the period value.
 *          psc - the prescaler value.
 *          ccp - the pulse value.
 *
 * @return  none
 */
void TIM1_PWMOut_Init(void)
{
    GPIO_InitTypeDef        GPIO_InitStructure={0};
    TIM_OCInitTypeDef       TIM_OCInitStructure={0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_TIM1, ENABLE );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( GPIOA, &GPIO_InitStructure );

    TIM_TimeBaseInitStructure.TIM_Period = 4000-1;
    TIM_TimeBaseInitStructure.TIM_Prescaler = 14400-1;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit( TIM1, &TIM_TimeBaseInitStructure);


    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
    TIM_OCInitStructure.TIM_Pulse = 0;
    TIM_OC1Init( TIM1, &TIM_OCInitStructure );
    TIM_OCInitStructure.TIM_Pulse = 1000;
    TIM_OC2Init( TIM1, &TIM_OCInitStructure );
    TIM_OCInitStructure.TIM_Pulse = 2000;
    TIM_OC3Init( TIM1, &TIM_OCInitStructure );
    TIM_OCInitStructure.TIM_Pulse = 3000;
    TIM_OC4Init( TIM1, &TIM_OCInitStructure );

    TIM_CtrlPWMOutputs(TIM1, ENABLE );
    TIM_OC1PreloadConfig( TIM1, TIM_OCPreload_Disable );
    TIM_OC2PreloadConfig( TIM1, TIM_OCPreload_Disable );
    TIM_OC3PreloadConfig( TIM1, TIM_OCPreload_Disable );
    TIM_OC4PreloadConfig( TIM1, TIM_OCPreload_Disable );

    TIM_ARRPreloadConfig( TIM1, ENABLE );
    TIM_Cmd( TIM1, ENABLE );
}
/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n",SystemCoreClock);

    TIM1_PWMOut_Init();

    while(1);
}

程序和正常配置PWM输出代码差不多,只是将PWM模式改为翻转模式,比较寄存器的值要根据移相的需求进行配置,注意大小不要超过设置的重装载值。该种方式配置输出的PWM波形占空比固定为50%。输出波形如下:

 

标签:TimeBaseInitStructure,TIM1,CH32,移相,TIM,OCInitStructure,GPIO,MCU,PWM
From: https://www.cnblogs.com/liaigu/p/17861503.html

相关文章

  • 九齐单片机IC NY8B062F SOP14 SOP16 SOP8 SOT23-6MCU芯片
    九齐单片机NY8B062F SOP14 SOP16 SOP8 SOT23-6MCU芯片一、概述九齐单片机NY8B062F是一种多功能8位单片机,采用先进的CMOS工艺,具有低功耗、高速度、高可靠性等特点。芯片内置丰富的外设和存储器资源,包括8位CPU、时钟发生器、PWM模块、I/O端口、EEPROM、RAM和Flash存储器等。适用......
  • 16位微控制器PIC24FJ256GL405-I/PT、PIC24FJ128GU408-I/PT、PIC24FJ32GB002T-I/ML(MCU)
    一、PIC24FJ256GL405-I/PT、PIC24FJ128GU408-I/PT16位微控制器PIC24FJ-GU4/GL416位微控制器(MCU)提供高达512KB的双分区闪存,支持实时无线(OTA)更新和EEPROM仿真。除了若干内核独立外设(CIP),PIC24FJ-GU4/GL4MCU还包括一个全速USB和一个支持动画的分段LCD控制器。这些器件......
  • 新品推荐|Si24R03 一款集成2.4G+RISC-V核MCU低功耗SOC芯片
    Si24R03是-款高度集成的低功耗SOC芯片,其集成了基于RISC-V核的低功耗MCU和工作在2.4GHzISM频段的无线收发器模块。MCU模块具有低功耗、LowPinCount、宽电压工作范围,集成了13/14/15/16位精度的ADC、LVD、UART、SPI.I2C、TIMER、WUP、IWDG、RTC等丰富的外设。内核采用RISC-VR......
  • 基于CH32V307的组播应用
    概述组播是主机间一对多的通讯模式,组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的组播地址,组播地址不同于单播地址,它并不属于特定某个主机,而是属于一组主机。一个组播地址表示一个群组,需要接收组播报文的接收者都加入这个群组。......
  • 基于XILINX MMCM的动态移相功能
    1、配置   2、关注一下VCO的频率,一个psen高脉冲,输出相位偏移1/56个VCO周期  3、仿真输出    描述,输入200MHz,输出1-200MHz;每一个psen移动17.8ps;输出2-200MHz相位固定不变。如下为移相操作时序图。 仿真输出:  ......
  • CH32V20x_30x系列用户选择字区域应用与操作
    来源:https://www.cnblogs.com/liaigu/p/17838776.html简介CH32V20x系列、V30x系列用户选择字区域大小为128字节,除却用户选择字信息结构用到的16字节,还剩余112字节可作为他用,用来存储相关数据等。注意剩余空间在使用时,和上述一致,若[7:0]为数据,则[15:8]为数据的反码。此外,在对剩......
  • 【WCH蓝牙系列芯片】-基于CH32V208开发板—串口USART_FLAG_TXE & USART_FLAG_TC
    -------------------------------------------------------------------------------------------------------------------------------------USART模块支持多种中断源,这里说明一下USART_FLAG_TXE和USART_FLAG_TC对应的关系。USART_FLAG_TXE--------------发送数据寄存器空表......
  • 使用 VSCode+CMake+Ninja 开发RISC-V MCU
    1.安装软件及工具1.1VSCode安装VisualStudionCode(VSCode),是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。VSCode官网VSCode官方文档官网......
  • CH32FV32系列进入STOP及STANBY模式电流大的问题
    关于CH32FV32低功耗模式(STOP及STANDBY)。 我们EVT例程中将所有IO均配置成下拉输出而防止外部器件漏电流引起功耗增大。但是有的客户进入低功耗后需要IO电平保持从而出现了进入STOP/STANBY模式后电流还是很大(STOP几百个uA STANDBY一百多uA)。手册中低功耗电流如下: 对此通......
  • CH32V307 使用PLL2配置系统时钟
    在进行系统时钟配置时,可以选择HSI、HSE、PLL作为系统时钟来源。而PLL时钟来源有几下几种,如下图: 以下为CH32V307时钟树框图,如下图: 关于使用HSE或HSI作为系统时钟,在CH32V307EVT都有相应例程,在system_ch32v30x.c文件中直接使用相关宏定义即可,如下图: 本篇文章主要讲解使......