stm32f103c8t6最小系统控制灯开关亮度有三个等级
时间: 2023-07-30 21:04:35 浏览: 50
STM32F103C8T6最小系统控制灯的开关和亮度可以通过PWM技术实现。具体步骤如下:
1. 配置GPIO引脚为输出模式,控制LED的开关。
2. 配置TIM定时器为PWM模式,控制LED的亮度。
3. 在定时器的PWM输出通道上连接到LED灯的控制引脚。这样,定时器的PWM输出就可以控制LED灯的亮度。
4. 在程序中,通过改变PWM的占空比来实现LED灯的亮度调节。PWM的占空比可以设置为0、1/3、2/3三个等级,分别对应LED灯的灭、亮度较低、亮度较高。
下面是一个简单的控制LED灯开关和亮度的代码示例:
```c
#include "stm32f10x.h"
// 定义LED控制引脚
#define LED_PIN GPIO_Pin_13
#define LED_GPIO GPIOC
// 定义TIM定时器和PWM输出通道
#define PWM_TIM TIM2
#define PWM_TIM_CLK RCC_APB1Periph_TIM2
#define PWM_TIM_CH TIM_OCMode_PWM1
#define PWM_TIM_CH1 TIM_Channel_1
#define PWM_TIM_CH1_GPIO GPIOA
#define PWM_TIM_CH1_PIN GPIO_Pin_0
// 定义PWM占空比
#define PWM_DUTY_0 0
#define PWM_DUTY_1 33
#define PWM_DUTY_2 66
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 配置GPIOC.13为推挽输出
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_GPIO, &GPIO_InitStructure);
}
void PWM_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 使能TIM2时钟
RCC_APB1PeriphClockCmd(PWM_TIM_CLK, ENABLE);
// 配置GPIOA.0为复用功能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = PWM_TIM_CH1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(PWM_TIM_CH1_GPIO, &GPIO_InitStructure);
// 配置TIM2定时器
TIM_TimeBaseStructure.TIM_Period = 999; // 计数周期为1000
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 预分频器为72
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(PWM_TIM, &TIM_TimeBaseStructure);
// 配置TIM2通道1为PWM输出
TIM_OCInitStructure.TIM_OCMode = PWM_TIM_CH;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比为0
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(PWM_TIM, &TIM_OCInitStructure);
// 使能TIM2定时器
TIM_Cmd(PWM_TIM, ENABLE);
}
int main(void)
{
LED_Init();
PWM_Init();
while (1)
{
// 控制LED灯的开关
LED_GPIO->ODR ^= LED_PIN;
delay_ms(200);
// 控制LED灯的亮度
TIM_SetCompare1(PWM_TIM, PWM_DUTY_1); // 亮度较低
delay_ms(500);
TIM_SetCompare1(PWM_TIM, PWM_DUTY_2); // 亮度较高
delay_ms(500);
TIM_SetCompare1(PWM_TIM, PWM_DUTY_0); // 灭
delay_ms(500);
}
}
```
在上述代码中,LED_Init()函数用于初始化LED控制引脚,PWM_Init()函数用于初始化TIM定时器和PWM输出通道。在主函数中,通过循环控制LED灯的开关,然后通过改变PWM的占空比来控制LED灯的亮度,实现了LED灯的开关和亮度调节。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)