秒表加按键的代码stm32f103
时间: 2023-10-20 07:02:44 浏览: 33
下面是一个使用STM32F103单片机实现秒表加按键的代码:
#include "stm32f10x.h" // 包含STM32F103头文件
#define INTERVAL 1000 // 定义1秒的时间间隔
volatile uint32_t g_tick = 0; // 全局变量,记录秒表的tick数
void SysTick_Handler(void) // SysTick中断处理函数
{
g_tick++; // 每次中断,tick数增加1
}
void Delay(__IO uint32_t nTime) // 延时函数
{
uint32_t timing = g_tick;
while((g_tick - timing) < nTime);
}
void GPIO_Configuration(void) // GPIO配置函数
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 定义按键的引脚为PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // PA0的上拉输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // 定义LED的引脚为PA1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // PA1的推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
int main(void)
{
SysTick_Config(SystemCoreClock / 1000); // 初始化SysTick定时器,设定时钟频率为1000Hz
GPIO_Configuration(); // 配置GPIO
while (1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == RESET) // 检测按键是否按下
{
Delay(50); // 延时50ms消抖
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == RESET)
{
GPIO_SetBits(GPIOA, GPIO_Pin_1); // 点亮LED
Delay(INTERVAL); // 延时1秒
GPIO_ResetBits(GPIOA, GPIO_Pin_1); // 关闭LED
}
}
}
}
以上代码使用STM32的SysTick定时器来实现秒表功能,基于SysTick的中断来控制tick数的增加。通过GPIOA_Pin_0的输入来检测按键是否按下,如果按下则点亮GPIOA_Pin_1的LED,并延时1秒后关闭LED。为了消除按键的抖动,对按键进行了50ms的延时。