1.设置 Pinout View & Configuration
- 设置PA11 引脚为 【GPIO_Input】
- 设置PA11内部电压为上拉,这样当A11接地时,可以检测到A11的引脚输入为0,表示按键按下。
2.编写代码
这里通过 定时器TIM1 来体现GPIO的读取功能。
先重写HAL_TIM_PeriodElapsedCallback 函数。
timeCnt记录中断次数每1ms,time1PrintCnt记录1000次中断代表1s,time1Print代表是否打印。
int timeCnt=0;
int time1PrintCnt=0;
uint8_t time1Print = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
if (htim->Instance == TIM1) {
timeCnt++;
if (timeCnt >= 1000) {
timeCnt = 0;
time1PrintCnt++;
time1Print=1;
}
}
}
在while 循环中使用
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11) 读取 A11 引脚电平,当为低电平时,清空time1PrintCnt的计数。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if (0 == HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11)){
time1PrintCnt=0;
}
if (time1Print){
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
time1Print=0;
printf("time1PrintCnt = %d\n", time1PrintCnt);
}
}
/* USER CODE END 3 */