【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配置步骤:
- 开启GPIO和TIM的RCC使能
- 初始化GPIO(选择复用功能)
- 初始化TIM
- 初始化TIMOC
- 开启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 );
}