当前位置: 首页 > ai >正文

【CS32L015C8T6】配置单片机PWM输出(内附完整代码及注释)

目录

前言:

一、CS32L015中定时器及PWM硬件资源介绍:

二、以CS32L015为例配置PWM步骤:

三、完整代码及注释

四、如果这篇文章能帮助到你,请点个赞鼓励一下吧ξ( ✿>◡❛)~


前言:

        CS32L015 是一款内嵌 32 位 ARM® Cortex®-M0+内核的超低功耗微控制器,最高可运行在 24MHz,内置 64K 字节的嵌入式 Flash,8K 字节的 SRAM,集成了 12 位 1Msps 高精度 SAR 型 ADC、RTC、比较器、运算放大器、多路 UART、SPI、I2C、OWI 和 PWM 等丰富的外设接口,具有高整合度、高抗干扰、高可靠性的特点。

        当然,CS32L015最大的特点是性价比高,价格优惠使得它成为许多嵌入式产品的优先选择 。

一、CS32L015中定时器及PWM硬件资源介绍:

        - 3 个 16 位高级控制定时器 TIM1、7、8,,每个定时器支持 4 路比较输出/输入捕获/PWM 输出,其中 3 个 通道支持死区可控的互补 PWM 输出         。

        - 4 个 16 位通用定时器,每个定时器支持 4 路

比较输出/输入捕获/ PWM 输出

        - 1 个 16 位可编程数字阵列(PCA),支持 5 路输

入捕获/比较输出,PWM 输出

        - 2 个 16/32 位基础定时器/计数器

        - 1 个 16 位低功耗定时器

        - 1 个自动唤醒定时器(AWT)

        - 1 个独立看门狗定时器 (FWDT)

        - 1 个窗看门狗定时器 (WWDT):

        - 1 个系统时间定时器: 24 位自减型计数器

二、以CS32L015为例配置PWM步骤:

PWM配置步骤:

  1. 开启GPIO和TIM的RCC使能
  2. 初始化GPIO(选择复用功能)
  3. 初始化TIM
  4. 初始化TIMOC
  5. 开启TIM的PWM输出

三、完整代码及注释

TIM_HandleTypeDef htim7 = {0};	//PWM 输出TIM7CH1,对应R_PWM
/*****************************************************************************
[函数名称]MX_TIM7_MspInit
[函数功能]定时器7GPIO初始化
[参    数]
[备    注]
*****************************************************************************/
void MX_TIM7_MspInit()
{GPIO_InitTypeDef GPIOx = {0};		//创建GPIO的结构体__HAL_RCC_GPIOA_CLK_ENABLE();		//开启GPIOA时钟, PA3GPIOx.Pin = R_PWM_Pin;					//GPIO端口GPIOx.Mode = GPIO_MODE_AF;			//开启GPIO复用功能GPIOx.Alternate = GPIO_AF_MODE_3;	//配置GPIO复用功能模式GPIOx.OpenDrain = GPIO_PUSHPULL;	//配置推挽输出GPIOx.Pull = GPIO_NOPULL;				//无上拉电阻GPIOx.Debounce.Enable = GPIO_DEBOUNCE_DISABLE;	//关闭按键抖动GPIOx.DrvStrength = GPIO_DRV_STRENGTH_HIGH;			//强驱动GPIOx.SlewRate = GPIO_SLEW_RATE_HIGH;		//高速度HAL_GPIO_Init( R_PWM_GPIO_Port, &GPIOx );	//GPIO初始化
}/*****************************************************************************
[函数名称]MX_TIM7_Init
[函数功能]定时器7配置PWM初始化
[参    数]
[备    注]输出TIM7CH1,对应R_PWM,PA3
*****************************************************************************/
void MX_TIM7_Init()
{MX_TIM7_MspInit();	//定时器7配置GPIO__HAL_RCC_TIM7_CLK_ENABLE();	//开启TIM定时器的时钟使能htim7.Instance = TIM7;				//配置TIM7定时器htim7.Channel = TIM_CHANNEL_1;	//配置通道1htim7.Init.Period = 1000 - 1;		//配置ARR寄存器,控制周期频率htim7.Init.Prescaler = 24;			//预分频系数htim7.Init.CounterMode = TIM_COUNTERMODE_UP;		//计数模式,向上计数htim7.Init.ClockDivision = 0;		//时钟不分频htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;	//自动重装开启htim7.Init.RepetitionCounter = 0;	//自动重装值为0HAL_TIM_PWM_Init(&htim7);	//定时器7初始化TIM_OC_InitTypeDef htimx_OC = {0};	//OC配置htimx_OC.OCMode = TIM_OCMODE_PWM1;	//配置OCMODE的模式htimx_OC.Pulse = 500;		//配置占空比htimx_OC.OCPolarity = TIM_OCPOLARITY_LOW;		//配置高低电平HAL_TIM_PWM_ConfigChannel( &htim7, &htimx_OC, TIM_CHANNEL_1 );	//初始化HAL_TIM_PWM_Start( &htim7, TIM_CHANNEL_1 );
}

四、如果这篇文章能帮助到你,请点个赞鼓励一下吧ξ( ✿>◡❛)~

http://www.xdnf.cn/news/19991.html

相关文章:

  • rh134第二章复习总结
  • 0904 类的继承
  • 【前端:Html】--5.进阶:APIs
  • 遇享会—金湾读书会—第四期—你好,陌生人——20250823
  • 【FPGA】单总线——DS18B20
  • 单向链表的一些基本操作(Java)
  • Python可视化93阅兵武器进化
  • Git常用命令大全:高效开发必备
  • 基于SpringBoot的家政保洁预约系统【2026最新】
  • CSDN 与 掘金 高效学习指南
  • 微信支付--在线支付实战,引入Swagger,定义统一结果,创建并连接数据库
  • [Linux] Linux标准块设备驱动详解:从原理到实现
  • 2025年数学建模国赛E题超详细解题思路
  • 【读书笔记】《好奇心》
  • Spring Cloud LoadBalancer 核心原理
  • 开关电源——只需这三个阶段,从电源小白到维修大神
  • 什么是基于AI的智能RPA?
  • 传统装修行业数字化转型:如何通过GEO工具实现300%业绩增长?
  • QT面经(含相关知识)
  • 【面试题】如何构造排序模型训练数据?解决正负样本不均?
  • 机器学习中决策树
  • LeetCode 48 - 旋转图像算法详解(全网最优雅的Java算法
  • 安全与效率兼得:工业控制系统如何借力数字孪生实现双赢?
  • CPTS-Manager ADCS ESC7利用
  • HTML图片标签及路径详解
  • 代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字
  • freertos下printf(“hello\r\n“)和printf(“hello %d\r\n“,i)任务堆栈消耗有何区别
  • 金贝 KA Box 1.18T:一款高效能矿机的深度解析
  • Python 第三方自定义库开发与使用教程
  • Redis是单线程的,为啥那么快呢?经典问题