stm32实现三个灯动态闪烁 使用定时秒数
时间: 2024-05-15 11:13:25 浏览: 144
stm32的灯闪烁
要实现三个灯动态闪烁,可以利用定时器来实现。具体步骤如下:
1. 配置定时器,使其以1秒为周期自动重载,并启动定时器。
2. 在定时器中断处理函数中,利用一个计数器实现三个灯的动态闪烁。每个灯的闪烁频率可以不同,可以通过设置不同的计数值来实现。
3. 在主函数中,初始化三个灯的GPIO口,并进入while循环等待中断。
下面是一个简单的示例代码:
```c
#include "stm32f10x.h"
void TIM2_IRQHandler(void)
{
static uint8_t cnt1 = 0, cnt2 = 0, cnt3 = 0;
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
if (++cnt1 == 2) {
GPIO_ToggleBits(GPIOA, GPIO_Pin_1);
cnt1 = 0;
}
if (++cnt2 == 4) {
GPIO_ToggleBits(GPIOA, GPIO_Pin_2);
cnt2 = 0;
}
if (++cnt3 == 8) {
GPIO_ToggleBits(GPIOA, GPIO_Pin_3);
cnt3 = 0;
}
}
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 初始化LED的GPIO口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 初始化定时器
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 72MHz / 7200 = 10KHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 配置定时器中断
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 启动定时器
TIM_Cmd(TIM2, ENABLE);
while (1);
return 0;
}
```
在这个示例代码中,定时器的周期为1s,计数器cnt1、cnt2和cnt3分别对应三个灯的闪烁频率,每个灯的闪烁频率分别为1Hz、0.5Hz和0.25Hz。
阅读全文