stm32f103c8t6pwm控制led灯标准库
时间: 2024-12-28 10:25:15 浏览: 15
### 使用 STM32F103C8T6 标准库实现 PWM 控制 LED 灯
为了使用标准库 (Standard Peripheral Library, SPL) 实现 PWM 功能并控制 LED 的亮度,可以按照如下方法配置 TIM2 作为 PWM 输出。此过程涉及初始化定时器、设置 PWM 参数以及编写必要的函数。
#### 初始化定时器和 GPIO 配置
首先,在 `stm32f1xx_hal_msp.c` 文件中定义外设时钟使能宏:
```c
#define __TIM2_CLK_ENABLE() do { \
__IO uint32_t tmpreg; \
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\
/* Delay after an RCC peripheral clock enabling */\
tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\
} while(0)
```
接着,在主程序文件中包含头文件,并声明全局变量用于存储定时器句柄:
```c
#include "stm32f10x.h"
TIM_HandleTypeDef htim2;
```
随后进行 GPIO 和定时器的初始化操作:
```c
void MX_GPIO_Init(void){
GPIO_InitTypeDef GPIO_InitStruct;
// 启用GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
// 设置PA0为复用推挽输出模式
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
}
void MX_TIM2_PWM_Init(uint16_t freq,uint16_t dutyCycle){
// 开启TIM2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
// 定义TIM_TimeBaseInitType结构体成员参数
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 计算预分频系数
uint16_t PrescalerValue=(uint16_t)((SystemCoreClock/2)/freq)-1;
// 时间基底初始化
TIM_TimeBaseStructure.TIM_Period=99;//自动重装载值ARR
TIM_TimeBaseStructure.TIM_Prescaler=PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
// 配置通道1为PWM模式1
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse=dutyCycle*TIM_TimeBaseStructure.TIM_Period/100;
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
}
```
最后,在主循环里启动定时器以产生 PWM 波形:
```c
int main(){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_PWM_Init(1000,75); // 设定频率为1kHz,占空比为75%
// 启动PWM信号发生
TIM_Cmd(TIM2,ENABLE);
while (1){}
}
```
上述代码展示了如何利用 STM32F103C8T6 的标准库创建一个简单的 PWM 应用来调节连接到 PA0 引脚上的 LED 的亮度[^1]。
阅读全文