使用STM32F103ZET6开发板,实现两个LED灯的循环交替点亮,即LED1亮时,LED2灭;LED1灭时,LED2亮。GPIO端口和引脚自己选择使用。
时间: 2024-11-27 10:23:21 浏览: 44
使用STM32F103ZET6开发板实现LED灯交替点亮,首先需要设置两个GPIO引脚来控制LED,比如GPIOA的PA8连接LED1,GPIOB的PB8连接LED2。以下是基本步骤:
1. **初始化GPIO**:
- 在`main.c`文件中,配置GPIOA和GPIOB为推挽输出模式,并将PA8和PB8设置为输出状态。
```c
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // PA8 for LED1, PB8 for LED2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // Push-Pull Output
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); // Initialize GPIOA
GPIO_Init(GPIOB, &GPIO_InitStructure); // Initialize GPIOB
```
2. **定时器设置**:
- 可以使用系统时钟频率较高的定时器(如TIM2或TIM3),通过分频计算周期,让两个LED交替点亮。例如,我们可以每500毫秒切换一次。
```c
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = (SystemCoreClock / 1000) - 1; // 500ms period
TIM_TimeBaseStructure.TIM_Prescaler = ((SystemCoreClock / 1000) / 2) - 1; // 1ms prescaler
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
HAL_TIM_TimeBaseInit(&htim2, &TIM_TimeBaseStructure);
HAL_TIM_Cmd(&htim2, ENABLE); // Enable the timer
```
3. **中断服务函数**:
- 创建一个中断服务函数(例如`TIM2_IRQHandler()`),在定时器溢出时执行,这里可以交换LED的状态。
```c
void TIM2_IRQHandler(void)
{
static bool led1State = true;
if (led1State)
{
GPIO_SetBits(GPIOA, GPIO_Pin_8); // Set LED1 on
GPIO_ResetBits(GPIOB, GPIO_Pin_8); // Reset LED2 off
led1State = false;
}
else
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8); // Reset LED1 off
GPIO_SetBits(GPIOB, GPIO_Pin_8); // Set LED2 on
led1State = true;
}
}
```
4. **启用中断**:
- 在`main.c`中添加中断向量表并激活TIM2的中断。
```c
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
HAL_NVIC_EnableIRQ(TIM2_IRQn); // Enable the interrupt
```
以上是一个简单的示例,实际项目中可能需要考虑更多的细节,比如错误处理、延时等。运行程序后,LED1和LED2应该会按照预期循环交替点亮。
阅读全文