From 72d07a8077b057cceba2dc7d662d47ebe84a145f Mon Sep 17 00:00:00 2001 From: cirry <812852553@qq.com> Date: Thu, 13 Aug 2026 22:32:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E5=B0=84=E5=BC=8F=E7=BA=A2=E5=A4=96?= =?UTF-8?q?=E4=BC=A0=E6=84=9F=E5=99=A8=E8=AE=A1=E6=95=B0=E5=99=A8=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BSP/CountSensor.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ BSP/CountSensor.h | 6 ++++++ CMakeLists.txt | 2 ++ User/main.c | 18 +++++------------- 4 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 BSP/CountSensor.c create mode 100644 BSP/CountSensor.h diff --git a/BSP/CountSensor.c b/BSP/CountSensor.c new file mode 100644 index 0000000..e2e3074 --- /dev/null +++ b/BSP/CountSensor.c @@ -0,0 +1,44 @@ +#include "stm32f10x.h" + +uint16_t CountSensor_Count = 0; + +void CountSensor_Init(void) { + // 初始化Gpio口 + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + // 初始化exit + GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14); + EXTI_InitTypeDef EXTI_InitStructure; + EXTI_InitStructure.EXTI_Line = EXTI_Line14; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_Init(&EXTI_InitStructure); + + // 初始化nvic + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); + NVIC_InitTypeDef NVIC_InitStructure; + NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_Init(&NVIC_InitStructure); +} + + +void EXTI15_10_IRQHandler(void) { + if (EXTI_GetITStatus(EXTI_Line14) == SET) { + CountSensor_Count++; + EXTI_ClearITPendingBit(EXTI_Line14); + } +} + +uint16_t CountSensor_GetCount(void) { + return CountSensor_Count; +} diff --git a/BSP/CountSensor.h b/BSP/CountSensor.h new file mode 100644 index 0000000..0a6c267 --- /dev/null +++ b/BSP/CountSensor.h @@ -0,0 +1,6 @@ +#ifndef __COUNTSENSOR_H +#define __COUNTSENSOR_H + +void CountSensor_Init(void); +uint16_t CountSensor_GetCount(void); +#endif diff --git a/CMakeLists.txt b/CMakeLists.txt index 98962fa..11741c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,8 @@ add_executable(${CMAKE_PROJECT_NAME} BSP/OLED.c BSP/OLED.h BSP/OLED_Font.h + BSP/CountSensor.c + BSP/CountSensor.h ) target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE diff --git a/User/main.c b/User/main.c index 1bd843b..efe80af 100644 --- a/User/main.c +++ b/User/main.c @@ -1,21 +1,13 @@ #include "stm32f10x.h" #include "Delay.h" #include "OLED.h" +#include "CountSensor.h" + int main(void) { - OLED_Init(); - OLED_ShowChar(1,1, 'A'); - OLED_ShowString(1,3, "Hello World!12"); - OLED_ShowNum(2, 1, 12345, 5); - OLED_ShowSignedNum(2, 7, 12, 2); - OLED_ShowSignedNum(2, 11, -34, 2); - OLED_ShowHexNum(3,1,0xaa55,4); - OLED_ShowBinNum(4,1,0xaa55,16); - - Delay_ms(1000); - OLED_Clear(); - + CountSensor_Init(); + OLED_ShowString(1,1, "Count:"); while (1) { - + OLED_ShowNum(1,7, CountSensor_GetCount(), 5); } }