沁恒CH32V307使用记录:使用TIM输出PWM信号

这篇具有很好参考价值的文章主要介绍了沁恒CH32V307使用记录:使用TIM输出PWM信号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的

使用TIM输出PWM信号是单片机中比较常用的一个功能。这篇文章将对CH32V307中相关内容进行说明。

本文使用沁恒官方的开发板 (CH32V307-EVT-R1沁恒RISC-V模块MCU赤兔评估板) 进行演示。

基础说明

CH32V307拥有多个定时器,只有通用定时器和高级定时器支持PWM输出功能,需要注意的是不同的定时器默认可用时钟源是不同的:
沁恒CH32V307使用记录:使用TIM输出PWM信号,RTOS与单片机相关,单片机,嵌入式硬件,沁恒,CH32V307,PWM

使用TIM输出PWM信号总的来说操作上分为下面几个部分:

  • 初始化TIM和输出PWM信号的GPIO口的时钟;
  • 配置输出PWM信号的GPIO口为复用输出模式;
  • 配置TIM基本定时参数;
  • 配置PWM输出的通道与参数;

沁恒官方提供了库函数用于操作TIM,主要是 ch32v30x_tim.hch32v30x_tim.c 两个文件,前者中声明了提供给用户调用的函数以及相关的枚举和宏定义类型等。

使用TIM输出PWM信号使用中涉及的原理可以参考下面文章中的基础说明部分:
《使用HAL库开发STM32:Timer基础说明与定时功能使用》
《使用HAL库开发STM32:使用Timer输出PWM信号》

使用例程

CH32V307官方的PWM例程中使用的是TIM1,我这里使用TIM4进行演示,两者使用方式基本上是差不多的,下面是测试代码:

#include "debug.h"

// 初始化GPIO、TIM、PWM,使用见下面main函数
void TIM4_PWMOut_Init(u16 psc, u16 arr, u16 ccp) {
    // 初始化时钟
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4, ENABLE);

    // 初始化 TIM4_CH1引脚 (PB6)
    GPIO_InitTypeDef GPIO_InitStructure = { 0 };
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( GPIOB, &GPIO_InitStructure);

    // 初始化 TIM4
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure = { 0 };
    TIM_TimeBaseInitStructure.TIM_Period = arr;         // 计数周期(以TIM时钟分频后的时钟最为计数源)
                                                        // 该值为9表示计数10次为一个周期,49表示计数50次为一个周期,依此类推
    TIM_TimeBaseInitStructure.TIM_Prescaler = psc;      // 分频系数(对TIM时钟进行分频)
                                                        // 该值为0表示不分频,1表示2分频,2表示3分频,依此类推
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit( TIM4, &TIM_TimeBaseInitStructure);

    TIM_ARRPreloadConfig( TIM4, ENABLE);                // 使能arr预装载,如果需要TIM启用的情况下修改计数周期,那么通常使能预装载会比较安全

    // 初始化 TIM4_CH1 PWM
    TIM_OCInitTypeDef TIM_OCInitStructure = { 0 };
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = ccp;                // 比较参数,计数值与该值比较,来改变PWM通道输出电平
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init( TIM4, &TIM_OCInitStructure);

    // TIM_CtrlPWMOutputs(TIM4, ENABLE);                // 高级定时器需要将这个使能才能输出PWM

    TIM_OC1PreloadConfig( TIM4, TIM_OCPreload_Disable); // 使能ccr1预装载,如果需要PWM启用的情况下修改比较参数,那么通常使能预装载会比较安全


    TIM_Cmd( TIM4, ENABLE);                             // 使能定时器
}

int main(void) {
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);
    printf("ChipID:%08x\r\n", DBGMCU_GetCHIPID());
    TIM4_PWMOut_Init(96 - 1, 1000 - 1, 800);            // 默认配置下时钟为96MHz,对时钟源96分频,即TIM计数时钟为1MHz
                                                        // 计数周期设置为1000,结合上条每次计数为1ms,相当于频率为1000Hz
                                                        // 根据比较模式和PWM模式设置,以及上面的参数设置,这里输出的PWM信号的占空比为80%

    while(1) {
        Delay_Ms(2500);
        TIM_SetCompare1( TIM4, 500);                    // 修改CCR1的值,此处修改后ARR为1000 - 1, 频率为1kHz,CCR1为500,占空比为50%
        Delay_Ms(2500);
        TIM_SetCompare1( TIM4, 200);                    // 修改CCR1的值,此处修改后ARR为1000 - 1,频率为1kHz, CCR1为200,占空比为20%
        Delay_Ms(2500);
        TIM_SetAutoreload( TIM4, 300 - 1);              // 修改ARR的值,此处修改后ARR为300 - 1, 频率为3.33kHz,CCR1为200,占空比为66.67%
        Delay_Ms(2500);
        TIM_SetAutoreload( TIM4, 1000 - 1);             // ARR设置为初始值
        TIM_SetCompare1( TIM4, 800);                    // CCR1设置为初始值
    }
}

上面代码演示如下,注意观察示波器波形下面的 频率、周期和占空比 :
沁恒CH32V307使用记录:使用TIM输出PWM信号,RTOS与单片机相关,单片机,嵌入式硬件,沁恒,CH32V307,PWM

总结

使用TIM输出PWM信号操作比较简单,只要了解相关原理基本上就能立马上手使用。文章来源地址https://www.toymoban.com/news/detail-585520.html

到了这里,关于沁恒CH32V307使用记录:使用TIM输出PWM信号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CH32V307VCT6样片申请

    官网的介绍 南京沁恒微电子股份有限公司专注于连接技术和微处理器内核研究,是一家基于自研专业接口IP、微处理器内核IP构建芯片的集成电路设计企业。公司致力于为客户提供万物互联、上下互通的芯片及解决方案,主要产品包括USB/蓝牙/以太网接口芯片和连接型/互联型

    2024年01月15日
    浏览(44)
  • 嵌入式大赛初探之-(1)CH32V307介绍

    产品特点 青稞V4F处理器,最高144MHz系统主频 支持单周期乘法和硬件除法,支持硬件浮点运算(FPU) 64KB SRAM,256KB Flash 供电电压:2.5/3.3V,GPIO单元独立供电 多种低功耗模式:睡眠、停止、待机 上/下电复位、可编程电压检测器 2组18路通用DMA 4组运放比较器 1个随机数发生器TRNG

    2024年02月10日
    浏览(42)
  • CH32V307VCT6单片机程序写入教程

    之前在沁恒微电子官网上申请了块互连型的单片机,芯片的型号是 CH32V307 ,之前在论坛上看到他们说这一块单片机和 stm32 系列的单片机差不多,正好今天板子到了我试了一下,发现真的和 stm32 差不多。 很多没有接触过stm32单片机但是白嫖到板子的朋友可能不会用这块板子,

    2024年02月01日
    浏览(40)
  • 沁恒 CH32V208(四): CH32V208 网络DHCP示例代码分析

    沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 沁恒 CH32V208(四): CH32V208 网络DHCP示例代码分析 沁恒 CH32V208(五): CH32V208 运行FreeRTOS示例的说明 CH32V208WBU6 评估板

    2024年02月04日
    浏览(59)
  • 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟

    沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 沁恒 CH32V208(四): CH32V208 网络DHCP示例代码分析 沁恒 CH32V208(五): CH32V208 运行FreeRTOS示例的说明 在介绍下面的内容

    2024年02月02日
    浏览(41)
  • 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置

    沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 沁恒 CH32V208(四): CH32V208 网络DHCP示例代码分析 沁恒 CH32V208(五): CH32V208 运行FreeRTOS示例的说明 CH32V208WBU6 评估板

    2024年02月02日
    浏览(52)
  • 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置

    沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 沁恒 CH32V208(四): CH32V208 网络DHCP示例代码分析 沁恒 CH32V208(五): CH32V208 运行FreeRTOS示例的说明 CH32V208系列是沁恒

    2024年02月02日
    浏览(37)
  • 沁恒ch32V208处理器开发(四)串口通信

    资源配置 CH32V208 系列,是基于 RISC-V 指令架构设计的 32 位 RISC 内核 MCU,根据封装的不同,可用的USART串口资源如下表所示: 且USART具有如下主要特征: (1)全双工或半双工的同步或异步通信 (2) 支持分数波特率发生器,最高 9Mbps (3)可编程数据长度、停止位长度 (4)支

    2024年02月13日
    浏览(43)
  • 沁恒ch32V208处理器开发(三)GPIO控制

    GPIO功能概述 CH32V2x 微控制器的GPIO 口可以配置成多种输入或输出模式,内置可关闭的上拉或下拉电阻,可以配置成推挽或开漏功能。GPIO 口还可以复用成其他功能。端口的每个引脚都可以配置成以下的多种模式之一: 内部结构图如下: 可以看出,IO 口内部可分为输入驱动模块

    2024年02月13日
    浏览(40)
  • STM32F4使用高级定时器(TIM1和TIM8)输出PWM问题

    STM32F4使用高级定时器(TIM1和TIM8)输出PWM时要使用TIM_CtrlPWMOutputs使能PWM输出,否则不会输出PWM波形,这一点是和通用定时器输出PWM不一样的地方,通用定时器是不用配置TIM_CtrlPWMOutputs函数的。、

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包