在stm32f103中写一个函数,每按一下按键,返回变量加一,完整一点的代码
时间: 2024-12-14 14:19:40 浏览: 1
simulink+stm32cubemx代码生成 完整例子 STM32F103RCT6
在STM32F103微控制器上,我们通常会使用GPIO和中断系统来处理按键输入并更新变量。这里是一个简单的示例,假设你已经初始化了GPIO和按键引脚,并配置了外部中断线。我们将创建一个名为`increment_variable_on_keypress`的函数,它会在按下按键时递增全局计数器变量。
```c
#include "stm32f10x.h" // 包含必要的头文件
// 定义按键引脚和中断线
#define KEY_PIN GPIO_Pin_0
#define KEY_PORT GPIOB
#define KEY_IRQn EXTI0_IRQn
// 定义全局变量
volatile uint8_t counter = 0;
void Key_IRQHandler(void) {
if (EXTI_GetITStatus(KEY_IRQn) != RESET) { // 检查是否按键被按下
EXTI_ClearITPendingBit(KEY_IRQn); // 清除中断标志
counter++; // 当按键按下时,计数器加一
}
}
void increment_variable_on_keypress(void) {
Key_IRQHandler(); // 如果有按键按下,调用中断处理函数
}
int main(void) {
// 初始化GPIO,设置按键模式为输入
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = KEY_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IT_FALLING; // 触发模式为下降沿
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_FREQ_LOW;
GPIO_Init(KEY_PORT, &GPIO_InitStructure);
// 配置中断
NVIC_SetPriority(KEY_IRQn, 0); // 设置中断优先级
EnableInterrupts(); // 启动中断
EXTI_EnableIT Falling(KEY_PORT, KEY_PIN); // 开启按键中断
while (1) {
increment_variable_on_keypress(); // 主循环中检查按键
printf("Counter: %d\n", counter);
// ...其他主程序任务...
}
return 0;
}
```
阅读全文