From 339590ec377f6858bddd8ce440a1df2c11a79849 Mon Sep 17 00:00:00 2001 From: IOsetting Date: Fri, 3 Feb 2023 23:00:55 +0800 Subject: [PATCH] feat: exti trigger example --- Examples/LL/GPIO/EXTI_Toggle/main.c | 95 ++++++++++++++++++++++ Examples/LL/GPIO/EXTI_Toggle/main.h | 55 +++++++++++++ Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.c | 84 +++++++++++++++++++ Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.h | 49 +++++++++++ 4 files changed, 283 insertions(+) create mode 100644 Examples/LL/GPIO/EXTI_Toggle/main.c create mode 100644 Examples/LL/GPIO/EXTI_Toggle/main.h create mode 100644 Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.c create mode 100644 Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.h diff --git a/Examples/LL/GPIO/EXTI_Toggle/main.c b/Examples/LL/GPIO/EXTI_Toggle/main.c new file mode 100644 index 0000000..0c423dd --- /dev/null +++ b/Examples/LL/GPIO/EXTI_Toggle/main.c @@ -0,0 +1,95 @@ +/*** + * Demo: EXTI Interrupt + */ +#include "main.h" +#include "py32f0xx_bsp_button.h" +#include "py32f0xx_bsp_led.h" +#include "py32f0xx_bsp_printf.h" + +static void APP_SystemClockConfig(void); +static void APP_GpioConfig(void); +static void APP_ConfigureEXTI(void); + + +int main(void) +{ + APP_SystemClockConfig(); + + APP_GpioConfig(); + APP_ConfigureEXTI(); + + while (1); +} + +static void APP_SystemClockConfig(void) +{ + LL_RCC_HSI_Enable(); + while(LL_RCC_HSI_IsReady() != 1); + + LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); + LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSISYS); + while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSISYS); + + LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1); + LL_Init1msTick(8000000); + LL_SetSystemCoreClock(8000000); +} + +static void APP_GpioConfig(void) +{ + /* Enable GPIOB Clock */ + LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB); + /* PB5 as output */ + LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_5, LL_GPIO_MODE_OUTPUT); +} + +static void APP_ConfigureEXTI(void) +{ + /* Enable GPIOA Clock */ + LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); + + /* PA12 as input */ + LL_GPIO_InitTypeDef GPIO_InitStruct; + GPIO_InitStruct.Pin = LL_GPIO_PIN_12; + GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; + LL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* Triggerred by falling edge */ + LL_EXTI_InitTypeDef EXTI_InitStruct; + EXTI_InitStruct.Line = LL_EXTI_LINE_12; + EXTI_InitStruct.LineCommand = ENABLE; + EXTI_InitStruct.Mode = LL_EXTI_MODE_IT; + EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING; + LL_EXTI_Init(&EXTI_InitStruct); + + /** + * Enable interrupt + * - EXTI0_1_IRQn for PA/PB/PC[0,1] + * - EXTI2_3_IRQn for PA/PB/PC[2,3] + * - EXTI4_15_IRQn for PA/PB/PC[4,15] + */ + NVIC_SetPriority(EXTI4_15_IRQn, 0); + NVIC_EnableIRQ(EXTI4_15_IRQn); +} + +void EXTI4_15_IRQHandler(void) +{ + if(LL_EXTI_IsActiveFlag(LL_EXTI_LINE_12)) + { + LL_GPIO_TogglePin(GPIOB, LL_GPIO_PIN_5); + LL_EXTI_ClearFlag(LL_EXTI_LINE_12); + } +} + +void APP_ErrorHandler(void) +{ + while (1); +} + +#ifdef USE_FULL_ASSERT +void assert_failed(uint8_t *file, uint32_t line) +{ + while (1); +} +#endif /* USE_FULL_ASSERT */ diff --git a/Examples/LL/GPIO/EXTI_Toggle/main.h b/Examples/LL/GPIO/EXTI_Toggle/main.h new file mode 100644 index 0000000..d60c78f --- /dev/null +++ b/Examples/LL/GPIO/EXTI_Toggle/main.h @@ -0,0 +1,55 @@ +/** + ****************************************************************************** + * @file main.h + * @author MCU Application Team + * @brief Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + *

© Copyright (c) Puya Semiconductor Co. + * All rights reserved.

+ * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "py32f0xx_ll_rcc.h" +#include "py32f0xx_ll_bus.h" +#include "py32f0xx_ll_system.h" +#include "py32f0xx_ll_exti.h" +#include "py32f0xx_ll_cortex.h" +#include "py32f0xx_ll_utils.h" +#include "py32f0xx_ll_pwr.h" +#include "py32f0xx_ll_dma.h" +#include "py32f0xx_ll_gpio.h" + +/* Private includes ----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/* Exported variables prototypes ---------------------------------------------*/ +/* Exported functions prototypes ---------------------------------------------*/ +void APP_ErrorHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT Puya *****END OF FILE******************/ diff --git a/Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.c b/Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.c new file mode 100644 index 0000000..2d2f6e3 --- /dev/null +++ b/Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.c @@ -0,0 +1,84 @@ +/** + ****************************************************************************** + * @file py32f0xx_it.c + * @author MCU Application Team + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) Puya Semiconductor Co. + * All rights reserved.

+ * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "py32f0xx_it.h" + +/* Private includes ----------------------------------------------------------*/ +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private user code ---------------------------------------------------------*/ +/* External variables --------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M0+ Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + while (1) + { + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* PY32F0xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file. */ +/******************************************************************************/ + +/************************ (C) COPYRIGHT Puya *****END OF FILE******************/ diff --git a/Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.h b/Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.h new file mode 100644 index 0000000..633fddb --- /dev/null +++ b/Examples/LL/GPIO/EXTI_Toggle/py32f0xx_it.h @@ -0,0 +1,49 @@ +/** + ****************************************************************************** + * @file py32f0xx_it.h + * @author MCU Application Team + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) Puya Semiconductor Co. + * All rights reserved.

+ * + *

© Copyright (c) 2016 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __PY32F0XX_IT_H +#define __PY32F0XX_IT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __PY32F0XX_IT_H */ + +/************************ (C) COPYRIGHT Puya *****END OF FILE******************/