目錄
前言:
一、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 );
}