From e9a38b43718d9816aa8b90bc2875b04dd2bc5700 Mon Sep 17 00:00:00 2001 From: wangxujie Date: Wed, 19 Feb 2025 11:08:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .mxproject | 42 +- Core/Inc/dma.h | 52 - Core/Inc/gpio.h | 22 + Core/Inc/main.h | 159 +- Core/Inc/spi.h | 52 - Core/Inc/stm32f4xx_hal_conf.h | 4 +- Core/Inc/stm32f4xx_it.h | 17 - Core/Inc/tim.h | 2 - Core/Inc/usart.h | 69 - Core/Src/dma.c | 83 - Core/Src/freertos.c | 133 +- Core/Src/gpio.c | 177 +- Core/Src/main.c | 92 +- Core/Src/spi.c | 118 - Core/Src/stm32f4xx_it.c | 300 +- Core/Src/tim.c | 41 - Core/Src/usart.c | 672 --- ...ulti-channelDigitalInOut-V1.0-20250103.pdf | Bin 0 -> 2442219 bytes .../Inc/stm32f4xx_hal_spi.h | 729 --- .../Inc/stm32f4xx_hal_uart.h | 884 ---- .../Inc/stm32f4xx_ll_usart.h | 2521 ----------- .../Src/stm32f4xx_hal_spi.c | 3915 ----------------- .../Src/stm32f4xx_hal_uart.c | 3751 ---------------- MDK-ARM/EventRecorderStub.scvd | 9 - .../RTE_Components.h | 4 +- .../RTE_Components.h | 21 - ...testing.uvoptx => remote_dido_unit.uvoptx} | 424 +- ...sting.uvprojx => remote_dido_unit.uvprojx} | 94 +- .../remote_dido_unit.sct} | 0 .../semi-finished_product_testing.sct | 19 - User/application/src/communication_protocol.c | 26 +- User/application/src/tcpserverc.c | 225 +- User/board/inc/leds.h | 10 +- User/board/src/leds.c | 68 +- remote_dido_unit.ioc | 440 ++ semi-finished_product_testing.ioc | 646 --- 36 files changed, 881 insertions(+), 14940 deletions(-) delete mode 100644 Core/Inc/dma.h delete mode 100644 Core/Inc/spi.h delete mode 100644 Core/Inc/usart.h delete mode 100644 Core/Src/dma.c delete mode 100644 Core/Src/spi.c delete mode 100644 Core/Src/usart.c create mode 100644 Documents/schematic diagram/Multi-channelDigitalInOut-V1.0-20250103.pdf delete mode 100644 Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h delete mode 100644 Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h delete mode 100644 Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h delete mode 100644 Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c delete mode 100644 Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c delete mode 100644 MDK-ARM/EventRecorderStub.scvd rename MDK-ARM/RTE/{_TEST2 => _remote_dido_unit}/RTE_Components.h (80%) delete mode 100644 MDK-ARM/RTE/_semi-finished_product_testing/RTE_Components.h rename MDK-ARM/{semi-finished_product_testing.uvoptx => remote_dido_unit.uvoptx} (92%) rename MDK-ARM/{semi-finished_product_testing.uvprojx => remote_dido_unit.uvprojx} (93%) rename MDK-ARM/{TEST2/TEST2.sct => remote_dido_unit/remote_dido_unit.sct} (100%) delete mode 100644 MDK-ARM/semi-finished_product_testing/semi-finished_product_testing.sct create mode 100644 remote_dido_unit.ioc delete mode 100644 semi-finished_product_testing.ioc diff --git a/.mxproject b/.mxproject index 65c7bbb..8e954f8 100644 --- a/.mxproject +++ b/.mxproject @@ -1,44 +1,38 @@ [PreviousLibFiles] -LibFiles=Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f407xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; +LibFiles=Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_tim.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_tim.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f407xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; [PreviousUsedKeilFiles] -SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\freertos.c;..\Core\Src\dma.c;..\LWIP\App\lwip.c;..\LWIP\Target\ethernetif.c;..\Core\Src\spi.c;..\Core\Src\tim.c;..\Core\Src\usart.c;..\Core\Src\stm32f4xx_it.c;..\Core\Src\stm32f4xx_hal_msp.c;..\Core\Src\stm32f4xx_hal_timebase_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;..\Drivers\BSP\Components\lan8742\lan8742.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;..\Middlewares\Third_Party\LwIP\src\netif\ethernet.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;..\Middlewares\Third_Party\LwIP\src\netif\slipif.c;..\Middlewares\Third_Party\LwIP\src\netif\zepif.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Middlewares\Third_Party\LwIP\src\api\api_lib.c;..\Middlewares\Third_Party\LwIP\src\api\api_msg.c;..\Middlewares\Third_Party\LwIP\src\api\err.c;..\Middlewares\Third_Party\LwIP\src\api\if_api.c;..\Middlewares\Third_Party\LwIP\src\api\netbuf.c;..\Middlewares\Third_Party\LwIP\src\api\netdb.c;..\Middlewares\Third_Party\LwIP\src\api\netifapi.c;..\Middlewares\Third_Party\LwIP\src\api\sockets.c;..\Middlewares\Third_Party\LwIP\src\api\tcpip.c;..\Middlewares\Third_Party\LwIP\src\core\altcp.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;..\Middlewares\Third_Party\LwIP\src\core\def.c;..\Middlewares\Third_Party\LwIP\src\core\dns.c;..\Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;..\Middlewares\Third_Party\LwIP\src\core\init.c;..\Middlewares\Third_Party\LwIP\src\core\ip.c;..\Middlewares\Third_Party\LwIP\src\core\mem.c;..\Middlewares\Third_Party\LwIP\src\core\memp.c;..\Middlewares\Third_Party\LwIP\src\core\netif.c;..\Middlewares\Third_Party\LwIP\src\core\pbuf.c;..\Middlewares\Third_Party\LwIP\src\core\raw.c;..\Middlewares\Third_Party\LwIP\src\core\stats.c;..\Middlewares\Third_Party\LwIP\src\core\sys.c;..\Middlewares\Third_Party\LwIP\src\core\tcp.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_in.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_out.c;..\Middlewares\Third_Party\LwIP\src\core\timeouts.c;..\Middlewares\Third_Party\LwIP\src\core\udp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;..\Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;..\Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;..\Core\Src\system_stm32f4xx.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;..\Drivers\BSP\Components\lan8742\lan8742.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;..\Middlewares\Third_Party\LwIP\src\netif\ethernet.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;..\Middlewares\Third_Party\LwIP\src\netif\slipif.c;..\Middlewares\Third_Party\LwIP\src\netif\zepif.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Middlewares\Third_Party\LwIP\src\api\api_lib.c;..\Middlewares\Third_Party\LwIP\src\api\api_msg.c;..\Middlewares\Third_Party\LwIP\src\api\err.c;..\Middlewares\Third_Party\LwIP\src\api\if_api.c;..\Middlewares\Third_Party\LwIP\src\api\netbuf.c;..\Middlewares\Third_Party\LwIP\src\api\netdb.c;..\Middlewares\Third_Party\LwIP\src\api\netifapi.c;..\Middlewares\Third_Party\LwIP\src\api\sockets.c;..\Middlewares\Third_Party\LwIP\src\api\tcpip.c;..\Middlewares\Third_Party\LwIP\src\core\altcp.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;..\Middlewares\Third_Party\LwIP\src\core\def.c;..\Middlewares\Third_Party\LwIP\src\core\dns.c;..\Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;..\Middlewares\Third_Party\LwIP\src\core\init.c;..\Middlewares\Third_Party\LwIP\src\core\ip.c;..\Middlewares\Third_Party\LwIP\src\core\mem.c;..\Middlewares\Third_Party\LwIP\src\core\memp.c;..\Middlewares\Third_Party\LwIP\src\core\netif.c;..\Middlewares\Third_Party\LwIP\src\core\pbuf.c;..\Middlewares\Third_Party\LwIP\src\core\raw.c;..\Middlewares\Third_Party\LwIP\src\core\stats.c;..\Middlewares\Third_Party\LwIP\src\core\sys.c;..\Middlewares\Third_Party\LwIP\src\core\tcp.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_in.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_out.c;..\Middlewares\Third_Party\LwIP\src\core\timeouts.c;..\Middlewares\Third_Party\LwIP\src\core\udp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;..\Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;..\Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;..\Core\Src\system_stm32f4xx.c;;;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;..\Middlewares\Third_Party\LwIP\src\netif\ethernet.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;..\Middlewares\Third_Party\LwIP\src\netif\slipif.c;..\Middlewares\Third_Party\LwIP\src\netif\zepif.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;..\Middlewares\Third_Party\LwIP\src\api\api_lib.c;..\Middlewares\Third_Party\LwIP\src\api\api_msg.c;..\Middlewares\Third_Party\LwIP\src\api\err.c;..\Middlewares\Third_Party\LwIP\src\api\if_api.c;..\Middlewares\Third_Party\LwIP\src\api\netbuf.c;..\Middlewares\Third_Party\LwIP\src\api\netdb.c;..\Middlewares\Third_Party\LwIP\src\api\netifapi.c;..\Middlewares\Third_Party\LwIP\src\api\sockets.c;..\Middlewares\Third_Party\LwIP\src\api\tcpip.c;..\Middlewares\Third_Party\LwIP\src\core\altcp.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;..\Middlewares\Third_Party\LwIP\src\core\def.c;..\Middlewares\Third_Party\LwIP\src\core\dns.c;..\Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;..\Middlewares\Third_Party\LwIP\src\core\init.c;..\Middlewares\Third_Party\LwIP\src\core\ip.c;..\Middlewares\Third_Party\LwIP\src\core\mem.c;..\Middlewares\Third_Party\LwIP\src\core\memp.c;..\Middlewares\Third_Party\LwIP\src\core\netif.c;..\Middlewares\Third_Party\LwIP\src\core\pbuf.c;..\Middlewares\Third_Party\LwIP\src\core\raw.c;..\Middlewares\Third_Party\LwIP\src\core\stats.c;..\Middlewares\Third_Party\LwIP\src\core\sys.c;..\Middlewares\Third_Party\LwIP\src\core\tcp.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_in.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_out.c;..\Middlewares\Third_Party\LwIP\src\core\timeouts.c;..\Middlewares\Third_Party\LwIP\src\core\udp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;..\Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;..\Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c; +SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\freertos.c;..\LWIP\App\lwip.c;..\LWIP\Target\ethernetif.c;..\Core\Src\tim.c;..\Core\Src\stm32f4xx_it.c;..\Core\Src\stm32f4xx_hal_msp.c;..\Core\Src\stm32f4xx_hal_timebase_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;..\Drivers\BSP\Components\lan8742\lan8742.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;..\Middlewares\Third_Party\LwIP\src\netif\ethernet.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;..\Middlewares\Third_Party\LwIP\src\netif\slipif.c;..\Middlewares\Third_Party\LwIP\src\netif\zepif.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Middlewares\Third_Party\LwIP\src\api\api_lib.c;..\Middlewares\Third_Party\LwIP\src\api\api_msg.c;..\Middlewares\Third_Party\LwIP\src\api\err.c;..\Middlewares\Third_Party\LwIP\src\api\if_api.c;..\Middlewares\Third_Party\LwIP\src\api\netbuf.c;..\Middlewares\Third_Party\LwIP\src\api\netdb.c;..\Middlewares\Third_Party\LwIP\src\api\netifapi.c;..\Middlewares\Third_Party\LwIP\src\api\sockets.c;..\Middlewares\Third_Party\LwIP\src\api\tcpip.c;..\Middlewares\Third_Party\LwIP\src\core\altcp.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;..\Middlewares\Third_Party\LwIP\src\core\def.c;..\Middlewares\Third_Party\LwIP\src\core\dns.c;..\Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;..\Middlewares\Third_Party\LwIP\src\core\init.c;..\Middlewares\Third_Party\LwIP\src\core\ip.c;..\Middlewares\Third_Party\LwIP\src\core\mem.c;..\Middlewares\Third_Party\LwIP\src\core\memp.c;..\Middlewares\Third_Party\LwIP\src\core\netif.c;..\Middlewares\Third_Party\LwIP\src\core\pbuf.c;..\Middlewares\Third_Party\LwIP\src\core\raw.c;..\Middlewares\Third_Party\LwIP\src\core\stats.c;..\Middlewares\Third_Party\LwIP\src\core\sys.c;..\Middlewares\Third_Party\LwIP\src\core\tcp.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_in.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_out.c;..\Middlewares\Third_Party\LwIP\src\core\timeouts.c;..\Middlewares\Third_Party\LwIP\src\core\udp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;..\Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;..\Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;..\Core\Src\system_stm32f4xx.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_eth.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;..\Drivers\BSP\Components\lan8742\lan8742.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;..\Middlewares\Third_Party\LwIP\src\netif\ethernet.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;..\Middlewares\Third_Party\LwIP\src\netif\slipif.c;..\Middlewares\Third_Party\LwIP\src\netif\zepif.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Middlewares\Third_Party\LwIP\src\api\api_lib.c;..\Middlewares\Third_Party\LwIP\src\api\api_msg.c;..\Middlewares\Third_Party\LwIP\src\api\err.c;..\Middlewares\Third_Party\LwIP\src\api\if_api.c;..\Middlewares\Third_Party\LwIP\src\api\netbuf.c;..\Middlewares\Third_Party\LwIP\src\api\netdb.c;..\Middlewares\Third_Party\LwIP\src\api\netifapi.c;..\Middlewares\Third_Party\LwIP\src\api\sockets.c;..\Middlewares\Third_Party\LwIP\src\api\tcpip.c;..\Middlewares\Third_Party\LwIP\src\core\altcp.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;..\Middlewares\Third_Party\LwIP\src\core\def.c;..\Middlewares\Third_Party\LwIP\src\core\dns.c;..\Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;..\Middlewares\Third_Party\LwIP\src\core\init.c;..\Middlewares\Third_Party\LwIP\src\core\ip.c;..\Middlewares\Third_Party\LwIP\src\core\mem.c;..\Middlewares\Third_Party\LwIP\src\core\memp.c;..\Middlewares\Third_Party\LwIP\src\core\netif.c;..\Middlewares\Third_Party\LwIP\src\core\pbuf.c;..\Middlewares\Third_Party\LwIP\src\core\raw.c;..\Middlewares\Third_Party\LwIP\src\core\stats.c;..\Middlewares\Third_Party\LwIP\src\core\sys.c;..\Middlewares\Third_Party\LwIP\src\core\tcp.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_in.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_out.c;..\Middlewares\Third_Party\LwIP\src\core\timeouts.c;..\Middlewares\Third_Party\LwIP\src\core\udp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;..\Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;..\Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;..\Core\Src\system_stm32f4xx.c;;;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS\cmsis_os.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;..\Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;..\Middlewares\Third_Party\LwIP\src\netif\ethernet.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;..\Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;..\Middlewares\Third_Party\LwIP\src\netif\slipif.c;..\Middlewares\Third_Party\LwIP\src\netif\zepif.c;..\Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;..\Middlewares\Third_Party\LwIP\src\api\api_lib.c;..\Middlewares\Third_Party\LwIP\src\api\api_msg.c;..\Middlewares\Third_Party\LwIP\src\api\err.c;..\Middlewares\Third_Party\LwIP\src\api\if_api.c;..\Middlewares\Third_Party\LwIP\src\api\netbuf.c;..\Middlewares\Third_Party\LwIP\src\api\netdb.c;..\Middlewares\Third_Party\LwIP\src\api\netifapi.c;..\Middlewares\Third_Party\LwIP\src\api\sockets.c;..\Middlewares\Third_Party\LwIP\src\api\tcpip.c;..\Middlewares\Third_Party\LwIP\src\core\altcp.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;..\Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;..\Middlewares\Third_Party\LwIP\src\core\def.c;..\Middlewares\Third_Party\LwIP\src\core\dns.c;..\Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;..\Middlewares\Third_Party\LwIP\src\core\init.c;..\Middlewares\Third_Party\LwIP\src\core\ip.c;..\Middlewares\Third_Party\LwIP\src\core\mem.c;..\Middlewares\Third_Party\LwIP\src\core\memp.c;..\Middlewares\Third_Party\LwIP\src\core\netif.c;..\Middlewares\Third_Party\LwIP\src\core\pbuf.c;..\Middlewares\Third_Party\LwIP\src\core\raw.c;..\Middlewares\Third_Party\LwIP\src\core\stats.c;..\Middlewares\Third_Party\LwIP\src\core\sys.c;..\Middlewares\Third_Party\LwIP\src\core\tcp.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_in.c;..\Middlewares\Third_Party\LwIP\src\core\tcp_out.c;..\Middlewares\Third_Party\LwIP\src\core\timeouts.c;..\Middlewares\Third_Party\LwIP\src\core\udp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;..\Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;..\Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;..\Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c; HeaderPath=..\Middlewares\Third_Party\LwIP\src\include;..\Middlewares\Third_Party\LwIP\system;..\Middlewares\Third_Party\LwIP\src\include;..\Middlewares\Third_Party\LwIP\system;..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Middlewares\Third_Party\FreeRTOS\Source\include;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F;..\Drivers\BSP\Components\lan8742;..\Middlewares\Third_Party\LwIP\src\include\netif\ppp;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Middlewares\Third_Party\LwIP\src\include\lwip;..\Middlewares\Third_Party\LwIP\src\include\lwip\apps;..\Middlewares\Third_Party\LwIP\src\include\lwip\priv;..\Middlewares\Third_Party\LwIP\src\include\lwip\prot;..\Middlewares\Third_Party\LwIP\src\include\netif;..\Middlewares\Third_Party\LwIP\src\include\compat\posix;..\Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa;..\Middlewares\Third_Party\LwIP\src\include\compat\posix\net;..\Middlewares\Third_Party\LwIP\src\include\compat\posix\sys;..\Middlewares\Third_Party\LwIP\src\include\compat\stdc;..\Middlewares\Third_Party\LwIP\system\arch;..\Drivers\CMSIS\Include;..\Core\Inc;..\LWIP\App;..\LWIP\Target; CDefines=USE_HAL_DRIVER;STM32F407xx;USE_HAL_DRIVER;USE_HAL_DRIVER; [PreviousGenFiles] AdvancedFolderStructure=true -HeaderFileListSize=12 +HeaderFileListSize=9 HeaderFiles#0=..\Core\Inc\gpio.h HeaderFiles#1=..\Core\Inc\FreeRTOSConfig.h -HeaderFiles#2=..\Core\Inc\dma.h -HeaderFiles#3=..\LWIP\App\lwip.h -HeaderFiles#4=..\LWIP\Target\lwipopts.h -HeaderFiles#5=..\LWIP\Target\ethernetif.h -HeaderFiles#6=..\Core\Inc\spi.h -HeaderFiles#7=..\Core\Inc\tim.h -HeaderFiles#8=..\Core\Inc\usart.h -HeaderFiles#9=..\Core\Inc\stm32f4xx_it.h -HeaderFiles#10=..\Core\Inc\stm32f4xx_hal_conf.h -HeaderFiles#11=..\Core\Inc\main.h +HeaderFiles#2=..\LWIP\App\lwip.h +HeaderFiles#3=..\LWIP\Target\lwipopts.h +HeaderFiles#4=..\LWIP\Target\ethernetif.h +HeaderFiles#5=..\Core\Inc\tim.h +HeaderFiles#6=..\Core\Inc\stm32f4xx_it.h +HeaderFiles#7=..\Core\Inc\stm32f4xx_hal_conf.h +HeaderFiles#8=..\Core\Inc\main.h HeaderFolderListSize=3 HeaderPath#0=..\Core\Inc HeaderPath#1=..\LWIP\App HeaderPath#2=..\LWIP\Target HeaderFiles=; -SourceFileListSize=12 +SourceFileListSize=9 SourceFiles#0=..\Core\Src\gpio.c SourceFiles#1=..\Core\Src\freertos.c -SourceFiles#2=..\Core\Src\dma.c -SourceFiles#3=..\LWIP\App\lwip.c -SourceFiles#4=..\LWIP\Target\ethernetif.c -SourceFiles#5=..\Core\Src\spi.c -SourceFiles#6=..\Core\Src\tim.c -SourceFiles#7=..\Core\Src\usart.c -SourceFiles#8=..\Core\Src\stm32f4xx_it.c -SourceFiles#9=..\Core\Src\stm32f4xx_hal_msp.c -SourceFiles#10=..\Core\Src\stm32f4xx_hal_timebase_tim.c -SourceFiles#11=..\Core\Src\main.c +SourceFiles#2=..\LWIP\App\lwip.c +SourceFiles#3=..\LWIP\Target\ethernetif.c +SourceFiles#4=..\Core\Src\tim.c +SourceFiles#5=..\Core\Src\stm32f4xx_it.c +SourceFiles#6=..\Core\Src\stm32f4xx_hal_msp.c +SourceFiles#7=..\Core\Src\stm32f4xx_hal_timebase_tim.c +SourceFiles#8=..\Core\Src\main.c SourceFolderListSize=3 SourcePath#0=..\Core\Src SourcePath#1=..\LWIP\App diff --git a/Core/Inc/dma.h b/Core/Inc/dma.h deleted file mode 100644 index 493d98e..0000000 --- a/Core/Inc/dma.h +++ /dev/null @@ -1,52 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file dma.h - * @brief This file contains all the function prototypes for - * the dma.c file - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __DMA_H__ -#define __DMA_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* DMA memory to memory transfer handles -------------------------------------*/ - -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -void MX_DMA_Init(void); - -/* USER CODE BEGIN Prototypes */ - -/* USER CODE END Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif /* __DMA_H__ */ - diff --git a/Core/Inc/gpio.h b/Core/Inc/gpio.h index a14898c..1838108 100644 --- a/Core/Inc/gpio.h +++ b/Core/Inc/gpio.h @@ -41,6 +41,16 @@ extern "C" { DI_4, DI_5, DI_6, + DI_7, + DI_8, + DI_9, + DI_10, + DI_11, + DI_12, + DI_13, + DI_14, + DI_15, + DI_16, DI_MAX, } gpio_di_e; typedef enum @@ -49,6 +59,18 @@ extern "C" { DO_2, DO_3, DO_4, + DO_5, + DO_6, + DO_7, + DO_8, + DO_9, + DO_10, + DO_11, + DO_12, + DO_13, + DO_14, + DO_15, + DO_16, DO_EN, DO_MAX, } gpio_do_e; diff --git a/Core/Inc/main.h b/Core/Inc/main.h index b829f00..0a96e91 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -32,18 +32,13 @@ extern "C" { /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "stdio.h" -#include "tcpclient.h" #include "tcpserverc.h" -#include "leds.h" #include /* USER CODE END Includes */ /* Exported types ------------------------------------------------------------*/ /* USER CODE BEGIN ET */ -extern uint8_t tcp_echo_flags_hart1; -extern uint8_t tcp_echo_flags_hart2; -extern uint8_t tcp_echo_flags_ble1; -extern uint8_t tcp_echo_flags_ble2; + extern uint8_t tcp_echo_flags_control; #define ARRAY_LEN(arr) (sizeof(arr)) / (sizeof(arr[0])) typedef struct @@ -54,11 +49,7 @@ typedef struct uint8_t tx_data[512]; } uart_t; -extern uart_t lcd_uart4; -extern uart_t ble2_uart3; -extern uart_t ble1_uart6; -extern uart_t hart1_uart5; -extern uart_t hart2_uart2; + #define DEST_IP_ADDR0 192 #define DEST_IP_ADDR1 168 #define DEST_IP_ADDR2 1 @@ -91,86 +82,80 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ -#define DI_CH5_Pin GPIO_PIN_2 -#define DI_CH5_GPIO_Port GPIOE -#define DI_CH6_Pin GPIO_PIN_3 -#define DI_CH6_GPIO_Port GPIOE +#define DI_CH12_Pin GPIO_PIN_2 +#define DI_CH12_GPIO_Port GPIOE +#define DI_CH13_Pin GPIO_PIN_3 +#define DI_CH13_GPIO_Port GPIOE +#define DI_CH14_Pin GPIO_PIN_4 +#define DI_CH14_GPIO_Port GPIOE +#define DI_CH15_Pin GPIO_PIN_5 +#define DI_CH15_GPIO_Port GPIOE +#define DI_CH16_Pin GPIO_PIN_6 +#define DI_CH16_GPIO_Port GPIOE #define ETH_RESET_Pin GPIO_PIN_0 #define ETH_RESET_GPIO_Port GPIOC -#define LED3_R_Pin GPIO_PIN_1 -#define LED3_R_GPIO_Port GPIOB -#define LED3_G_Pin GPIO_PIN_2 -#define LED3_G_GPIO_Port GPIOB -#define LED3_Y_Pin GPIO_PIN_7 -#define LED3_Y_GPIO_Port GPIOE -#define LED2_R_Pin GPIO_PIN_12 -#define LED2_R_GPIO_Port GPIOE -#define LED2_G_Pin GPIO_PIN_13 -#define LED2_G_GPIO_Port GPIOE -#define LED2_Y_Pin GPIO_PIN_14 -#define LED2_Y_GPIO_Port GPIOE -#define BLE2_TX_Pin GPIO_PIN_8 -#define BLE2_TX_GPIO_Port GPIOD -#define BLE2_RX_Pin GPIO_PIN_9 -#define BLE2_RX_GPIO_Port GPIOD -#define DO_CH4_Pin GPIO_PIN_11 -#define DO_CH4_GPIO_Port GPIOD +#define LED_R_Pin GPIO_PIN_1 +#define LED_R_GPIO_Port GPIOB +#define LED_G_Pin GPIO_PIN_2 +#define LED_G_GPIO_Port GPIOB +#define LED_Y_Pin GPIO_PIN_7 +#define LED_Y_GPIO_Port GPIOE +#define DO_EN_Pin GPIO_PIN_10 +#define DO_EN_GPIO_Port GPIOB +#define DO_CH1_Pin GPIO_PIN_10 +#define DO_CH1_GPIO_Port GPIOD +#define DO_CH2_Pin GPIO_PIN_11 +#define DO_CH2_GPIO_Port GPIOD #define DO_CH3_Pin GPIO_PIN_12 #define DO_CH3_GPIO_Port GPIOD -#define DO_CH1_Pin GPIO_PIN_13 -#define DO_CH1_GPIO_Port GPIOD -#define DO_CH2_Pin GPIO_PIN_14 -#define DO_CH2_GPIO_Port GPIOD -#define DO_EN_Pin GPIO_PIN_15 -#define DO_EN_GPIO_Port GPIOD -#define BLE1_TX_Pin GPIO_PIN_6 -#define BLE1_TX_GPIO_Port GPIOC -#define BLE1_RX_Pin GPIO_PIN_7 -#define BLE1_RX_GPIO_Port GPIOC -#define DI_CH1_Pin GPIO_PIN_8 -#define DI_CH1_GPIO_Port GPIOC -#define DI_CH2_Pin GPIO_PIN_9 -#define DI_CH2_GPIO_Port GPIOC -#define HART1_RST_Pin GPIO_PIN_8 -#define HART1_RST_GPIO_Port GPIOA -#define DI_CH3_Pin GPIO_PIN_11 -#define DI_CH3_GPIO_Port GPIOA -#define DI_CH4_Pin GPIO_PIN_12 -#define DI_CH4_GPIO_Port GPIOA -#define HART_CLK_Pin GPIO_PIN_15 -#define HART_CLK_GPIO_Port GPIOA -#define LCD_TX_Pin GPIO_PIN_10 -#define LCD_TX_GPIO_Port GPIOC -#define LCD_RX_Pin GPIO_PIN_11 -#define LCD_RX_GPIO_Port GPIOC -#define HART1_TX_Pin GPIO_PIN_12 -#define HART1_TX_GPIO_Port GPIOC -#define HART1_RTS_Pin GPIO_PIN_0 -#define HART1_RTS_GPIO_Port GPIOD -#define HART1_OCD_Pin GPIO_PIN_1 -#define HART1_OCD_GPIO_Port GPIOD -#define HART1_OCD_EXTI_IRQn EXTI1_IRQn -#define HART1_RX_Pin GPIO_PIN_2 -#define HART1_RX_GPIO_Port GPIOD -#define HART2_OCD_Pin GPIO_PIN_3 -#define HART2_OCD_GPIO_Port GPIOD -#define HART2_OCD_EXTI_IRQn EXTI3_IRQn -#define HART2_RTS_Pin GPIO_PIN_4 -#define HART2_RTS_GPIO_Port GPIOD -#define HART2_TX_Pin GPIO_PIN_5 -#define HART2_TX_GPIO_Port GPIOD -#define HART2_RX_Pin GPIO_PIN_6 -#define HART2_RX_GPIO_Port GPIOD -#define HART2_RST_Pin GPIO_PIN_7 -#define HART2_RST_GPIO_Port GPIOD -#define DAC1_CS_Pin GPIO_PIN_6 -#define DAC1_CS_GPIO_Port GPIOB -#define DAC2_CS_Pin GPIO_PIN_7 -#define DAC2_CS_GPIO_Port GPIOB -#define ADC_CS_Pin GPIO_PIN_0 -#define ADC_CS_GPIO_Port GPIOE -#define AD7124_SYNC_Pin GPIO_PIN_1 -#define AD7124_SYNC_GPIO_Port GPIOE +#define DO_CH4_Pin GPIO_PIN_13 +#define DO_CH4_GPIO_Port GPIOD +#define DO_CH5_Pin GPIO_PIN_14 +#define DO_CH5_GPIO_Port GPIOD +#define DO_CH6_Pin GPIO_PIN_15 +#define DO_CH6_GPIO_Port GPIOD +#define DO_CH7_Pin GPIO_PIN_9 +#define DO_CH7_GPIO_Port GPIOC +#define DO_CH8_Pin GPIO_PIN_8 +#define DO_CH8_GPIO_Port GPIOA +#define DO_CH9_Pin GPIO_PIN_11 +#define DO_CH9_GPIO_Port GPIOA +#define DO_CH10_Pin GPIO_PIN_12 +#define DO_CH10_GPIO_Port GPIOA +#define DO_CH11_Pin GPIO_PIN_15 +#define DO_CH11_GPIO_Port GPIOA +#define DO_CH12_Pin GPIO_PIN_12 +#define DO_CH12_GPIO_Port GPIOC +#define DO_CH13_Pin GPIO_PIN_0 +#define DO_CH13_GPIO_Port GPIOD +#define DO_CH14_Pin GPIO_PIN_1 +#define DO_CH14_GPIO_Port GPIOD +#define DO_CH15_Pin GPIO_PIN_2 +#define DO_CH15_GPIO_Port GPIOD +#define DO_CH16_Pin GPIO_PIN_3 +#define DO_CH16_GPIO_Port GPIOD +#define DI_CH1_Pin GPIO_PIN_4 +#define DI_CH1_GPIO_Port GPIOD +#define DI_CH2_Pin GPIO_PIN_5 +#define DI_CH2_GPIO_Port GPIOD +#define DI_CH3_Pin GPIO_PIN_6 +#define DI_CH3_GPIO_Port GPIOD +#define DI_CH4_Pin GPIO_PIN_7 +#define DI_CH4_GPIO_Port GPIOD +#define DI_CH5_Pin GPIO_PIN_3 +#define DI_CH5_GPIO_Port GPIOB +#define DI_CH6_Pin GPIO_PIN_4 +#define DI_CH6_GPIO_Port GPIOB +#define DI_CH7_Pin GPIO_PIN_5 +#define DI_CH7_GPIO_Port GPIOB +#define DI_CH8_Pin GPIO_PIN_6 +#define DI_CH8_GPIO_Port GPIOB +#define DI_CH9_Pin GPIO_PIN_7 +#define DI_CH9_GPIO_Port GPIOB +#define DI_CH10_Pin GPIO_PIN_0 +#define DI_CH10_GPIO_Port GPIOE +#define DI_CH11_Pin GPIO_PIN_1 +#define DI_CH11_GPIO_Port GPIOE /* USER CODE BEGIN Private defines */ #define TRUE 0 diff --git a/Core/Inc/spi.h b/Core/Inc/spi.h deleted file mode 100644 index 0bd89bb..0000000 --- a/Core/Inc/spi.h +++ /dev/null @@ -1,52 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file spi.h - * @brief This file contains all the function prototypes for - * the spi.c file - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __SPI_H__ -#define __SPI_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -extern SPI_HandleTypeDef hspi1; - -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -void MX_SPI1_Init(void); - -/* USER CODE BEGIN Prototypes */ - -/* USER CODE END Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif /* __SPI_H__ */ - diff --git a/Core/Inc/stm32f4xx_hal_conf.h b/Core/Inc/stm32f4xx_hal_conf.h index c48bc13..51dd0b3 100644 --- a/Core/Inc/stm32f4xx_hal_conf.h +++ b/Core/Inc/stm32f4xx_hal_conf.h @@ -62,9 +62,9 @@ /* #define HAL_SAI_MODULE_ENABLED */ /* #define HAL_SD_MODULE_ENABLED */ /* #define HAL_MMC_MODULE_ENABLED */ -#define HAL_SPI_MODULE_ENABLED +/* #define HAL_SPI_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED +/* #define HAL_UART_MODULE_ENABLED */ /* #define HAL_USART_MODULE_ENABLED */ /* #define HAL_IRDA_MODULE_ENABLED */ /* #define HAL_SMARTCARD_MODULE_ENABLED */ diff --git a/Core/Inc/stm32f4xx_it.h b/Core/Inc/stm32f4xx_it.h index 257123a..a078dc6 100644 --- a/Core/Inc/stm32f4xx_it.h +++ b/Core/Inc/stm32f4xx_it.h @@ -52,26 +52,9 @@ void MemManage_Handler(void); void BusFault_Handler(void); void UsageFault_Handler(void); void DebugMon_Handler(void); -void EXTI1_IRQHandler(void); -void EXTI3_IRQHandler(void); -void DMA1_Stream0_IRQHandler(void); -void DMA1_Stream1_IRQHandler(void); -void DMA1_Stream2_IRQHandler(void); -void DMA1_Stream3_IRQHandler(void); -void DMA1_Stream4_IRQHandler(void); -void DMA1_Stream5_IRQHandler(void); -void DMA1_Stream6_IRQHandler(void); void TIM1_UP_TIM10_IRQHandler(void); void TIM3_IRQHandler(void); -void USART2_IRQHandler(void); -void USART3_IRQHandler(void); -void DMA1_Stream7_IRQHandler(void); -void UART4_IRQHandler(void); -void UART5_IRQHandler(void); -void DMA2_Stream1_IRQHandler(void); void ETH_IRQHandler(void); -void DMA2_Stream6_IRQHandler(void); -void USART6_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/Core/Inc/tim.h b/Core/Inc/tim.h index a898331..6744b80 100644 --- a/Core/Inc/tim.h +++ b/Core/Inc/tim.h @@ -87,8 +87,6 @@ extern TIM_HandleTypeDef htim3; void MX_TIM2_Init(void); void MX_TIM3_Init(void); -void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - /* USER CODE BEGIN Prototypes */ /* USER CODE END Prototypes */ diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h deleted file mode 100644 index 52d82ae..0000000 --- a/Core/Inc/usart.h +++ /dev/null @@ -1,69 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file usart.h - * @brief This file contains all the function prototypes for - * the usart.c file - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USART_H__ -#define __USART_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -extern UART_HandleTypeDef huart4; - -extern UART_HandleTypeDef huart5; - -extern UART_HandleTypeDef huart2; - -extern UART_HandleTypeDef huart3; - -extern UART_HandleTypeDef huart6; - -/* USER CODE BEGIN Private defines */ - - // #define BUFFER_SIZE 100 - // extern volatile uint8_t rx_len; // 接收?帧数据的长度 - // extern volatile uint8_t recv_end_flag; // ?帧数据接收完成标? - // extern uint8_t rx_buffer[BUFFER_SIZE]; // 接收数据缓存数组 - -/* USER CODE END Private defines */ - -void MX_UART4_Init(void); -void MX_UART5_Init(void); -void MX_USART2_UART_Init(void); -void MX_USART3_UART_Init(void); -void MX_USART6_UART_Init(void); - -/* USER CODE BEGIN Prototypes */ - void dma_usart_send(UART_HandleTypeDef *huart, uint8_t *buf, uint8_t len); // 串口发?封? -/* USER CODE END Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif /* __USART_H__ */ - diff --git a/Core/Src/dma.c b/Core/Src/dma.c deleted file mode 100644 index df6eb8e..0000000 --- a/Core/Src/dma.c +++ /dev/null @@ -1,83 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file dma.c - * @brief This file provides code for the configuration - * of all the requested memory to memory DMA transfers. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "dma.h" - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -/*----------------------------------------------------------------------------*/ -/* Configure DMA */ -/*----------------------------------------------------------------------------*/ - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ - -/** - * Enable DMA controller clock - */ -void MX_DMA_Init(void) -{ - - /* DMA controller clock enable */ - __HAL_RCC_DMA2_CLK_ENABLE(); - __HAL_RCC_DMA1_CLK_ENABLE(); - - /* DMA interrupt init */ - /* DMA1_Stream0_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); - /* DMA1_Stream1_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); - /* DMA1_Stream2_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn); - /* DMA1_Stream3_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); - /* DMA1_Stream4_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn); - /* DMA1_Stream5_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); - /* DMA1_Stream6_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); - /* DMA1_Stream7_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn); - /* DMA2_Stream1_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn); - /* DMA2_Stream6_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn); - -} - -/* USER CODE BEGIN 2 */ - -/* USER CODE END 2 */ - diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 569c205..4ee25dc 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -25,9 +25,7 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -#include "dac161s997.h" -#include "ad7124.h" -#include "usart.h" + #include "communication_protocol.h" /* USER CODE END Includes */ @@ -51,21 +49,17 @@ /* USER CODE END Variables */ osThreadId lwip_taskHandle; -osThreadId led_taskHandle; -osThreadId dac_taskHandle; -osThreadId adc_taskHandle; osThreadId gpio_di_do_taskHandle; +osThreadId leds_taskHandle; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ -extern float current_buff[2]; + /* USER CODE END FunctionPrototypes */ void start_tcp_task(void const * argument); -void start_led_toggle_task(void const * argument); -void start_dac_task(void const * argument); -void start_adc_task(void const * argument); void start_gpio_di_do_task(void const * argument); +void start_leds_task(void const * argument); extern void MX_LWIP_Init(void); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ @@ -117,22 +111,14 @@ void MX_FREERTOS_Init(void) { osThreadDef(lwip_task, start_tcp_task, osPriorityHigh, 0, 512); lwip_taskHandle = osThreadCreate(osThread(lwip_task), NULL); - /* definition and creation of led_task */ - osThreadDef(led_task, start_led_toggle_task, osPriorityLow, 0, 128); - led_taskHandle = osThreadCreate(osThread(led_task), NULL); - - /* definition and creation of dac_task */ - osThreadDef(dac_task, start_dac_task, osPriorityNormal, 0, 512); - dac_taskHandle = osThreadCreate(osThread(dac_task), NULL); - - /* definition and creation of adc_task */ - osThreadDef(adc_task, start_adc_task, osPriorityBelowNormal, 0, 128); - adc_taskHandle = osThreadCreate(osThread(adc_task), NULL); - /* definition and creation of gpio_di_do_task */ osThreadDef(gpio_di_do_task, start_gpio_di_do_task, osPriorityNormal, 0, 128); gpio_di_do_taskHandle = osThreadCreate(osThread(gpio_di_do_task), NULL); + /* definition and creation of leds_task */ + osThreadDef(leds_task, start_leds_task, osPriorityIdle, 0, 128); + leds_taskHandle = osThreadCreate(osThread(leds_task), NULL); + /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ @@ -156,96 +142,12 @@ void start_tcp_task(void const * argument) for (;;) { // osThreadTerminate(NULL); - // if (tcp_send_flags_hart1 == 1) - // { - // user_send_data_hart1(hart1_uart5.rx_data, hart1_uart5.rx_num); - // tcp_send_flags_hart1 = 0; - // } - // if (tcp_send_flags_hart2 == 1) - // { - // user_send_data_hart2(hart2_uart2.rx_data, hart2_uart2.rx_num); - // tcp_send_flags_hart2 = 0; - // } vTaskDelay(1); - // osDelay(1); } /* USER CODE END start_tcp_task */ } -/* USER CODE BEGIN Header_start_led_toggle_task */ -/** - * @brief Function implementing the led_task thread. - * @param argument: Not used - * @retval None - */ -/* USER CODE END Header_start_led_toggle_task */ -void start_led_toggle_task(void const * argument) -{ - /* USER CODE BEGIN start_led_toggle_task */ - /* Infinite loop */ - for (;;) - { - // HAL_GPIO_TogglePin(LED2_G_GPIO_Port, LED2_G_Pin); - vTaskDelay(500); - } - /* USER CODE END start_led_toggle_task */ -} - -/* USER CODE BEGIN Header_start_dac_task */ -/** - * @brief Function implementing the dac_task thread. - * @param argument: Not used - * @retval None - */ -/* USER CODE END Header_start_dac_task */ -void start_dac_task(void const * argument) -{ - /* USER CODE BEGIN start_dac_task */ - dac161s997_init(); - /* Infinite loop */ - for (;;) - { - dac161s997_output(DAC161S997_1, current_buff[0]); - dac161s997_output(DAC161S997_2, current_buff[1]); - - vTaskDelay(100); - } - /* USER CODE END start_dac_task */ -} - -/* USER CODE BEGIN Header_start_adc_task */ -/** - * @brief Function implementing the adc_task thread. - * @param argument: Not used - * @retval None - */ -/* USER CODE END Header_start_adc_task */ -void start_adc_task(void const * argument) -{ - /* USER CODE BEGIN start_adc_task */ - ad7124_setup(); - /* Infinite loop */ - for (;;) - { - uint8_t ch = 0; - for (ch = STOP_NC_ADC; ch < AD7124_CHANNEL_EN_MAX; ch++) - { - ad7124_get_analog(ch); - } - HAL_GPIO_TogglePin(LED2_G_GPIO_Port, LED2_G_Pin); - if (huart5.RxState == HAL_UART_STATE_READY) - { - HAL_UARTEx_ReceiveToIdle_DMA(&huart5, hart1_uart5.rx_data_temp, ARRAY_LEN(hart1_uart5.rx_data_temp)); - } - if (huart2.RxState == HAL_UART_STATE_READY) - { - HAL_UARTEx_ReceiveToIdle_DMA(&huart2, hart2_uart2.rx_data_temp, ARRAY_LEN(hart2_uart2.rx_data_temp)); - } - } - /* USER CODE END start_adc_task */ -} - /* USER CODE BEGIN Header_start_gpio_di_do_task */ /** * @brief Function implementing the gpio_di_do_task thread. @@ -264,6 +166,25 @@ void start_gpio_di_do_task(void const * argument) /* USER CODE END start_gpio_di_do_task */ } +/* USER CODE BEGIN Header_start_leds_task */ +/** + * @brief Function implementing the leds_task thread. + * @param argument: Not used + * @retval None + */ +/* USER CODE END Header_start_leds_task */ +void start_leds_task(void const * argument) +{ + /* USER CODE BEGIN start_leds_task */ + /* Infinite loop */ + for (;;) + { + HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin); + vTaskDelay(500); + } + /* USER CODE END start_leds_task */ +} + /* Private application code --------------------------------------------------*/ /* USER CODE BEGIN Application */ diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 605594a..a730d72 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -53,27 +53,26 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOC, ETH_RESET_Pin|DO_CH7_Pin|DO_CH12_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, LED3_R_Pin|LED3_G_Pin|DAC1_CS_Pin|DAC2_CS_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOB, LED_R_Pin|LED_G_Pin|DO_EN_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOE, LED3_Y_Pin|LED2_R_Pin|LED2_G_Pin|LED2_Y_Pin - |ADC_CS_Pin|AD7124_SYNC_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LED_Y_GPIO_Port, LED_Y_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOD, DO_CH4_Pin|DO_CH3_Pin|DO_CH1_Pin|DO_CH2_Pin - |DO_EN_Pin|HART1_RTS_Pin|HART2_RTS_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOD, DO_CH1_Pin|DO_CH2_Pin|DO_CH3_Pin|DO_CH4_Pin + |DO_CH5_Pin|DO_CH6_Pin|DO_CH13_Pin|DO_CH14_Pin + |DO_CH15_Pin|DO_CH16_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(HART1_RST_GPIO_Port, HART1_RST_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOA, DO_CH8_Pin|DO_CH9_Pin|DO_CH10_Pin|DO_CH11_Pin, GPIO_PIN_SET); - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(HART2_RST_GPIO_Port, HART2_RST_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pins : PEPin PEPin */ - GPIO_InitStruct.Pin = DI_CH5_Pin|DI_CH6_Pin; + /*Configure GPIO pins : PEPin PEPin PEPin PEPin + PEPin PEPin PEPin */ + GPIO_InitStruct.Pin = DI_CH12_Pin|DI_CH13_Pin|DI_CH14_Pin|DI_CH15_Pin + |DI_CH16_Pin|DI_CH10_Pin|DI_CH11_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); @@ -85,87 +84,59 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; HAL_GPIO_Init(ETH_RESET_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : PBPin PBPin */ - GPIO_InitStruct.Pin = LED3_R_Pin|LED3_G_Pin; + /*Configure GPIO pins : PBPin PBPin PBPin */ + GPIO_InitStruct.Pin = LED_R_Pin|LED_G_Pin|DO_EN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure GPIO pins : PEPin PEPin PEPin PEPin */ - GPIO_InitStruct.Pin = LED3_Y_Pin|LED2_R_Pin|LED2_G_Pin|LED2_Y_Pin; + /*Configure GPIO pin : PtPin */ + GPIO_InitStruct.Pin = LED_Y_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + HAL_GPIO_Init(LED_Y_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : PDPin PDPin PDPin PDPin */ - GPIO_InitStruct.Pin = DO_CH4_Pin|DO_CH3_Pin|DO_CH1_Pin|DO_CH2_Pin; + /*Configure GPIO pins : PDPin PDPin PDPin PDPin + PDPin PDPin PDPin PDPin + PDPin PDPin */ + GPIO_InitStruct.Pin = DO_CH1_Pin|DO_CH2_Pin|DO_CH3_Pin|DO_CH4_Pin + |DO_CH5_Pin|DO_CH6_Pin|DO_CH13_Pin|DO_CH14_Pin + |DO_CH15_Pin|DO_CH16_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - /*Configure GPIO pins : PDPin PDPin PDPin PDPin */ - GPIO_InitStruct.Pin = DO_EN_Pin|HART1_RTS_Pin|HART2_RTS_Pin|HART2_RST_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - /*Configure GPIO pins : PCPin PCPin */ - GPIO_InitStruct.Pin = DI_CH1_Pin|DI_CH2_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Pin = DO_CH7_Pin|DO_CH12_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /*Configure GPIO pin : PtPin */ - GPIO_InitStruct.Pin = HART1_RST_Pin; + /*Configure GPIO pins : PAPin PAPin PAPin PAPin */ + GPIO_InitStruct.Pin = DO_CH8_Pin|DO_CH9_Pin|DO_CH10_Pin|DO_CH11_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(HART1_RST_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pins : PAPin PAPin */ - GPIO_InitStruct.Pin = DI_CH3_Pin|DI_CH4_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /*Configure GPIO pins : PDPin PDPin */ - GPIO_InitStruct.Pin = HART1_OCD_Pin|HART2_OCD_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + /*Configure GPIO pins : PDPin PDPin PDPin PDPin */ + GPIO_InitStruct.Pin = DI_CH1_Pin|DI_CH2_Pin|DI_CH3_Pin|DI_CH4_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - /*Configure GPIO pins : PBPin PBPin */ - GPIO_InitStruct.Pin = DAC1_CS_Pin|DAC2_CS_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + /*Configure GPIO pins : PBPin PBPin PBPin PBPin + PBPin */ + GPIO_InitStruct.Pin = DI_CH5_Pin|DI_CH6_Pin|DI_CH7_Pin|DI_CH8_Pin + |DI_CH9_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure GPIO pin : PtPin */ - GPIO_InitStruct.Pin = ADC_CS_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(ADC_CS_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : PtPin */ - GPIO_InitStruct.Pin = AD7124_SYNC_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(AD7124_SYNC_GPIO_Port, &GPIO_InitStruct); - - /* EXTI interrupt init*/ - HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(EXTI1_IRQn); - - HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(EXTI3_IRQn); - } /* USER CODE BEGIN 2 */ @@ -186,6 +157,42 @@ void gpio_do_test(uint8_t gpio_num, GPIO_PinState state) case DO_4: HAL_GPIO_WritePin(DO_CH4_GPIO_Port, DO_CH4_Pin, state); break; + case DO_5: + HAL_GPIO_WritePin(DO_CH5_GPIO_Port, DO_CH5_Pin, state); + break; + case DO_6: + HAL_GPIO_WritePin(DO_CH6_GPIO_Port, DO_CH6_Pin, state); + break; + case DO_7: + HAL_GPIO_WritePin(DO_CH7_GPIO_Port, DO_CH7_Pin, state); + break; + case DO_8: + HAL_GPIO_WritePin(DO_CH8_GPIO_Port, DO_CH8_Pin, state); + break; + case DO_9: + HAL_GPIO_WritePin(DO_CH9_GPIO_Port, DO_CH9_Pin, state); + break; + case DO_10: + HAL_GPIO_WritePin(DO_CH10_GPIO_Port, DO_CH10_Pin, state); + break; + case DO_11: + HAL_GPIO_WritePin(DO_CH11_GPIO_Port, DO_CH11_Pin, state); + break; + case DO_12: + HAL_GPIO_WritePin(DO_CH12_GPIO_Port, DO_CH12_Pin, state); + break; + case DO_13: + HAL_GPIO_WritePin(DO_CH13_GPIO_Port, DO_CH13_Pin, state); + break; + case DO_14: + HAL_GPIO_WritePin(DO_CH14_GPIO_Port, DO_CH14_Pin, state); + break; + case DO_15: + HAL_GPIO_WritePin(DO_CH15_GPIO_Port, DO_CH15_Pin, state); + break; + case DO_16: + HAL_GPIO_WritePin(DO_CH16_GPIO_Port, DO_CH16_Pin, state); + break; default: break; } @@ -214,6 +221,36 @@ GPIO_PinState gpio_di_test(uint8_t gpio_num) case DI_6: state = HAL_GPIO_ReadPin(DI_CH6_GPIO_Port, DI_CH6_Pin); break; + case DI_7: + state = HAL_GPIO_ReadPin(DI_CH7_GPIO_Port, DI_CH7_Pin); + break; + case DI_8: + state = HAL_GPIO_ReadPin(DI_CH8_GPIO_Port, DI_CH8_Pin); + break; + case DI_9: + state = HAL_GPIO_ReadPin(DI_CH9_GPIO_Port, DI_CH9_Pin); + break; + case DI_10: + state = HAL_GPIO_ReadPin(DI_CH10_GPIO_Port, DI_CH10_Pin); + break; + case DI_11: + state = HAL_GPIO_ReadPin(DI_CH11_GPIO_Port, DI_CH11_Pin); + break; + case DI_12: + state = HAL_GPIO_ReadPin(DI_CH12_GPIO_Port, DI_CH12_Pin); + break; + case DI_13: + state = HAL_GPIO_ReadPin(DI_CH13_GPIO_Port, DI_CH13_Pin); + break; + case DI_14: + state = HAL_GPIO_ReadPin(DI_CH14_GPIO_Port, DI_CH14_Pin); + break; + case DI_15: + state = HAL_GPIO_ReadPin(DI_CH15_GPIO_Port, DI_CH15_Pin); + break; + case DI_16: + state = HAL_GPIO_ReadPin(DI_CH16_GPIO_Port, DI_CH16_Pin); + break; default: state = GPIO_PIN_RESET; break; diff --git a/Core/Src/main.c b/Core/Src/main.c index c33f82f..a3b6da9 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -19,11 +19,8 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "cmsis_os.h" -#include "dma.h" #include "lwip.h" -#include "spi.h" #include "tim.h" -#include "usart.h" #include "gpio.h" /* Private includes ----------------------------------------------------------*/ @@ -31,8 +28,7 @@ #include "stdio.h" #include "lwip/api.h" #include "lwip/tcp.h" -#include "ad7124.h" -#include "ht1200m.h" + /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -65,17 +61,7 @@ void MX_FREERTOS_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ -uart_t lcd_uart4 = {0}; -uart_t ble1_uart6 = {0}; -uart_t ble2_uart3 = {0}; -uart_t hart2_uart2 = {0}; -uart_t hart1_uart5 = {0}; -float current_buff[2] = {12.0f, 12.0f}; -uint8_t tcp_echo_flags_hart1 = 0; -uint8_t tcp_echo_flags_hart2 = 0; -uint8_t tcp_echo_flags_ble1 = 0; -uint8_t tcp_echo_flags_ble2 = 0; uint8_t tcp_echo_flags_control = 0; /* USER CODE END 0 */ @@ -107,25 +93,11 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); - MX_DMA_Init(); MX_TIM3_Init(); - MX_SPI1_Init(); - MX_USART6_UART_Init(); - MX_UART4_Init(); MX_TIM2_Init(); - MX_UART5_Init(); - MX_USART2_UART_Init(); - MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ // HAL_GPIO_WritePin(DO_EN_GPIO_Port, DO_EN_Pin, GPIO_PIN_SET); // DO输出使能 - HAL_UARTEx_ReceiveToIdle_DMA(&huart4, lcd_uart4.rx_data_temp, ARRAY_LEN(lcd_uart4.rx_data_temp)); - HAL_UARTEx_ReceiveToIdle_DMA(&huart6, ble1_uart6.rx_data_temp, ARRAY_LEN(ble1_uart6.rx_data_temp)); - HAL_UARTEx_ReceiveToIdle_DMA(&huart3, ble2_uart3.rx_data_temp, ARRAY_LEN(ble2_uart3.rx_data_temp)); - HAL_UARTEx_ReceiveToIdle_DMA(&huart5, hart1_uart5.rx_data_temp, ARRAY_LEN(hart1_uart5.rx_data_temp)); - HAL_UARTEx_ReceiveToIdle_DMA(&huart2, hart2_uart2.rx_data_temp, ARRAY_LEN(hart2_uart2.rx_data_temp)); - hart_ht1200m_reset(); // 初始化HT1200M模块 - HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // PWM输出,用于驱动HT1200M模块 /* USER CODE END 2 */ /* Call init function for freertos objects (in freertos.c) */ @@ -192,68 +164,6 @@ void SystemClock_Config(void) /* USER CODE BEGIN 4 */ -void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) -{ - if (huart == &huart6) - { - __HAL_UNLOCK(huart); - ble1_uart6.rx_num = Size; - memset(ble1_uart6.rx_data, 0, ARRAY_LEN(ble1_uart6.rx_data)); - memcpy(ble1_uart6.rx_data, ble1_uart6.rx_data_temp, Size); - if (tcp_echo_flags_ble1 == 1) - { - user_send_data_ble1(ble1_uart6.rx_data, Size); - } - HAL_UARTEx_ReceiveToIdle_DMA(&huart6, ble1_uart6.rx_data_temp, ARRAY_LEN(ble1_uart6.rx_data_temp)); - } - if (huart == &huart3) - { - __HAL_UNLOCK(huart); - ble2_uart3.rx_num = Size; - memset(ble2_uart3.rx_data, 0, ARRAY_LEN(ble2_uart3.rx_data)); - memcpy(ble2_uart3.rx_data, ble2_uart3.rx_data_temp, Size); - if (tcp_echo_flags_ble2 == 1) - { - user_send_data_ble2(ble2_uart3.rx_data, Size); - } - HAL_UARTEx_ReceiveToIdle_DMA(&huart3, ble2_uart3.rx_data_temp, ARRAY_LEN(ble2_uart3.rx_data_temp)); - } - if (huart == &huart5) - { - __HAL_UNLOCK(huart); - hart1_uart5.rx_num = Size; - memset(hart1_uart5.rx_data, 0, ARRAY_LEN(hart1_uart5.rx_data)); - memcpy(hart1_uart5.rx_data, hart1_uart5.rx_data_temp, Size); - if (tcp_echo_flags_hart1 == 1) - { - user_send_data_hart1(hart1_uart5.rx_data, Size); - } - HAL_UARTEx_ReceiveToIdle_DMA(&huart5, hart1_uart5.rx_data_temp, ARRAY_LEN(hart1_uart5.rx_data_temp)); - } - if (huart == &huart2) - { - __HAL_UNLOCK(huart); - hart2_uart2.rx_num = Size; - memset(hart2_uart2.rx_data, 0, ARRAY_LEN(hart2_uart2.rx_data)); - memcpy(hart2_uart2.rx_data, hart2_uart2.rx_data_temp, Size); - if (tcp_echo_flags_hart2 == 1) - { - user_send_data_hart2(hart2_uart2.rx_data, Size); - } - HAL_UARTEx_ReceiveToIdle_DMA(&huart2, hart2_uart2.rx_data_temp, ARRAY_LEN(hart2_uart2.rx_data_temp)); - } -} -void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) -{ - if (huart == &huart5) - { - HART1_RTS_RECEIVE; - } - if (huart == &huart2) - { - HART2_RTS_RECEIVE; - } -} /* USER CODE END 4 */ /** diff --git a/Core/Src/spi.c b/Core/Src/spi.c deleted file mode 100644 index f1fc8b4..0000000 --- a/Core/Src/spi.c +++ /dev/null @@ -1,118 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file spi.c - * @brief This file provides code for the configuration - * of the SPI instances. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "spi.h" - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -SPI_HandleTypeDef hspi1; - -/* SPI1 init function */ -void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - - /* USER CODE END SPI1_Init 1 */ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; - hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) -{ - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(spiHandle->Instance==SPI1) - { - /* USER CODE BEGIN SPI1_MspInit 0 */ - - /* USER CODE END SPI1_MspInit 0 */ - /* SPI1 clock enable */ - __HAL_RCC_SPI1_CLK_ENABLE(); - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**SPI1 GPIO Configuration - PB3 ------> SPI1_SCK - PB4 ------> SPI1_MISO - PB5 ------> SPI1_MOSI - */ - GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN SPI1_MspInit 1 */ - - /* USER CODE END SPI1_MspInit 1 */ - } -} - -void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) -{ - - if(spiHandle->Instance==SPI1) - { - /* USER CODE BEGIN SPI1_MspDeInit 0 */ - - /* USER CODE END SPI1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI1_CLK_DISABLE(); - - /**SPI1 GPIO Configuration - PB3 ------> SPI1_SCK - PB4 ------> SPI1_MISO - PB5 ------> SPI1_MOSI - */ - HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5); - - /* USER CODE BEGIN SPI1_MspDeInit 1 */ - - /* USER CODE END SPI1_MspDeInit 1 */ - } -} - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c index 4718c0d..80c3900 100644 --- a/Core/Src/stm32f4xx_it.c +++ b/Core/Src/stm32f4xx_it.c @@ -23,9 +23,7 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "tim.h" -#include "usart.h" #include "tcpserverc.h" -#include "ht1200m.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -34,10 +32,7 @@ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ -extern struct tcp_pcb *server_pcb_hart1; -extern struct tcp_pcb *server_pcb_hart2; -extern struct tcp_pcb *server_pcb_ble1; -extern struct tcp_pcb *server_pcb_ble2; + /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ @@ -63,21 +58,6 @@ extern struct tcp_pcb *server_pcb_ble2; /* External variables --------------------------------------------------------*/ extern ETH_HandleTypeDef heth; extern TIM_HandleTypeDef htim3; -extern DMA_HandleTypeDef hdma_uart4_rx; -extern DMA_HandleTypeDef hdma_uart4_tx; -extern DMA_HandleTypeDef hdma_uart5_tx; -extern DMA_HandleTypeDef hdma_uart5_rx; -extern DMA_HandleTypeDef hdma_usart2_rx; -extern DMA_HandleTypeDef hdma_usart2_tx; -extern DMA_HandleTypeDef hdma_usart3_rx; -extern DMA_HandleTypeDef hdma_usart3_tx; -extern DMA_HandleTypeDef hdma_usart6_rx; -extern DMA_HandleTypeDef hdma_usart6_tx; -extern UART_HandleTypeDef huart4; -extern UART_HandleTypeDef huart5; -extern UART_HandleTypeDef huart2; -extern UART_HandleTypeDef huart3; -extern UART_HandleTypeDef huart6; extern TIM_HandleTypeDef htim1; /* USER CODE BEGIN EV */ @@ -182,132 +162,6 @@ void DebugMon_Handler(void) /* please refer to the startup file (startup_stm32f4xx.s). */ /******************************************************************************/ -/** - * @brief This function handles EXTI line1 interrupt. - */ -void EXTI1_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI1_IRQn 0 */ - - /* USER CODE END EXTI1_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(HART1_OCD_Pin); - /* USER CODE BEGIN EXTI1_IRQn 1 */ - HAL_GPIO_TogglePin(LED3_G_GPIO_Port, LED3_G_Pin); - /* USER CODE END EXTI1_IRQn 1 */ -} - -/** - * @brief This function handles EXTI line3 interrupt. - */ -void EXTI3_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI3_IRQn 0 */ - - /* USER CODE END EXTI3_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(HART2_OCD_Pin); - /* USER CODE BEGIN EXTI3_IRQn 1 */ - HAL_GPIO_TogglePin(LED3_R_GPIO_Port, LED3_R_Pin); - /* USER CODE END EXTI3_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream0 global interrupt. - */ -void DMA1_Stream0_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ - - /* USER CODE END DMA1_Stream0_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_uart5_rx); - /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ - - /* USER CODE END DMA1_Stream0_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream1 global interrupt. - */ -void DMA1_Stream1_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ - - /* USER CODE END DMA1_Stream1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart3_rx); - /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ - - /* USER CODE END DMA1_Stream1_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream2 global interrupt. - */ -void DMA1_Stream2_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ - - /* USER CODE END DMA1_Stream2_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_uart4_rx); - /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ - - /* USER CODE END DMA1_Stream2_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream3 global interrupt. - */ -void DMA1_Stream3_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ - - /* USER CODE END DMA1_Stream3_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart3_tx); - /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ - - /* USER CODE END DMA1_Stream3_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream4 global interrupt. - */ -void DMA1_Stream4_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ - - /* USER CODE END DMA1_Stream4_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_uart4_tx); - /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ - - /* USER CODE END DMA1_Stream4_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream5 global interrupt. - */ -void DMA1_Stream5_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ - - /* USER CODE END DMA1_Stream5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart2_rx); - /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ - - /* USER CODE END DMA1_Stream5_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream6 global interrupt. - */ -void DMA1_Stream6_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ - - /* USER CODE END DMA1_Stream6_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart2_tx); - /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ - - /* USER CODE END DMA1_Stream6_IRQn 1 */ -} - /** * @brief This function handles TIM1 update interrupt and TIM10 global interrupt. */ @@ -336,130 +190,6 @@ void TIM3_IRQHandler(void) /* USER CODE END TIM3_IRQn 1 */ } -/** - * @brief This function handles USART2 global interrupt. - */ -void USART2_IRQHandler(void) -{ - /* USER CODE BEGIN USART2_IRQn 0 */ - // uint8_t receive_data = 0; - // if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) != RESET) - // { - // HAL_UART_Receive(&huart2, &receive_data, 1, 10); - // hart2_uart2.rx_data[hart2_uart2.rx_num] = receive_data; - // hart2_uart2.rx_num++; - // __HAL_UART_CLEAR_IDLEFLAG(&huart2); - // } - // // 空闲中断 - // if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE) != RESET) - // { - // if (tcp_echo_flags_hart2 == 1) - // { - // user_send_data_hart2(hart2_uart2.rx_data, hart2_uart2.rx_num); - // } - // hart2_uart2.rx_num = 0; - // __HAL_UART_CLEAR_IDLEFLAG(&huart2); - // } - /* USER CODE END USART2_IRQn 0 */ - HAL_UART_IRQHandler(&huart2); - /* USER CODE BEGIN USART2_IRQn 1 */ - - /* USER CODE END USART2_IRQn 1 */ -} - -/** - * @brief This function handles USART3 global interrupt. - */ -void USART3_IRQHandler(void) -{ - /* USER CODE BEGIN USART3_IRQn 0 */ - - /* USER CODE END USART3_IRQn 0 */ - HAL_UART_IRQHandler(&huart3); - /* USER CODE BEGIN USART3_IRQn 1 */ - - /* USER CODE END USART3_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream7 global interrupt. - */ -void DMA1_Stream7_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream7_IRQn 0 */ - // if (__HAL_DMA_GET_FLAG(&hdma_uart5_tx, DMA_FLAG_TCIF3_7) != RESET) - // { - // uint8_t i = 0; - // for (i = 0; i < 200; i++) - // { - // HART1_RTS_SEND; - // } - // HART1_RTS_RECEIVE; - // } - /* USER CODE END DMA1_Stream7_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_uart5_tx); - /* USER CODE BEGIN DMA1_Stream7_IRQn 1 */ - - /* USER CODE END DMA1_Stream7_IRQn 1 */ -} - -/** - * @brief This function handles UART4 global interrupt. - */ -void UART4_IRQHandler(void) -{ - /* USER CODE BEGIN UART4_IRQn 0 */ - /* USER CODE END UART4_IRQn 0 */ - HAL_UART_IRQHandler(&huart4); - /* USER CODE BEGIN UART4_IRQn 1 */ - - /* USER CODE END UART4_IRQn 1 */ -} - -/** - * @brief This function handles UART5 global interrupt. - */ -void UART5_IRQHandler(void) -{ - /* USER CODE BEGIN UART5_IRQn 0 */ - // uint8_t receive_data = 0; - // if (__HAL_UART_GET_FLAG(&huart5, UART_FLAG_RXNE) != RESET) - // { - // HAL_UART_Receive(&huart5, &receive_data, 1, 1); - // hart1_uart5.rx_data[hart1_uart5.rx_num] = receive_data; - // hart1_uart5.rx_num++; - // __HAL_UART_CLEAR_IDLEFLAG(&huart5); - // } - // // 空闲中断 - // if (__HAL_UART_GET_FLAG(&huart5, UART_FLAG_IDLE) != RESET) - // { - // if (tcp_echo_flags_hart1 == 1) - // { - // user_send_data_hart1(hart1_uart5.rx_data, hart1_uart5.rx_num); - // } - // hart1_uart5.rx_num = 0; - // __HAL_UART_CLEAR_IDLEFLAG(&huart5); - // } - /* USER CODE END UART5_IRQn 0 */ - HAL_UART_IRQHandler(&huart5); - /* USER CODE BEGIN UART5_IRQn 1 */ - /* USER CODE END UART5_IRQn 1 */ -} - -/** - * @brief This function handles DMA2 stream1 global interrupt. - */ -void DMA2_Stream1_IRQHandler(void) -{ - /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */ - - /* USER CODE END DMA2_Stream1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart6_rx); - /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */ - - /* USER CODE END DMA2_Stream1_IRQn 1 */ -} - /** * @brief This function handles Ethernet global interrupt. */ @@ -474,34 +204,6 @@ void ETH_IRQHandler(void) /* USER CODE END ETH_IRQn 1 */ } -/** - * @brief This function handles DMA2 stream6 global interrupt. - */ -void DMA2_Stream6_IRQHandler(void) -{ - /* USER CODE BEGIN DMA2_Stream6_IRQn 0 */ - - /* USER CODE END DMA2_Stream6_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart6_tx); - /* USER CODE BEGIN DMA2_Stream6_IRQn 1 */ - - /* USER CODE END DMA2_Stream6_IRQn 1 */ -} - -/** - * @brief This function handles USART6 global interrupt. - */ -void USART6_IRQHandler(void) -{ - /* USER CODE BEGIN USART6_IRQn 0 */ - - /* USER CODE END USART6_IRQn 0 */ - HAL_UART_IRQHandler(&huart6); - /* USER CODE BEGIN USART6_IRQn 1 */ - - /* USER CODE END USART6_IRQn 1 */ -} - /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index ae27cfe..2ebea8c 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -37,7 +37,6 @@ void MX_TIM2_Init(void) TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM2_Init 1 */ @@ -57,28 +56,15 @@ void MX_TIM2_Init(void) { Error_Handler(); } - if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 60; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } /* USER CODE BEGIN TIM2_Init 2 */ /* USER CODE END TIM2_Init 2 */ - HAL_TIM_MspPostInit(&htim2); } /* TIM3 init function */ @@ -152,33 +138,6 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM3_MspInit 1 */ } } -void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) -{ - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(timHandle->Instance==TIM2) - { - /* USER CODE BEGIN TIM2_MspPostInit 0 */ - - /* USER CODE END TIM2_MspPostInit 0 */ - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**TIM2 GPIO Configuration - PA15 ------> TIM2_CH1 - */ - GPIO_InitStruct.Pin = HART_CLK_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; - HAL_GPIO_Init(HART_CLK_GPIO_Port, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM2_MspPostInit 1 */ - - /* USER CODE END TIM2_MspPostInit 1 */ - } - -} void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) { diff --git a/Core/Src/usart.c b/Core/Src/usart.c deleted file mode 100644 index 984d66c..0000000 --- a/Core/Src/usart.c +++ /dev/null @@ -1,672 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file usart.c - * @brief This file provides code for the configuration - * of the USART instances. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "usart.h" - -/* USER CODE BEGIN 0 */ -/* USER CODE END 0 */ - -UART_HandleTypeDef huart4; -UART_HandleTypeDef huart5; -UART_HandleTypeDef huart2; -UART_HandleTypeDef huart3; -UART_HandleTypeDef huart6; -DMA_HandleTypeDef hdma_uart4_rx; -DMA_HandleTypeDef hdma_uart4_tx; -DMA_HandleTypeDef hdma_uart5_tx; -DMA_HandleTypeDef hdma_uart5_rx; -DMA_HandleTypeDef hdma_usart2_rx; -DMA_HandleTypeDef hdma_usart2_tx; -DMA_HandleTypeDef hdma_usart3_rx; -DMA_HandleTypeDef hdma_usart3_tx; -DMA_HandleTypeDef hdma_usart6_rx; -DMA_HandleTypeDef hdma_usart6_tx; - -/* UART4 init function */ -void MX_UART4_Init(void) -{ - - /* USER CODE BEGIN UART4_Init 0 */ - - /* USER CODE END UART4_Init 0 */ - - /* USER CODE BEGIN UART4_Init 1 */ - - /* USER CODE END UART4_Init 1 */ - huart4.Instance = UART4; - huart4.Init.BaudRate = 115200; - huart4.Init.WordLength = UART_WORDLENGTH_8B; - huart4.Init.StopBits = UART_STOPBITS_1; - huart4.Init.Parity = UART_PARITY_NONE; - huart4.Init.Mode = UART_MODE_TX_RX; - huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart4.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart4) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN UART4_Init 2 */ - //__HAL_UART_ENABLE_IT(&huart4, UART_IT_IDLE); // 使能IDLE中断 - /* USER CODE END UART4_Init 2 */ - -} -/* UART5 init function */ -void MX_UART5_Init(void) -{ - - /* USER CODE BEGIN UART5_Init 0 */ - - /* USER CODE END UART5_Init 0 */ - - /* USER CODE BEGIN UART5_Init 1 */ - - /* USER CODE END UART5_Init 1 */ - huart5.Instance = UART5; - huart5.Init.BaudRate = 1200; - huart5.Init.WordLength = UART_WORDLENGTH_9B; - huart5.Init.StopBits = UART_STOPBITS_1; - huart5.Init.Parity = UART_PARITY_ODD; - huart5.Init.Mode = UART_MODE_TX_RX; - huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart5.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart5) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN UART5_Init 2 */ - // __HAL_UART_ENABLE_IT(&huart5, UART_IT_RXNE); // 接收中断 - // __HAL_UART_ENABLE_IT(&huart5, UART_IT_IDLE); // 空闲中断 - /* USER CODE END UART5_Init 2 */ - -} -/* USART2 init function */ - -void MX_USART2_UART_Init(void) -{ - - /* USER CODE BEGIN USART2_Init 0 */ - - /* USER CODE END USART2_Init 0 */ - - /* USER CODE BEGIN USART2_Init 1 */ - - /* USER CODE END USART2_Init 1 */ - huart2.Instance = USART2; - huart2.Init.BaudRate = 1200; - huart2.Init.WordLength = UART_WORDLENGTH_9B; - huart2.Init.StopBits = UART_STOPBITS_1; - huart2.Init.Parity = UART_PARITY_ODD; - huart2.Init.Mode = UART_MODE_TX_RX; - huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart2.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart2) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN USART2_Init 2 */ - // __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE); // 接收中断 - // __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE); // 使能IDLE中断 - /* USER CODE END USART2_Init 2 */ - -} -/* USART3 init function */ - -void MX_USART3_UART_Init(void) -{ - - /* USER CODE BEGIN USART3_Init 0 */ - - /* USER CODE END USART3_Init 0 */ - - /* USER CODE BEGIN USART3_Init 1 */ - - /* USER CODE END USART3_Init 1 */ - huart3.Instance = USART3; - huart3.Init.BaudRate = 115200; - huart3.Init.WordLength = UART_WORDLENGTH_8B; - huart3.Init.StopBits = UART_STOPBITS_1; - huart3.Init.Parity = UART_PARITY_NONE; - huart3.Init.Mode = UART_MODE_TX_RX; - huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart3.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart3) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN USART3_Init 2 */ - - /* USER CODE END USART3_Init 2 */ - -} -/* USART6 init function */ - -void MX_USART6_UART_Init(void) -{ - - /* USER CODE BEGIN USART6_Init 0 */ - - /* USER CODE END USART6_Init 0 */ - - /* USER CODE BEGIN USART6_Init 1 */ - - /* USER CODE END USART6_Init 1 */ - huart6.Instance = USART6; - huart6.Init.BaudRate = 115200; - huart6.Init.WordLength = UART_WORDLENGTH_8B; - huart6.Init.StopBits = UART_STOPBITS_1; - huart6.Init.Parity = UART_PARITY_NONE; - huart6.Init.Mode = UART_MODE_TX_RX; - huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart6.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart6) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN USART6_Init 2 */ - - /* USER CODE END USART6_Init 2 */ - -} - -void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) -{ - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(uartHandle->Instance==UART4) - { - /* USER CODE BEGIN UART4_MspInit 0 */ - - /* USER CODE END UART4_MspInit 0 */ - /* UART4 clock enable */ - __HAL_RCC_UART4_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**UART4 GPIO Configuration - PC10 ------> UART4_TX - PC11 ------> UART4_RX - */ - GPIO_InitStruct.Pin = LCD_TX_Pin|LCD_RX_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF8_UART4; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* UART4 DMA Init */ - /* UART4_RX Init */ - hdma_uart4_rx.Instance = DMA1_Stream2; - hdma_uart4_rx.Init.Channel = DMA_CHANNEL_4; - hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_uart4_rx.Init.Mode = DMA_NORMAL; - hdma_uart4_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_uart4_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart4_rx); - - /* UART4_TX Init */ - hdma_uart4_tx.Instance = DMA1_Stream4; - hdma_uart4_tx.Init.Channel = DMA_CHANNEL_4; - hdma_uart4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_uart4_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_uart4_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_uart4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_uart4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_uart4_tx.Init.Mode = DMA_NORMAL; - hdma_uart4_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_uart4_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_uart4_tx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart4_tx); - - /* UART4 interrupt Init */ - HAL_NVIC_SetPriority(UART4_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(UART4_IRQn); - /* USER CODE BEGIN UART4_MspInit 1 */ - - /* USER CODE END UART4_MspInit 1 */ - } - else if(uartHandle->Instance==UART5) - { - /* USER CODE BEGIN UART5_MspInit 0 */ - - /* USER CODE END UART5_MspInit 0 */ - /* UART5 clock enable */ - __HAL_RCC_UART5_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**UART5 GPIO Configuration - PC12 ------> UART5_TX - PD2 ------> UART5_RX - */ - GPIO_InitStruct.Pin = HART1_TX_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF8_UART5; - HAL_GPIO_Init(HART1_TX_GPIO_Port, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = HART1_RX_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF8_UART5; - HAL_GPIO_Init(HART1_RX_GPIO_Port, &GPIO_InitStruct); - - /* UART5 DMA Init */ - /* UART5_TX Init */ - hdma_uart5_tx.Instance = DMA1_Stream7; - hdma_uart5_tx.Init.Channel = DMA_CHANNEL_4; - hdma_uart5_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_uart5_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_uart5_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_uart5_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_uart5_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_uart5_tx.Init.Mode = DMA_NORMAL; - hdma_uart5_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_uart5_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_uart5_tx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart5_tx); - - /* UART5_RX Init */ - hdma_uart5_rx.Instance = DMA1_Stream0; - hdma_uart5_rx.Init.Channel = DMA_CHANNEL_4; - hdma_uart5_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_uart5_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_uart5_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_uart5_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_uart5_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_uart5_rx.Init.Mode = DMA_NORMAL; - hdma_uart5_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_uart5_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_uart5_rx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart5_rx); - - /* UART5 interrupt Init */ - HAL_NVIC_SetPriority(UART5_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(UART5_IRQn); - /* USER CODE BEGIN UART5_MspInit 1 */ - - /* USER CODE END UART5_MspInit 1 */ - } - else if(uartHandle->Instance==USART2) - { - /* USER CODE BEGIN USART2_MspInit 0 */ - - /* USER CODE END USART2_MspInit 0 */ - /* USART2 clock enable */ - __HAL_RCC_USART2_CLK_ENABLE(); - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - GPIO_InitStruct.Pin = HART2_TX_Pin|HART2_RX_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USART2 DMA Init */ - /* USART2_RX Init */ - hdma_usart2_rx.Instance = DMA1_Stream5; - hdma_usart2_rx.Init.Channel = DMA_CHANNEL_4; - hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart2_rx.Init.Mode = DMA_NORMAL; - hdma_usart2_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_usart2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx); - - /* USART2_TX Init */ - hdma_usart2_tx.Instance = DMA1_Stream6; - hdma_usart2_tx.Init.Channel = DMA_CHANNEL_4; - hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart2_tx.Init.Mode = DMA_NORMAL; - hdma_usart2_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_usart2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); - - /* USART2 interrupt Init */ - HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART2_IRQn); - /* USER CODE BEGIN USART2_MspInit 1 */ - - /* USER CODE END USART2_MspInit 1 */ - } - else if(uartHandle->Instance==USART3) - { - /* USER CODE BEGIN USART3_MspInit 0 */ - - /* USER CODE END USART3_MspInit 0 */ - /* USART3 clock enable */ - __HAL_RCC_USART3_CLK_ENABLE(); - - __HAL_RCC_GPIOD_CLK_ENABLE(); - /**USART3 GPIO Configuration - PD8 ------> USART3_TX - PD9 ------> USART3_RX - */ - GPIO_InitStruct.Pin = BLE2_TX_Pin|BLE2_RX_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART3; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USART3 DMA Init */ - /* USART3_RX Init */ - hdma_usart3_rx.Instance = DMA1_Stream1; - hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4; - hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart3_rx.Init.Mode = DMA_NORMAL; - hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW; - hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx); - - /* USART3_TX Init */ - hdma_usart3_tx.Instance = DMA1_Stream3; - hdma_usart3_tx.Init.Channel = DMA_CHANNEL_4; - hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart3_tx.Init.Mode = DMA_NORMAL; - hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW; - hdma_usart3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx); - - /* USART3 interrupt Init */ - HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART3_IRQn); - /* USER CODE BEGIN USART3_MspInit 1 */ - - /* USER CODE END USART3_MspInit 1 */ - } - else if(uartHandle->Instance==USART6) - { - /* USER CODE BEGIN USART6_MspInit 0 */ - - /* USER CODE END USART6_MspInit 0 */ - /* USART6 clock enable */ - __HAL_RCC_USART6_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**USART6 GPIO Configuration - PC6 ------> USART6_TX - PC7 ------> USART6_RX - */ - GPIO_InitStruct.Pin = BLE1_TX_Pin|BLE1_RX_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF8_USART6; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* USART6 DMA Init */ - /* USART6_RX Init */ - hdma_usart6_rx.Instance = DMA2_Stream1; - hdma_usart6_rx.Init.Channel = DMA_CHANNEL_5; - hdma_usart6_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_usart6_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart6_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart6_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart6_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart6_rx.Init.Mode = DMA_NORMAL; - hdma_usart6_rx.Init.Priority = DMA_PRIORITY_LOW; - hdma_usart6_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_usart6_rx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart6_rx); - - /* USART6_TX Init */ - hdma_usart6_tx.Instance = DMA2_Stream6; - hdma_usart6_tx.Init.Channel = DMA_CHANNEL_5; - hdma_usart6_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_usart6_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart6_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart6_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart6_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart6_tx.Init.Mode = DMA_NORMAL; - hdma_usart6_tx.Init.Priority = DMA_PRIORITY_LOW; - hdma_usart6_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_usart6_tx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart6_tx); - - /* USART6 interrupt Init */ - HAL_NVIC_SetPriority(USART6_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART6_IRQn); - /* USER CODE BEGIN USART6_MspInit 1 */ - - /* USER CODE END USART6_MspInit 1 */ - } -} - -void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) -{ - - if(uartHandle->Instance==UART4) - { - /* USER CODE BEGIN UART4_MspDeInit 0 */ - - /* USER CODE END UART4_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_UART4_CLK_DISABLE(); - - /**UART4 GPIO Configuration - PC10 ------> UART4_TX - PC11 ------> UART4_RX - */ - HAL_GPIO_DeInit(GPIOC, LCD_TX_Pin|LCD_RX_Pin); - - /* UART4 DMA DeInit */ - HAL_DMA_DeInit(uartHandle->hdmarx); - HAL_DMA_DeInit(uartHandle->hdmatx); - - /* UART4 interrupt Deinit */ - HAL_NVIC_DisableIRQ(UART4_IRQn); - /* USER CODE BEGIN UART4_MspDeInit 1 */ - - /* USER CODE END UART4_MspDeInit 1 */ - } - else if(uartHandle->Instance==UART5) - { - /* USER CODE BEGIN UART5_MspDeInit 0 */ - - /* USER CODE END UART5_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_UART5_CLK_DISABLE(); - - /**UART5 GPIO Configuration - PC12 ------> UART5_TX - PD2 ------> UART5_RX - */ - HAL_GPIO_DeInit(HART1_TX_GPIO_Port, HART1_TX_Pin); - - HAL_GPIO_DeInit(HART1_RX_GPIO_Port, HART1_RX_Pin); - - /* UART5 DMA DeInit */ - HAL_DMA_DeInit(uartHandle->hdmatx); - HAL_DMA_DeInit(uartHandle->hdmarx); - - /* UART5 interrupt Deinit */ - HAL_NVIC_DisableIRQ(UART5_IRQn); - /* USER CODE BEGIN UART5_MspDeInit 1 */ - - /* USER CODE END UART5_MspDeInit 1 */ - } - else if(uartHandle->Instance==USART2) - { - /* USER CODE BEGIN USART2_MspDeInit 0 */ - - /* USER CODE END USART2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART2_CLK_DISABLE(); - - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - HAL_GPIO_DeInit(GPIOD, HART2_TX_Pin|HART2_RX_Pin); - - /* USART2 DMA DeInit */ - HAL_DMA_DeInit(uartHandle->hdmarx); - HAL_DMA_DeInit(uartHandle->hdmatx); - - /* USART2 interrupt Deinit */ - HAL_NVIC_DisableIRQ(USART2_IRQn); - /* USER CODE BEGIN USART2_MspDeInit 1 */ - - /* USER CODE END USART2_MspDeInit 1 */ - } - else if(uartHandle->Instance==USART3) - { - /* USER CODE BEGIN USART3_MspDeInit 0 */ - - /* USER CODE END USART3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART3_CLK_DISABLE(); - - /**USART3 GPIO Configuration - PD8 ------> USART3_TX - PD9 ------> USART3_RX - */ - HAL_GPIO_DeInit(GPIOD, BLE2_TX_Pin|BLE2_RX_Pin); - - /* USART3 DMA DeInit */ - HAL_DMA_DeInit(uartHandle->hdmarx); - HAL_DMA_DeInit(uartHandle->hdmatx); - - /* USART3 interrupt Deinit */ - HAL_NVIC_DisableIRQ(USART3_IRQn); - /* USER CODE BEGIN USART3_MspDeInit 1 */ - - /* USER CODE END USART3_MspDeInit 1 */ - } - else if(uartHandle->Instance==USART6) - { - /* USER CODE BEGIN USART6_MspDeInit 0 */ - - /* USER CODE END USART6_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART6_CLK_DISABLE(); - - /**USART6 GPIO Configuration - PC6 ------> USART6_TX - PC7 ------> USART6_RX - */ - HAL_GPIO_DeInit(GPIOC, BLE1_TX_Pin|BLE1_RX_Pin); - - /* USART6 DMA DeInit */ - HAL_DMA_DeInit(uartHandle->hdmarx); - HAL_DMA_DeInit(uartHandle->hdmatx); - - /* USART6 interrupt Deinit */ - HAL_NVIC_DisableIRQ(USART6_IRQn); - /* USER CODE BEGIN USART6_MspDeInit 1 */ - - /* USER CODE END USART6_MspDeInit 1 */ - } -} - -/* USER CODE BEGIN 1 */ - -/** - * @brief 使用DMA方式通过串口发?数? - * - * 该函数使用DMA方式通过指定的串口发送指定长度的数据? - * - * @param huart UART_HandleTypeDef结构体指针,指向?要使用的串口句柄 - * @param buf 指向?要发送的数据缓冲区的指针 - * @param len ?要发送的数据长度 - * - * @return 无返回?? - * - * @note 如果发?过程中出现错误,会调用Error_Handler函数处理错误 - */ -void dma_usart_send(UART_HandleTypeDef *huart, uint8_t *buf, uint8_t len) -{ - if (HAL_UART_Transmit_DMA(huart, buf, len) != HAL_OK) // 判断是否发?正常,如果出现异常则进入异常中断函? - { - Error_Handler(); - } -} - -/* USER CODE END 1 */ diff --git a/Documents/schematic diagram/Multi-channelDigitalInOut-V1.0-20250103.pdf b/Documents/schematic diagram/Multi-channelDigitalInOut-V1.0-20250103.pdf new file mode 100644 index 0000000000000000000000000000000000000000..60e8f4d40e186bab11b16355b29b0b0c45932f74 GIT binary patch literal 2442219 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
  • -N4v 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

    l`Q2H zzl8K{4sKO(I;vxRnVG!G@V&}XHPp-nAD-&ha2EzJ#_`GM6vxv({@fSaO@lqT7r1dj z3fx;2^wk8l0^u|)Q6IGPfoz=4Vj!Qh=IYsGmx(|xE+7l;Oc}m2viZ@EeMaiBkGh@A z=usia!b=Z|6wI1bgZSzQKCDwtbl1mon~QtM#mn)&c1X@}AC`gbjw1W6ob?C4T)#(I z&L=RtKrLW3LO2i@Z>?U87PGHOHV2=>Ql`10Oja5ET<;EUeiZ6$vPE3IvJ{maB+#K9 zrcR&}Qw8o=zwk0qGQmkh(_Lz(T`fCkS-H@2sq5ClyHohSJuLLRBO{&=qD;L;U0Le_ z?Pf?WN`(mCKa6Wd#->fj^bIGyfGjQpX&T*D`nWZ4%tVu(^$IH*+Z+wdqaClZAL|3r z?+$af_+dZEF9vU&6MR-`9+-vWDj$j1k;gIds}Yq_=T^HC<7T_uH1hI>v}&R`h@)DW zBVUa;8ujJHUU!^qIQ=cPE0DF3dD!e=cK@qgHW{deLLAh!d1FVelR_H+H4kqJI=ro^ zbuR+iuuO(*lS&3`gnzNo260fhi@Qhg2B3jZzi+Jh%l4xjxJfs9w_<)Bk;?venr=a7 zfEgUu*LJILKlz@x@`2exEOF%YWrlpQJTgtgfaAQbN%R>-ZoPOlZMu3pTw|t{fy`gE ze6Lgt&e_Kcmb|`&Cv>br6o-FVXsJxnhK>Nt0h3*gnhwO?xRPj>t=rE~dOK9_ZOHJ1 zrsZ4E=_)&$6ZYByjgGe5Ro}91OJo=*usry-psc`xR*;yAN9q!LdV}>R2i7vFQ?%NR zfr;W230N3^+cIL1vMXr*ad#|$iqT9usqeO(?7(vE8OzOmkZ$DKmTi!oL`JFCUZ_K^ z1%iC8O;@4hJl9=QanF%(b8;uPN#E%4ptsYZbW)0EJ)qG(vgai_;}CJlfP1b!bNsMr z2GuwixZly}R^S^1+VngGBNqs)DC<7HKlBgfVdE^rDF-GDU_lQsK1!VuNbv=2RlRN9 zyyc$JylDcOY5^}*L6;mq|C~_M;n#q`|KlCB-J4Eq+i*&p>6eW@NFzpI<`LI)%s<{Q z32c^BLF2fv74tdp_ba9?9opY$eHJOlXn0sG#pT;R+)O|NhEr`v+>8Mps zl+?Xyl4tUEPkY^Gn@ue$+DyGh%hg^nxt?5V*;}Sdqn4U?5LjFO4e>jkE5Y|+81vpB zr*-{xAkykhsw*<{{bWjg9jcPu%31mC4!gQ^?ASD2vvBHAmPHv5d)>sy zv93?R=AuyN&KQ}`Ka}*J$N$di0~CI&5q5JW5g7pEcK$d}MIZXym77+9;k8xlH6s!4fe`@I6$!m5xw!)0mPgEx%&8ET?=e0S%)k>Ka!ypdKMU+Kepiv0X5T zIo>0u_kC0BvBxcPE?g7$xmd2Ut3=rnWL3 z#uL9gW%21A-rCcz=Ap5_C8~icj5S31P8pKKja;8}v(CsrS)ITh&e|F?rgm`+; z!ills?det@(AF9D&UQ&oH&EBgGIKrg)p&U|Hs(BxFmfaBV`woS*|pgFm9t%@OZX!+ z&GMfbk;MBL7U3~3Mayz6K3cVZw8N>?iStQ`Xd8+@a9wV65dDwf;6uXq(?|Z>_X?Ky z-P&h#`(;?#>&HaK1C<0aML@^uSXTY6S-aqs=X(gO%48snhqT{Dyt8`|PTgVh<{9Q# z&SDt|+r77GjS-GqZ`fdr zcS$whEH;p=vzfEJ+vL6Hb8*wrX{K42(sK&7zO?|0l6i!QsOUp_3(B_V_KRL#Dktcv zpakk4(QdlfhzL2qod8vv(SKPGlDhY1!Z( z&PDHC2QpyNcU;tQLjZY2p!@0HJg zLg+zqW3=C2-?}oLq3KgHBiFSLHRhKT>K?yZI?3zC(Ijkm*ZzSmZ$&kFI5wB)Y&sWr zP})e%v+gnviWgRk@jkjmce)osvb`@v#%=TwrHw3(M55ig-2rQ;lT$GvaFTvhCR!R7D4N*a1Vc zg4pF*z%j3CqOiAILYnHO_d$%f5FnW#I@%vAsnWP5*;OpzA+?pLu#??cZpgh`AHxFJ z7A`d(e^?m59{)?I>#tQ9x>S_ALHu*_v$__>-%y(P-T$C;Ok_JAW}>X=9>gn6uiXeH zmpbL*b*&(J`nvaRBgLUx9`b{>w3FA!sA-JCtJNhqSb%hdHov)waZW=VLlOPP=a%%+ zX~1vV)J901!I)N+I@a_8Svih!4el8&Cx&WlzrEaoUhZY{7QwSYo?1nffzM)|H~~Sd1H-K%19hoda{)a@gwm95YsigJ1JCi3cG$=$`8zC;u zWM$N<&0-P+YQ7X|&Xt)kv1R|PM&@-Bw0N>{_1QhKW{NP zwEHP39RsQY{EWO;LM$TimNOOmJc|zO7VQP}^f`Li1mA9|6Sg?~wBMGl*~Q#^zo9<% zQBT%W^tQ>GGI$`62#Bu^g z_zaM>ikx_ZW5c_AO@shISj)iKOEIQ-Ii&-c5QO0v}eq z{)Bv^S@)cx=T>hn=ee|%_zIZd=%RMzPTXuCvnFB(iyfZPgH?6?7P%X?2J1CU!f zUyzki=X;PzkV4I+9IlG0hvz%W9zflm8dSoXgX?ESTd zALk_2=P*#2Rhf7F7CR19naF`Fgf3`laXrHbaakK#Umi zykhYT=Zi9;Q)D4Fc6wXmA0l-y#nlc+G>-_cM^85rfF*JZu{~%EM7J>g*#%KZj7TaXMjq5R1Dxp`n{$Z)F=T! z=S56Qg(C*`Dvw!oyXIaAHhq^hyJ3d$Qf$j*Fc?i=e@|RA+o_b})ROaw>gV3Rd;r2K zL($GdOyLX2&$^98TitDhc}5U7DPtODyvZdpWs8M(T+yz@!(|jGFj_cBpK?_^nsOB0 zJANw<{c-h5isXVR?~p#N&6wqAaqNXS}@e2=LEfw7V#@m8s6Itl2B>+$}FTp(ByrgHb=UBL#7IXCMG_ zFX6gl(D9+WVvuhz08#&atKwg_@3?o%fcw^P8sOemoYAPt;qngcG_(LhJ_p5rz%?P( zz(j|(7_}a*4eHn`w^>$*5C zp3#e?x*Wb3iC12$5!|e2gp5VzCMT@9MP2mHnsI!*O(%~b8`oVHUc7U6wumo(QTsyi zw`mcy*Ln@ik-AxAe%-paT1&}X5J?^62O_{A{aSti(b0%;d{u4OzXF8Pz`+wSnD zVV*U?pp$-sdTY&OSo#&Mz)fdd{jPhZILh7qLWGC?R;X{&v9H@t@VehEFMjar8UifO zcyGejfaMvhNkIYvjex{8UTf3OHN_VXHoZ{~xatRZ_rK?e9fJyav_;c*Z6N4-^vuPC z65Wr_)&{cXrq#z5_bQ*dBWokaI93`OmtUdnz}6J@&7w^+zP@)Q>F`!8@ZsH5Tl$nU zaEs<`)tbF1@RSq~Q2FP(Q%mRL5Q_jW3@6zFfU5KTTQyJ|RB#7wDz}YzaY$N#orAyE zhb)|l-!*{Od;K3MoDuRED1b*c?(+EX#G^Bd78SX(BgYxd^#{dG=}nW<2f0R|fy-93 z;_ta`iyl9Jc3_a1Lln%8-ilm{elxPxR$3AlcQ02vOFlP3T{jQbo9NLb_B?N)FW=Xa zJ89^8Vs4RgqK)X~DnbB$S`eK^$hUZ$a^X_wY3pfDxfSwKOR3l2h`KyXKe-{e_4PCh zeGpgMOva-(a~r}DgR#ZDuVZr*ciaO%zBgs~7-exH@sn#W$r;~PI|UKduXQXq!3Ta^ z!9{aTfu6sti$7MaUyo$}&LAP72cv`#-WB?Pw+^WWKOG70{yM~v|HV(<)L%JYfjL+) zi}$58KBF{2u9d2ct6GG>U{`!a}`d8)jch8S#qK{~zf6wvznE`M_6aCW%{<~A>U)TbFz2}G~ z`iLg_h$i}f57qY(O*8=N9nnMsNj?9*ydBX*AJIe~(L^87ME~S%KAg|j9jN-BW92@g zi9U$i{`?%y={%x|KB9>}qKQ7Di9Vu}qKQ7Di9Vu<{x#F~h$i}QHpCH4^bt+; z5l!?FP4p2>^sip^_wyr~=p&lwBbw+Vn&=~%Xdn^oJL||1P4p2>^xu8`+YwFl5l!?F zP4p2>^bt+;5l!?zVom>lif;UfCi>Uc102yr-@yVryM{{8J=!Ch=p&lwBbw+Vn&^M} zM)kw6;1Nyq5l!?FP4p2>^bt+;5l!?FP4p2>^s(Q_%8qEFk7%NgXrhm3qK{~zk7%Ng zXrjNrwD5=~`iLg_KmL*efc*7{CYs%Y8h8g+A`%ykFvKB9>} zqKQ7Di9Vu<2Ax0yFMAZ+(m$e!KB9^KKb30!zd#c$@Hd)hCZ0QX)<)_k4otc{cW%lu z@o1R1I56=jSQ?s|++fl_O~fPP;vlE)VCZ1NBq6~gcT?fEwXw-Ectj3e(|F?;2LPlALQ9U0S9*+e16bse}By1Nwt4=3DCCdx0!fu8roTySRK0U z;L-m1ZGUzdkC7o0-=UiiI^rMS4BWtbMS!3G&`m;rx#{n)f6D^n1TTHS@iHBp3LXqJ{}n+IQU31|as9eA@S}sjiU5q`g2Ma< zVsgvG%GAM(Nr3O_Rp4QGWX&HtnAkD#$UX)n=cb7fAT)op_6KXZOXNa{1wt@C_!36{ zDei{5j@iSm*@-AU>eKRWtSZojO~psn%^qh09_0`Et54E6lbtL=c`&~z#(yipR%cwA z)!}~mt97S(-F@DR)FeZm`{V5@Jq^RKow`Em4Kzw>Z(CkzznZF!8vez7=cO$v zj`Jq5BCGZ3M^E=w+f{Je5H>36^X1fjL- zH+IL0R3O3rQ`OA~l{rKzp}{6_8i8yPM(VuhE-!mnn(NZ@xdPBbF*Yj44F1<#|Fv zp8q+fi<}&ywP(XLPQDMJHA;Q0!KO>A=q01}y$m;fDvn#DnNsRrmsJ%^R*DnOswXCh z^`_Qb7kk)L;8b=VFYJ!=taMP{IL1|4CR$O{(T)-i|58<46sPwdC~Ae^RyljFA63P9 zldwLK9bR@eC`#Y)3^B_}zz2FLi8h)-mm?(W?8);MDG6ttlr^gPw#&;nqm12*<{DJF z*z{QM4H~BDYAKt$2O-%n*KL#s)1T2Qzx15-wVqb`WOWCXS2>zqzJb_~)kgMi66R6W z76<*M(Y;<}_9z{e>9PSx%&Hd0MeA(AF5>sF$*k?9cb@$77wKg`lfaJQS6nEc;w$gk z%gN~?4w&a%r)lxbj_zu{Q^_-2ay(@iyF`Y9_tuul$9))Z-haN11;h7>@`v}qWD^{M z)2h)-VkevCtHvaDZKpjw7$%L0k}45RoQd8*?sV1;dOCgJb0T^8`P3%Wg3`wxg6$0u z-z1Ze*R$xnF{%Lf`wLu_yR+0L5t{e3+D5zXZc4km#sukT%?n*0mE*o2om;+8c5Syy zQ+Sf7^qcUT|BJJK3Xi3EzsKPn+qRvF?PSNcZF|SIy<^+9ZQHiBWBl`czQ2R__&w;Z z>ASC1^&g(}N5)KuHI`(`%k!N0oztT7wMWritWqR$8V9iS9`TBfa3idqnnP3;A-Nqh#>9bYdw$r607sFPwIJAGzc;?L!DYuP%Zm zV3Tjy)rW0*ltNn?g(On_F(81!j>x4B6bOAqV8xdD&&d{iwHZ?|010^GHg*GUW#_|= zz%tStlx$7yBUWbl0%qDBlMVvr>pr4daG(B*9{jE48|p6S`yY;$9^c2=PrlD27HQDx zyrDG*7~Umf+#o+@8NfjZuC4RsN!-`?W|%N| zzC2^rw)-?di=kJoH=R&xt%;uFOID0?50*o|*PXpInlhG^c`S5qp+QM@?Fj)F7`y+q za$69RhJotu18Kw$E}b`GjxE1y2m_Dr`#|3l3IF$i%Povzn?z1>71j7756E^dd@Jnp z;ybEw`5dO%eQ`$D=k??zyp|y!Y`n)#<++1&n$tn6UZRUc<(OE2AoRIY-35f3a}sSE3(h z_yDTk|IT3MgWl7lhrV`F=)X}5rppazCohw~KaXw_Y>AGo%MWri&(-mV=%uBQ!1=!m z{Nv)7<4jrMa`%`T`Zj$gl1CGQzK5V!ra6n}BU$Cq!jn-s*!%;ap^|=qD#}D(jllc z?Gl6FGTe6p(%c3pD2u4)N;u=g_j{4_Ps8^d)I0R@lx65ueM^j`kp(?F8)ufz+VQU+ zP6jU!uSMz(5q-bZ|3a}1XI(X{dt7`~xjW{HA!VIFcx(wNTvvHt>xZcp1P2y! zNK>k68z;~H{3Y9-ILxsqCWOglGUN56q3YfhJzDWDftJT|^d@2TZ1aJ(u#|X(My}JH zkT?=I2`MDbDzwQ^IT06|mh;Ej&X8(J++zh^eIhK{=!YJ7I3Xe3g-osY;kXuts2>>mH!()OAc9h9{kFhmSR6E}NgUDxNf z@p_UW&b?mvIFhCC-8qN5I3D1Cf4gA5H*@rt$m8Oho4Z$OuY=1m^XH?>=;Iyb6Mz3V+@x&*gH(IM~aT&Lpw zm8%&k;U+QOK`w+Z12c*wGNq}Ir_%-2Rp@cB0_{*^DBO(aXuTQw=w!PY zGNjJ)CGse%pmL?)sH? z*~^5}8?Sla*_)#G)>_d_T_PK``}t>Gj-2!wqhtLcbesMREu$PTBvTt*RFzCY$Egn> zVts;C0U^9H>?m=j?ol@%Vj&qD##=mcs|oHWtHxz8=m7=B81HomiMD}xGo2^%g0if) z2HN!4(s8PHZCKPFi7T#HY!iT0F;$1QISi2Y~`mBui{1tv(G_t0zQFPR}aT9 zHBp~q^P5n$8K{zRW84}C_$P>bsUssbRQQSIBUHNKZ%)IZa2uMy4V9I? zv%ZMe7Qm+hg_T~+amC;j4|Dp(YY@1S8}%7LyY?FlbJaRI<@HmehNrC6JjDYkMozUK zaOdG*B7$)k#z6d2;Y<*|l}BhSRs|rkT7;#y_EjibH&BF}wB2>OftFY)L^7h|=DMWz z>OaWQ*c#tQ$*2Wv^uvROJcmuSvw{(`^{Hj_U29%rqfrj;<3m9Nn%oJ@_Fn#3gwJJX znB)e#ON=vk9Mvzu<2jEO3fyI|g2nqLm4=L_oH5L)0m3*H7~=52#8E~O)MjG3^-XC6 z5<_UHGAJ3$7xRSj2%OUT z+3#}0N~^%UJp!BOzn-!9^hL@C5_{dKw(Z=9?9Ss7@mcBuW*bm&=-J)RfET0dH|W+d zt-tUpSe<>7p%%@Q8HDHE!#kmd0NME=%NBcN<1!Jf9PFL;g3DOA2PLz|W*wq6_ua%v;h()fK48XKH z%6_p{wTOykXe#6`7BZb!a^R}rlFOpfUF_XC2JqD3rIz2uu##HPKK&!iHud#1CAVNa ziZvJt01gv1`dzIl*Sm2pyK2bUXMnHyXUh_pgJ=?2bOl+!a$LiGO*3GC7v>Vtmz>CcN^DmZR9H z2!q$}%_O+O6#;`~+oCLY+XZ(we73U(c?v_|~K$YO;4XErU-eujIBGE5`BXv68})Xzd4ZBlu;3~7c_x*YLx3DBINY)9bT zCk1M|*{4_W>AfI>C59P;aU_t5Shn>Vnq`q4JjNhzq$C2{oEZ#)pxG^1PzPYOp)#vQ z47z_yOXZoROkpCT85wh=`d4x*9 zU539DOb4?A!~9e-rG2ZN6}evpP#UKII^kH?GV+O$7>Aho&BXML$j zyKEyDL3U}7kOt9MYKh|FJactj`GOSM<?+`?{#&NfI&g?Ay)1f-_h&3kjS!M8&m&iD?Az5v%UI9cLZMmrn*ohz%MkQ56hY{H zzi@g#;MTN@)@5({&L|VKGkQ`68}Y9lP-54Wm2W$^KjnB$6W~|^`qZq}J`qq4g3~`k zZ|TrogLfzZ1g3bxvv{yh{S*xu8a9?d;XK4u8cad}BGrwris}wu)0v)!PR= z500}YUp671pHQSP#8>9rV_oG69o*bOa|4keh3A=bBMBI$sR zdBq`oV(<`wZ@GAy(!YR?8Lg0xIj}_M*odyiK8@S38@ypEhtA=DpIYpr#fJVDHNm0# z@8th0L~yGAJNkcx34Lp?$#qy)6W31W#N=W91a9^Is!2dC3!mlY1(TdH%h(_7eI~{e zI6gvEjsnn__DSWq_DR@mm$cZn&ihE?fR8|>hssGS0bhZXw=%!J4L1DP&BA)=cZ51M}XLd_EN+eOA z{lUlN-W;h%j#bW}4*%q1zWkbAVDGSdYHR$u7~s*{i4^>C`P9GMskqLb<%n1HcpO zt}Jy?dcBF-P!-#nty$l#(5_w?lnLu-gN4 zMHDKuaZk1b58z0{Lsfb~0<=z)4sf@T{I3mj!Mh<*=83pV;relYF`~?Ax5x8#q^!(Z z56C(zv8wY_4e{j{<8^=A{?QnyCXq&P!rhEohzMlUA7qOmRgf#2>{%^h;;)0uqE6T* zh|7adWPM}Czwj_Dw1U;Wu}OuweFf$PAE2;oT=h>iLUE#SG`*|y>@o-P*OmNfr&_`l zvwsU*BfPNO_&ye@5tBQ#8#zxM_WvblShzZDxoheh;fms zgH^4r<7PQ%ES!nL1x^W%p&Dz-`T4Fb5B2ZaY^HFEjk0?JJf^zaNL{Vi6Y@-IAE_;4 z#U`!d0XRqTPV_D-tMz6w+GGo%R3KoIS}VM?2CN`o4N-rf^Ksh$+<=bgLvw53Vh`vP5Rg`LJPWOs2$m5{PbWo*;Gp!5JzN&=l;Hr!L|`G5>07WT~pAV>6N zQur_Y49fmN_Tf$)SrAP`9eThg^k9Cbq!0fXYH5e~o{D}&WwEmL^)~v#!Q^3O)&{lS z&S_7%^#mT=*;Sy~&hJMf>l!#B!O~x2M?Yv^A)S18$ufTi zS!;JHTEYLnWRqqMm4h?R?wtfZww6RYLM_`uq4#V@-Y~v#!(_J+3k{&_c_yLk zUk?6%5S|F90$PA!E82r0SgIsehbw9q6Ui zK#Ev|bWfG2Q1yc!G}6MH#r^MOz5XdK{>bb-16|)Tj8H5xDQ* zQRdh|;&@2;-R@mGN=86o3}YgHHbr5F150Q}jU1Lv&zghB)vuXV>JU3jjZ_2MwrB?; zu|Pag^LA)$@8x-d`vkYj<&`=*>wom9;6L|PTY`O~AWF8HHa&r9+1TC#3Dol}BK8;) zMwE=-1vqUH>l6hG>#{KbTnECNxLX7se0OZ$ASo(oD@H4&eam~V*M6!ZRN>Fb-|Rue zZ9BsdCe%2nkW;Hg%Qzyh3~g&IT>reVOk?pk=Bpv*{j8ZI((Gm&IAtp&PI}VLZ~rxA z(d_Xt*fo(Fnk7wPa!kk6r%l){=Oj!;Lq=;)8wv*0_(WKX=-3!auTIOquDZeFB=<c{=XW+n_NrOQ}XE+6ydnV$EDo9*v^J>S7Gj=^4uWtlH zwBqWOhKWpOf?T*=sj{olhM26oa8Wn_>0Xet%hd3RerRHFI28LE*rqkxsJ(D!Uv6?k zNb@tcP>AZZl(6OvO?n`-YmT}UX$io(1&_?%bC^-9zQL`TbTG3FTuL;Vn14sj=9pxe z)JP!L1=fsw@F64TC`74Ke&O=NAd1Z|*Je`z4S?p^GERCeT!wjch=O!yGQ+4OlSHs? zs~H|O#)%|k>xasEwlD*UH2K0&4aJuAJ>r6wn!CcY3J+1@ zYlj^I2bpCVYPdF z8#y1u3Bs^H>9|r=LS~!84a8ZX*ijkPN&b5M*qQQ&ndlm zaLs|~IvocGZA%yW4@FckI2Zf47Yb(ZlGm~Ga zjPtOeS_>?{6mJ2h(3F}mgfHC4zo@{kWvTn!gd?7|zbiHD>&N1eZ5+$#TY~#YmlcU9 z;djo*3(>kWt0jJcI>{Wbe+_)s^qcX17+=nzpc z7^uzf-_*R+^l#Tu+9F%gxJ?|CRIV#s@TSsZPWnq))l|425V_$59d{%Jr7Ss~<_!=kmozU)xSUV~iOfnSRXN=*YyxRicmYJ&cX=_Z{Aet%u?`v*t@6YQT{?9|^cYUIdZCZvjXz5R~ zP>rYBG8Qwb@bywh*X`C^w(^)_W~oJdx_AD=Xv&lUSUp3&oX~OJRH_m>@UCne-pv6` zPaIEvZpkRNM0iG$DeEh#EvKQ+!P33$v_*JClKYZKm=e_4>{)_qX!H>@Y;Rv3j64Uu zzyp9n!9}6ra$(CQe`9YB9)Z4_az*bjHk;;!FQ-<8qZ_kOb)+#@BWqUYQ|$PSZNp>> zs?a&0S=9~Ap;UH#T6?Ffy`EqtHI(ksFx`pe)^y79VPP|1sFH&o5Y6)EIX1S4qd$5W z2Do!ohMuvm0MX$k8%C!OLJfv@VXlU@*vl{pS@8I& z%_V7@nn4-zD-%aB%@J|?!qN_*Tdk27l4H|sEQ!()>B6~(I`Au-&6ntY)5WcR_8~@Y zS^9(glujx9*P2UpozbqdR^p<$7Bgm>^nL7qe=A@Mq(EhTXv;V)`< zr!++&)8{Rhq=-^-HB7O)NoCv%svAZ^aXqq{BubM*rscCQEU>0H7Q)C3S&4IJ4C*s- zU$n&(C=K$ z$cgf59CRuW4y5EJECOxGt*UgsUB}IQ^93AUHc>#E+Q@40={qCvc+SusPom_g^@&_k z#I`{1EDo{K*fh#bBX=SB@r)*3#iegemF!xeHgejQ)w8p&I4i2E0*x&(Q^gNbONniy zc!ncy_Rsn6?P)E)Vw5IINSGMgCA{jhETpVho;btI#Mp1nvziRHBc#Cd^xH)Q%N!W6 zjhwSQTH4$(=tDnfx6u_8_q*YX?}jsQqi&wA6_JNK$ma4>S$?+!Bq>JPH(M$Km!ubx zy3rPSCnmu|?cTJIcvmyb)gz9$x@XmGB}(RsFpEG z1UnYx<^o8vNiQNZ?YE%pr7z<{g)WgM??FK))l~D(Opz;-uPgT{b?fD{3IjTWLF7WImlWX7SAyxdsCh z-Lk}tLL(lqAgKU{6+$*cQ7=fS2^rc5%d)z_MnRWxeEVKc3i9>-Cd;0Ig!7owj;nP! zkDA3(^r*|!r2I7=T*G!GPg=$hs4y3<$P%oRL10nfaDq~kD%lk1i$A^HJF~q6A)q+@tPWRmY*(6z?h~E2@S0Ud2SbPnIRt`2 zipV0Ao4Fkoxh}{1P6@ib@wx$H3ak66BYF)Q0ef#Qmcy*oX{fVc^z_J)^bF#N*xBCA zAi?Zb)sN~MmMW`ON}BCFpFxB8sexQ7OX;dsbcPNczRhJ`sbq_m!(tj5JM0mOlbtdTZ>-pv+CWP^H`qnH)?jJM;{PIVOvsYwo{_1C#Jh2#(} zB*cQmp#dN9$pDEN<4GGf*T$A43Gj4SC=N8yn1t}OnT`gL{4l84W2fPXdtE=sUPZak z-;B~ts<1YKL+k7IjsRCNeOc}0xZZATd`DRpT`j>DqG9)QHtjg9RgSX7#z{3zG*9WP zxzb7h0M*|Gj$-k13RvRMJ;n00^Ma6-YC19FSd#^gbX(li{MrP{ey`;y1OlMTg)F`PNHKr}a1{lM?sryM2 zVNKHx=TSscQdH{aM66eTAO3leuAC8c2D6+mA>9c92dvV`N4}yc88!h<{pqD&_AzMm z_&=7?TBD4TS#~Zq{`h8U-XZBIpAftEZ(^>?cg_ZK;x1@CDqwY3z*q;1~BBQax@&c z#D@eoSDMdJ2QD8ZSjj*8kKW0=;aHVtcvDT2=e)7~WAg7UQb;Rjq;>ympQ)H86M( zg{451%l+~!jNt3x#d5X`ljiO}?tSlBh0tE=+?%U3$rHV?z6))~elq~Z20Vp24{nK^ zzR*xUM)no zG_lgKkZDtw(@JXnh24`3UcWQ5RUF?%D}1vC;BEnQT$P`f$a(EDW^M(0}RHR z$57n_@$;O~j^)o?3N}h@EBy(2@b0CvEe?9Y4d3AEECfZU=EhmkujDs06~0_uHq?vSEp)oi zAl%gB9J{syalpgWgU@ot^ViY*VgE~s+HQp;%M82~&y#&vmJ+Ue?ZwNA_HK!qkeo2U zYfvK#P9kK5Io7r<@c8<}XEt&?H~Fp-nL?yWmfVve@!PXTU^3mrjYMQQ6=SB|ha&07 zjTZjee*gxPA^7LDn<0-m2A@8HnDz0HUI{eG{@ zX&!N*3cfPLCRWCg%_gf|L3|@7|z&0{vb2?naS=v{tnN zto-)X=Y#lK)gZp|n(-~WZtJu>CwgtY1y#7kr8LsF%_#iZ)Y>`5Secsw_av*(({Mbm z{adEz+WSq!gmJxRnzY-EKv|X`pP9kUex8m(#y|W31lO-M^I93(Db?_qJJH^=E(W^A zr^ot1i1MPh)i1P+TI#A#O)w5P^bNFLzTf7vU>JZqVj!c|<5oPxM`yT+Re%wCKEK5W zN9s88Wvn-n%6?|wDd6P^oogHKP#fvir^GiG^Kub5Rd22%y;k?ppdjt#wA zXA1M$#mV~wtrld7F%DxDu3{a#SINc%F-4QKpK)cktC&xm)wQP#F%fcVL^oJUCirxK zfFK_by_yzc$VZZD*SVX~x*4%I&9>^ii>ar9+ZKuQ9{QVjBkoiy#*ChLnR82^X&lW9 z2DSz}ahMQbi$RnorOpmus6h)Mm8>YZsL~OpEM4)TI&c^mHt)hNL3Z_73Ijt)?akaeYc{r zuEUs#>3Pc>YoyTy`$pTs;OkMk9awyj>44U3{nnl3S@Z9i`|$fb1WH~%tKWPa?o%gS_!ftP#nS!3eObUgtpFM@8{83F`7?3}-zS94k@7mwg+ z#3X8<0dxxk8KW)JJjeK6L`al_a`&A`yUn)ey)U7sU}9628YN!B^YCXZ^KZv_Gfq<1 z?PS8K8Gp6;Q^DPT0!41r$O9yFEv^&K|28A&!8jB;I!0VeC(0~CNGeOGiIX;K+VqO$ zuytIvQOJQu6T$Om!XSNdZnr$Jom& z0+##2wN6UC^NA~GfW8542$ga_Vp8}KgafHMb3%N|)qkH}8z>gzKY8D_c770ND!+cQ zGf$%VymB4y7lq&W@_K}UKgc=ELW9Tbn)N3D7w?4T;BAjO;Mwu2_?pinG(x}SP1Bre zNrR02ks#QQtj6CM@XZxD8{rD&4H(SS!nB(+5e%2p*U+{lz6j7UJM_NBdTGiHk0x%(o!2e6>PI=( z)Umsc;>l)m)RbFx;Fy;p{|HkJX?KnNMa9ZD?^*p>&r>ykV8(_Ee9lLl^MRO_YHasv zZ+JhdrD!>(g)i$A(?wR4fvYXyI{3^u&AUn7YwbcUryJsh_$XowWMQIPIifLm*T8&zdMJAk%ZVM zVR7y;kwgie=Yx1H)|pQ@wcua|fsvq{x&MWf9=61SczfO9_TijqwT`-{=k8h#2r8A2 zp>v6}X=_V#CQ`p_PVcgT5>f*Aw<-$N}F^nx!5XCI~y6U))Bq2O3Og@yIHz;iXiTi6v%T zZ7^;<<7h3-%c1uuU<8d9TF~5xts(CvuZr>@-#j?oWxVa7(7sIOcouOIXF}_ zXpi*Q;&QyRHS_#=>V#?N(!5KgPFJ9l^f9>vSWBsxs>PT|;6q<$-DAeoFMs$#@;z$B zH<7sMRA$DwC2C3ER0t#5#ut*c$cbLn;^6+D-F`eP!>T&5ZkmR$5&7pXP0sJ$pe4Ph z25}ChR~6cQeB~v#!on4uA>3#m7s|)w2BY~w&?j4wVjVF_fQ=DPq00(zkuSJ>T7o$^ zRw+)uVAw7rtzf}nBr=0Sybyg<2W+PyXDVe?_Q2y`^~#4MKjh=q`>;i=U_;O0i^bzP zpp&0PAVzbTc$Dz22uW+E4vGP1Rcs)mZN`{p_HSsRSZVYSNkIvG2gmK>RYJur&u4Ns zo~(Z*OnxW1SBEs;#j`mt-MX1g)qtLBLi|}cc3lSD#u$!MI>-|dZ0_nGo?oGeSu-tn z?kF0~fC|2@XC7mDIk~C~@%z!#_->L0;%p7QYIIYRn@0(GWph zCa{k;1VDlLgmF|Pew50A`H`!3|Ht~+G*CICscQk7p7;X?S9F%*!qyHb9J$4D6!M%4 zzfxH!!~2Dn12A1ae}e{fqi3-fldi$9-YuSPdAi#sC@>^0y5`@0s4Te{2KKZOyT$-y zr>4DPw1XFXXLa4sY)53owj!dmA9k@70zA ziO@JHH%MBetdLngX^?^jI&M8+0+(*F#ZtY|U67vIwmN$Vsu4YzYT`Q_-aE9OPEUxl zyn@W?+Yf~-^@e^Hq;?({Vd`vt80Aw^e4~!Skn~k8B8tiIx%kY_)xUwIu+ymVg~M)- zvP^!=3R1;@TSqBPi-;KzFPw&=B|D%~MCvjV-e*h!WYmARW7KqxcL@gIbX1ZUH%{=B zf3hM+)SMa0>9u*@v?-4M(D7w46#nd>J12)cr_?XM`QsvIY}q?rg0fuh0_uVfWDG3z zh4vOF(*kUP$GSDBWooBkDa$C=YEUbDL48j1oBB%#*oJ}#z)Vq?H*biryVF}A`}M|0 zPGggic|zNH$is1~ZG90Nj;itNA^qV@8K|F)xmGxkjkNdcMaR^7$=CY53g|i)mNS5Y z)MbvP9>6|AvkqYlK|(eDN_BI!3^D5|$A{N(ijYr3i@4x}N@ULQA!21*fW*_ULwK}2 zr|UGBHa&0|PpDdPpG6UX1#*V=ufZ>oNN-juh&=;)l!@FLvRJZ$iH|!Qm_k`W+n9Zd1_BJ$@w`d`BClA!-tln58~&EH z_lH4&lVAc1+1s5$&oC>p@!o3ISNG?M4dQMvg$4!8Ca#H6#ZCLw>?oDj8s(~-i!$;g zMaJfng)o?_6cTORB0*KB}VcARUQ*@unWK)rpcf5~M{o*r)GCUWy0 zCCP?C5T|N)K@w-Qx`xON$5&tYuhesUR?bRLV+JRQoAs{fiL>jE2vjKNq41EDVa-9w z;uetspak;J?&ru6g^J_W_0`7eefU-TlmLmAZ5vwG)gw|N2%oq6UzXqoL@{W#}~x%r|aFuxhZAWr_5Nj7>3|YU}stDQne$e=y;bwNpa?VS0}}c3LDy;F&}Il z=|%1p@!OXqMVgrY+rT|?VP+ZJ3e@uIgn)5QNM8rDaQZavGb@4Lkq`qo1j=MC4C6%sexx6S_P5SC??DlvZ_ zQ4$tgKs@72`?SDp$H${Yf=$1|x1BZ?%!L2%o9WgQzC2@9v&-8xRl0OgOG-B;fQ;}MJt7g`762G=aIMI%o|(GdAnxja8?Es#fe zuaF=~tTbv{OJEY-<4U<-mPwQ3)N{k*qaI;E&cuU4c6)_a?8>hFBvvD9tS7mo9!xQ_ zm6bW8C7b7leG%z~9XXQzZR<)_>@b|79X@xa7y*EHPP1P)M}W_ z3Q!^r%mNGuqgZQARLv;&sR&dCJJTZMwh2%})63|l7#mZx+GZZmBT!DzKdjzt>IP)7 z@&M}A^I%S!*aj<>72XX}kmK73Lj3KPR1M`LGxyYB0tRLYP~E!42)W#_4QqPptVU#|Mnz74k@A(bQ9)p8G zyJ>a=Z|SWrowp3z#3=U;F=D=3rS-Rsg?7&TgL!2j0?nkC!*Zn^=-

    OBHaxdHawUK zYx^sc31B~M?Zk0)ALL7Oq}%37?Ot9^XAtRK5?8r=G>5F7Z`>@|$?1fQBlqvgR!k{d z)@5<(WnVTMMBUh|?yNGLnx+Ch=h95(Z?J#qhAOySQB4cn85Z7idm2Y{K-fV_LSBs5 zGnnm7%D+LawcZX=Ut*g7ZCAlWal@m1D7>rJn#=a+`SeCD!^W&R!Rqh5Qf{t@c6x>7x%k~wpI`bnQ`f2e0N<2Ok zFol1BZQ42J(l-mwW%?){`?o?6B(=?KT{kpu#xu<1a|_F>TuAGpmdujI{&8vk_9U+(tO zlpxI`o2pDlwSe7M;Xy+psnAs=lwZ98igg)d$gJDpA=OlYo+8%vTSBiG zk0J*J$qX0%=xc(QFhs6lGrK_DI5M%>7)p>p3t95O-^J7a8Q$b{AoV3tF9BjH&Hsz7 zX38tGTEMb}U>^Vb1d7|Iox|RE@ zfSAs=qUOXfBpX}kU@ARvB6drVpP{WO9F1NHzkHU35Nny^ zfj~}(>^qAWFQXUMoF66wBcZ@wO5><=_)Eh(o<^$f4l7p)}_`iId%W<5HKAe zONMXZgNo+7^dFl%I)pX(Z7=aZ+Ev>s=_&tze5;qk%dbP$|04>dz>jab3xC*V`M^OI zixqV%ng5Ki@XwR@Ly+RK4?24IRR;{xy-rLO`-X|h3}W;j_b3_kr~II%Qq}TSXc1_8j0#%=m`8G6OB><~N8`r|+7B~W|M;oc~Lr%$a^G*BQ zCG#7P?k-?MXNyW)yPB7Yrj)5hj232_372QF;%Cm68io@Gs6&r=F$&^KQsB)wJ)Ma` z0#`lGx$Qi+Cqoo=x9Gkm=?@3bCB51%X7ZR3*Si6y-wAE`OM2IuI=XT%#bhrm!LPL! z;XPT1p+WY;gCD*F`>AJ#u~GW$NVIfnUZ0;|jzeF-BjI2%q-fgIPJ2V8@v?Pa^7k*7 z8^am2b6N?W%8XyunRP>cX*id#%LK819Jy0R8EcSJaJ4}O2AD$IQZzn8P2u9z6@FJf z)rN4vj%ZQI=6~XPY^-P{iyyoZ%&eWb zGJ|&!ARtd&__tx3eLNq7c*EL5?F>YtESq6&kd7^poG*tm$gsyDBb~0w>bN_r85eL~ zjJSi*G@a`V-dJ%4hUazz5H>1mZ3YL$E1PCf_xL$n^|T*_+7(ye1s{C(f_f zY%EXfz2t+Urm8$ud|n3N4EfktTEZYs1p^2c@{LETrb}n-~ zLq_Co#FygeZBe04X~+VPVbhCWCx)q;OqG#Wpv4Z6h^OepY+9kiu0ZmtzyxgyeIc}b zuW7Z{T-R?>USX�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

    pNiG*UyI1r|I zWa5GGT1$?B2uH1i7^5N~gP=E!hquhKUb7{wJdEV)hrp0IKx@UHbayemT2rlyTYG^? zJiKwQm}jSN)sAWB?wNk(ItZsxwCOZYg=k&B@ZK~`->YQ=V0>Qqf16Jkx?!{BSli_XX@njo+*WT zlZg?~wV*y8fy`F@2ZCqNmJ{UU^Sv&$%LF2!gSR_!>V1f(PN@(Fmx9hzgh!&7PO24D zM*J&Z9Sf^Ci1v%L=Gr<5IY-!<55QOXdb%8ePHzBY(e;yyzr2I7J&LvDKT&83dH#+J zVM`8qP`Q)3P65k&Oq9jL^p8Lla5VNFQwL+4y>fO-yBt;g<-c1vHoC47)w|m3db+L- z58t1?ugDPE*VwoqFGIjf#1h>VccRh4KxyrI|6$F1|5aW3#wpAHgo=JXhPY&klMDW9 zh!6iz(JRI4=mFhYa378uDUe0xk^H9b6ouv;?tbnGa3IrF*d@%S zM%VI)e9p+_{Glah_t_`UN2`Wm0&Po#BOUkO?o(s?##6ZSf08v!b2TbOu$olVX`Smb15*-{g)U`dTp|{O`+^fYCEp) zl*Z10qUy!O$RzA~rQapGLaN?#4=N^`xm)G!%;#`+48yzWosU4DYbWm1vqncpZ)Xm0 zH>SPHfKG->5#3Kw9hZ@#)IJmccT#kMyMfVQE!UJV+_mKAg4B6KUCTY+J#Nl(G}}Gj zpuHUCoMRkjxwJ6p#f7;tS|?2%*+ij`CU?-p{Z2EEb3;&2Y~Y)fln29wgc4iPI71En z*jZj){{p`ci4#g(%5Sgc7e$WDa9)mO=VZ0#)RreCpl~B#>Spv58~Y7z{tEK#SncI& z9?~#)6HQTgbUCWyFQI(m&htpx#McpQEcIqyQF9>~qqTcJ%L_WKxB%Kyth<-A&j_a; z2VYq5y4cIy?P!k8c!|^2o@SHnW^mDXzITd<`TP#rTk@XC#Ok^Jg?*3O+vx=D+$;Rb z&x>!2F?hR=89xdkLPgh&9lrQFxrY9>v*sFS$@I`VcmM#jlX?HCJ;%)rTU$X+&?DIO zI(hhBvn0?alD7NNSOs^V{Wg6^l3b}f;k`BQ+`X%xTk+Ogmk!K&T&TUsOJaDV;DJVt z6=5neM92y~(&r`4t_=+D*BCu+cVQu^Wg+=SQV|_fOA&TOr{t%lXzj^pj2Ub#R~u(a z-Ns_TwflO`I$i4c7gzlzE?jzmq#d}!LO@C(L+I0WN=ovEsi?G0F{*kD^*ktIey-Jb zE-Pb#&s!LRZ|PU3#$=WE&Qdo|k9AH0DNjpl(7!^&9)a?@7&MVg?bv!%%?_S31oS@P z)=vmf0(oI@tmh@_F6q2zE~tfVS+)orM6vL+#l7)`Tjkrb_1|QmsO)q8l%!n7^fo;>jA(mk{ol3%KGOVM#<1qajr(V3TN~_r)4}U zBxAj)YhMRJ4175E+OLy2>BaBrgFBD%cduEp-*Zuy+p)CIbyJ;D-0+j_wfBbM$GzTK zkY+^z{$tB?Mo(hm&9Y0+%{1<@t-*l&Ot~#8v2lK*eP+e=?cS!= z^b%l$xhwoiKH|B^cdR;Pst>AkWF~zrEAkAz9rNG_#0+X+T?4VMaW8>ipwBIp5++AE zFt!xhKGWBK{*4h{v{`@CWBak7JE+uVX?TpP(=mG@Mw@0}XBz^1SK_0cb$gP{T0J8I z@{%A1F{%~e&AkwT7L_+lfe4|#3d1+hyvQY>zZ=M#zxMjyU9TU3kg#)C)|sND%Mu3a z;WAI3mD+M#-4J*t!#E6mEw6}gP2Pljld*N9-0d*Yi&0OR56dQgE(vTJa)ocK@CD1P zgFun!!QSvDQzB?X5Zd3AU64{c+b`fZFn zB#Yzbg6TdlQoiK&jrH8v1us;y=(yNVixxFK(KH_0i=3S!`&Yc4R^uMYm`kJ-z}=<62d<>qWDEZY9ctVR5Q)kus<9@#Z91V@@iha!`@rf>g8Tyn*n6 zvMc1ksB(R==l)802fAlTFLy9})09}T&vxkbsdwkx-JCf)->2}z&Dc)bF4)cLCQiEp z%=F9kzm_eqe91iy-#ER~c+it~W28+PRCc%CxwgK7o}}{{qdlUJ(ZiDsb^%M*h0gKf zaCM$++;kZxu_`H;Y(B%&UonpsT@AA9DIY*ZH*;?E%;>8vKVolI8ukWQzw0Z%&Lc!J z6(BM+rYnCcj6cuhCDM$D2I;lBL+@q8mU^$O-fk6YkA39WOQ4U!1?bFKPNrk+x1}TF zDuGfzH~m_uwESUmK3^eRHFmTSFvfD14GV@#q@Tz{ISbV74;jV2TYWz5)D71v1HNr9 zeBxo&)F!L$o*^N~kmd19(Jd`Cj6<`1KJXpo8|p#u(9MYCW_8u?z#{0Y|G5&lKVfXf z&EZCqBczRsouvCJ3@NA&Jos(MPXtDKJ=2sonerA_L*)E6P!A zn6@8V*|a$3p3jm}NqQFVYwG%!9u3YYXUAF35R2YdoO<3-)QZu=0ifaIE>3X>u}NTbsWyW_x{|a%g5`2aAMI1;o&%*6<*6(BlpmLY&X&9y{P~sRpnI zN!&Nc7GUl+NFZ@n%7qh3AUS5c2>(5X(E(u(zQq~Oh!f8sf2)>iJ(Ch)+`aK1edIJ8egm5R=plN?E&ID08 zyGDLUh~7|{JOaH;#8E?@A?BoxKw&OmtQ_1D2raqpfv&>(9LS?g4&kl;z8lD;_fn(d zIGMvlXb!I2v>&$i6$=0+nN@6f5dh%1T0X2>R)|L?S{j*T?iE4>KMSz;o6^U;Bo@@b z4-@aLiD-w50@eGEBM*pmjzDwWX|Y=J0@ka5lkIXHf9ilXtoQpt79iW8ol_^}I07e* zEtWS1=>l@VRC0s>yGBkMdj9O&BZ<-Kr2dp|PH$;boz&eGwc zESEKlJ^y7t1s3Mmi1pT*ReyC1zNU}Wkc*DhX1&$f*7xZj>{)5>A)>U5cF}xF`=n_4 zW$K*RL&;V!t?!gqhXey4H3n(3fZ6o7phS zNU(@7hXhqe`?0}q1k{$%^!mIA=G2Pdbhv$ZE}_(BjIbJoxsx~kadEf&Nr_F|Z~64t)K8x#72HhVvqr|V?+!=0GE006W*lvX>T=9dd^UDx=6D_N&-2~%fQ1Ve# z%UQnN(On0_s({ER;-1q1!`i<$4dg8Le;K?4f%r@+sS#51nXbPq_R7cUH3|D zh?;V7XqJv9lT{^lT>wx^c?&< z?kZq}ncex>0B9d9H#4FPRT(2_#xlq@l-nxMATe~Oo?J>=Qw{h|KFi60gWU06Z1^fE zqK~)t2qeej_AoC~QK3YNv{)o{G_(!ClTv&(?KVGT4m0u_Mw)fnNHFq4xi zdP_`o4ThRS(hK0YwvIsjfc@GfdQzR7I>9mK|406(Uv*M;ss4DTP|bUWeeGPr4>s&v zO;y#CiSbKS?3>I}7s#3^C)uf;irxbRN)`BgDZ7X_7V40wd_C$cU1E)G+uIk7jbxg} zYxMS07aQY}9fWt;t6>D@v0`n_AqkQhFE@G$Exx)k>@ua>3YM++JyWP<;%gCU`6cLu9JvcE!TcX9TBe^ zYslJOY2x*}8rQP3VqDuR;A~`#*)|0ARI0ogC4_{lOk|e+jJ`WtE9Gq2-7io}DOukS zbOKN*27?Pao|)TkVofr?D_>Xj7GVKtj%^4MEoyVm&=myj7XGk1_Fy|e_-dF>3LpuP zLwX)hH5fPUx4=4-0yhrQ5Di%H<4nTGlmZj;UxIeRgZOn|uABkUAPd+&zC4I6i!MzJ zIQ~B7kJwK-PyU~u`?*5KM)MNPE6+G1ZXdz7r))IUV~GqBE4Hz)tHpAPtT5I|q#0D5c?aR_FEo5M_S ztw*4ZJ9*#(fYVHzLh;?e5pN&Tjz%G<_PtWKxB%PHb?4SEQbyi-e6MTIHsN=Z7k{PI zAGV=dDsTjPR02Ds%x~+JT3f^^?gH*pYQTM(5LrxzSwJ(CsV1kaeFRp3AketK(jdtF zq}gS7(A72<*{aoV&#D*MW+f|Xzs`yEpknqJqOg32x^oym7ReW=Q`JQIGMttCqTp*r z_!~V`>dkD8wN7AxB8LFe(Ra2Hs=U***Mn1nPLXIH|MG zkb>ds-BJjCdjz6#N4y0T*#ZOJFPiMf_5WF@%*j&p_-ep@1E$E&<3fr%JnE!GHtJGS zSMAlJSnN0MOg-8V|02~*<+z{}{pRCRLo|zU6I=Y=vI9X+q2S<94XaS~G;4?)SN*p! zZ*pdzfkadq!VKYWkMZloUAQN(GSl@mvtx9L|C@ zGu#%7`o6cnrB7=QI4il6s(%ju@p<28=jnRyPC-cdrLv0+o+;HEH3HM;ij0Yq11}a) zGlM|Hl+GwCl#e7mYRFZ$hR!A(kr#<`cz*0TTlc zX1uk?8A899II%E$i!z67Z@!BJ_iN6EbYNR;@O1}dBUWAk6>qAvp#aO)B5sdE+~v?4 zusYjwdb_DM(91wvI2)k~fI0LK`!{s9?9r3hcQr`dc_6q?&hzrb5A){O#Bqd?L8js{ zM!3pI^u92V5Fa>RhkXM9b_R7|XOPd7Q+>WqMg9ux1nddxDV=|P?oZ>4iS0n!V6bj% z_)5)GO;<0@(L8VC6}_L>d_^b(Vg%#sE%WNp2~uBVV(Qc~-drAw9PfLc_ccDN>zk4cPf-s6(@VdOh30DeZeIv6A+W;O%cEA}~>kBv|F=)*Dtu@!V@%bWQPixx= z+mO7jaOsN)sDgtT220`fofH^nbQ>{VmY0c9a1N2AmyHA-vK}`0$=wP&3)Cqw_kYb2$WY4d?|5l;+{-te%#$yvCtsHcM*N^_4Mi9`VaP(7+e_p zolKQ-^qJzO?2XJFI&9Lr_PBrzE=3Y>PXCp81VW+EraVvdVdF8SQ2M6%&IV&vH&P9Z<;ohcjKQSB;4QCJSZB7pG0IcsvUD?DiBywJ z&uV!Hb;{xcWUT(g%O1@vi)kR*|7#=5Ee?{ySl8Ticy#tWd;krH<6?_xy9jG)N8aEk~Hi2`YFo{>BOHv)l6f=Dk5uL$q$ei|7vFAhF7M76r}GOnvW zb1r_ZIkx78pXnL67BwLkg}j~w`F-8lO$PcGWuI?& z>@n4nT>M@ZU8sNnEYLUZf0-9BNnFpNB2hXrzipW8N|FYSJd)zw@6eJ`}&f|IwU!teaxM}no_{`}y{Gj}NF z>$x{aAX4m|_wQstIWGFEU)<6~S7{kx z3rapL?b(PVynKt+zI1z-Zo8G>(6VW<9b!7V$6ZW*Sc;gJjPT<$2wLsO$pf)tb=_cN zV3lvMxBJ3T2S7qvgG?uSi5iRxjx108dlMoNFe<=PE!PlhNIGEH=E*63_WFM`Y#}qQ znO4(9Un2pwP`QCM2w)2vSYtu>WpK~+raGQUFy$V_HOmxp8=kVSAzBenBwPBV4$dLYL*lbUMWSXE!0LWPG%jOv9);koIDm|_ zdc`V)23K$5R_K9IG{~O)bu5`m4g`Q;4;zf%?n?NcyH!SGme15Cc-Qd3WO3dLGV-Rm zbDo94<<*m!%>fW!{O@%~gfKhK{1C*i|v`R}|jj1f8+m9~|KqXa(lqUjXT$rgeHT|e50Y7cG~Vr=lY_7)R^Ux z=?o8?1L`-s`LlklVS3H7b|+;k1*NZH13SaJHC#>_*q1EKJ{1H$73rGl=E6_T4r+Re z0374wbZnZ_IsZVOE1jmH-aJb@xDZ92-71D!!g`@dTGp74&_W;@r@Iu0=d8PaA=Py% z*oPa4f;(S9;DTzk_?c&<5pU7!Y{q~NLls|rT%u^!q81|1K=^TsYO1#}k;h!ZOCeE# z|BYj6mglG({9qh4z4vyNU8*_wB95Yj+z_EIXoLo#PFxMRYwPl>WT_-)O)XF9{Z94VkX4mp@0Fgr zOYhGTyzFCT;2#_Fh7f1#HS5aT6hT`d`Dj&Q#Na5d9TlH38#geT;tN?`1;R9Xt@Ux6 z;JB$4J)1SQ4Qy*Hu#Wb9Dt_({#J>aPUWt=9DIgAiiwk@~dJ$NKld7MHIZ&rCiR)3- z(ihizk`v~8+%*ddMzrfv4keVlxf=;G2wI4>onpVkC9nz_Qjqq<0ZIH)>yLx(sZUY(!{d;1~ z-=!brAxwHV4yqQnkm(%%py`(M2AJVVeW-ht=a~;A)sM}V;z^=suQ3*i7m#Zi2A$$} zOJT?=aqq{k>(JHP=bkXF4rckL{gSt8c)=l2xa`ec{2O>xVmN|pH&!a7Z0QNXoN)Q| znAu>gEN`-XuI?aX`Mq$xcVVMbT2}8s=W6V2Pdh+`nw{);YQE>(lgu(uWPSX7Nkx%$ zLs4=j5v5Dw?FZJM9@@;NNz?8$1{R8QG+<%;EoHNAUAqu_$*gjp!*IuZOC-fYhpuATCGH2N65eBx<`mBC(=THuL*C7X(@QH| z@Pftq%U_c0PCzE40`Od8?$k-s45oQJalf-wL(5>!mfD%fqCJkqi+C#|K}OBy*tkA zdk89=>DTQ6NHa!g&VqY3?w{vN0?Cr98#r!k)nXpv!qy_H&S)nB1Y ztDatP>{wg#`h(qhV?cujez6Tomro9VhqYr;`5j{NLGqfWq;b;kVb4Q9*DX zmrp}A4B;=_c<2-vFG&OkrOw*0o*L#?$VR;qE)%x`KSXz0>)eQKnNW746I6)7z6TC5$G33)FfhXrf66lN@=XcrDT{Lo_R`^P%kAf z&1@l_R|Hob+}W&igl7VKYCF?OKJf=AOU(50gU-HQgvIAin1YRF_nAKF?v%q)|CNru z^rw#g{C`JBV+MD;0V<&cAkEOY@H&`rZ|!IvH8x_{12=pG+KLt57L1#OsCF~ZBG;l& zbFC79Zl6=7`DtPOt26g9#M_GwL4uX&%(VWvVUy+HVxQtHi@sTro$pPc&d;y8z2Iep zQ5gFWM~C^uq0KR|jvQV}t2(N*4J>aH|D}H66m(aRg z7SebG`Y!6dy>BE^QHApPQ*#4iKB4q-*HCe;;1@4jd^qIaZJy5fGGSM za{u!hzp`8m%Yy4ZPe#DY1vT7Kj3BYG-padZc;s*=`w(*VFl3sCrD-w`j$ z5b|!rfDi7LYsIfy??1ZMb{ymmR#wZ;&OtU87e^Sr5|w;+KtipeBuk4+&m!}V|CAaE4(Out(O!1bxZE|E`{a#U5-xJ9w5#bTONzv zaPRd5tf6i$rKITT5@~OW`vF1DGIErfl>b8-=GVFWN7txN(r4f-xTXWhORUxp`D4w^ zd5x$;Cxwyk&Cj8$y0D{;7}_=D0pAjiWnBx6z3Up*(kOETV#0+1!343ffmkWk=3S|t zQb{lA-DJi6-0n(4o`c3XR=~D!t^4%T!ua+4Ut(QxzYGJk8B8I4*45``QS9t3zk5bXBX_;-4BOF7-z2A@HHxg&kmO_q z!Vx+G7OEz>3~`Jl4BKDYGRtQH+_VElN}tD=)|5Nd^#f5kP6|z)S#76B>g>M1+J#-~ zXZI7uw?&;@M^}I^U_2aw06gmlLGYdIP{G6Y?+;lwREK#g!|V)}Nh^c(>2o(F(~HF4 zZ0EO6J8DMp-}{TFQNJ^#4rH?tF>eq_rHd~g8x^09i4H)$%~^T5k>&5x8(g*9kw(NX zn4m4E_kH1;2fABpDTe?#yG*xF_uB%sGZ|eK*u&jj0Cw3^Fuw1=+h#aWsge|bNJM*^ z<2}`CI`0Q_1wtdkH^}OvBxIPajoP8CCLy5KtKsI{*-0ZWTTuEKscH>PUEY|z$N--b zI7oNKmPVcn*wr<=l3y4wGQctJ&32Z-E>%ko9|RHwk#$c_3bC0IL)_*Kzo=lhr6-ht zok*yg`2YGQT39MPPEO$((`BY}Z+L*3bC%2M)dSuMI@uQ*LAG}mq~z`@%g*2J+l9(hX}8VsiN4VV|$4Vd?Q(b1`kd0jyhOwAhZ%Rm~YI%#0Qa{Yy4 za>i=g7RMMHkA+!?$hb?DmC&~v4m8FG)@jnWdr?f48e&8l;rXrv8}@GOzWBun0c#7I z5sD7?hGRcprr~{%2?)p^p`+Z>h=CNG5?Ku3oGbz?jHmhAawl1yG6obtpIo&w0=ReJ zWd>@nJFd_Fk%s*3o&^R`Rb2NnOEQN1Zb`ZAT!>*%PVIwnm%`hGgptg)p4>yFga^{V zTZl^6lSdPeK&AsC2Psd(5Ti=BJSetXbuTJ;@Al_&UCdZZtbz-VFGH*M6Xpk~-b6*2 zC@-l~a)l(neNE{|%W8jfLC#ZSEoz)6%9~+9WK$v4^67K!`)`#WL1!LpHn2|Fh_c%G zHkqOUxfQC~cL(H_|DjG6Ah+}{LDojyA3!D{igj1>xT|WOT>SjiC`lDc?j6kMt^;hq z+$|EfesRSDgZ4MK?0?1C`)dt9uSsn#VqkLXa_Wh!msM<+z{KLD&+5X59Q4lQjsan7b7>A&GvY0@+jPqt zOg)@8-mDDba_R4|gD7n61$xR?6H4MgXu&Sror;Cs!}8Vv+HM~|eO|{4WnHkJ@0+|u zT+t)(R$J?ww;=v0A#b-`;g$vTIXG>)?q?Bc`c5^fDjzF~!lz>)I#Nj??xu`Vryc7= zd@w*l8>*=G;nU(fm}gF?wt>x7j0V$jm>)S#MGvvwxFtSWH!=QddP-G!bwk|tt=oOH z$o=2wTbL|VYGU>D924IGJC;=&{Pchq$a&iBP$+a3@vNn7Y47d$`XwS!K0S>mYL9+` zvp8>vT4P)sct6tbHO-;N34zynksC5iL5T)$h=k}g;5{ zBjd%pYq;1*ah{+{+8I7MRJ9Wz`nTIpzR?G6e3%2%KF@xv!1IFEt$P(oFxFRX1kDD6L} zEIX|unc0WYIFXTpJee5?klZV{-nfm#@B?wkcR0YP|DLM&cj-Hxy>j4zO`ImUza3{Z zu6nY(6PbpVfXnB&_>Z_2c`28>T-ZCnV z=U?|ta0~A4?(XjHPGFGWu0ca^cM0x<;2wf|aCdii3C#3(cRkiDEb&Df;gRr45MtTd2nev z*P||D&Q^|?!~ZY>p5FkdcNL2X-Yj=WLmA!3%=ubk`ei0@c!lADEfOMhN%vv|;Q{wl zJ>uH+ssG-qi>KAgizvz4@mE~%@Y}Xq573#ElcTKA>1AN#nHvZd4~#ss)llKyyjgw2 zqZ+S)yFZ-Uv^1Qo63!Y5?A`yfN9?UWyZ3ko?(|g@?yRmkH+#Mp$llKgvfASQ?4~(+ zXhm^53Hgh9)3wcP%>)53q9ibe3Rv#EaRq3!xuj@&BsKBg0F^8*J| z{_EMPEeAPKM?fwNHNqiKRcHEdodNab1d2YU61PzS|596kGY9|qeC0oObMN2#^!xo^ zSUHmHW#f@FU3J<9zPa8Kk14L{*U}}LRsDz)8*H9b8aXZybmYY) z5-KhN%JW}o7a7T`7vn9>IXPOj8dZ|DNh&&Zo^$!$!`%LLhx7Hp)^vr-!uhq0^7(dL zwB1lZ`RR~rCrWbE8`_OVYIb~fq)0Y4L|tYs%m}k1LGSB8%vk&mDQ+aq_->g+^8OV^ z(o%L4V|;dv^qp5kL8>WULAoV)e#yrqt%qB!o^|Nq^F^bmYnO`K_4#;b1#l{5{Lua_c;k*;D45dy;(f~>Vs z68or}#A0=6SP~0V5b^;35HmqO&jFX{`)kprzgFu5Vxs?jQL$G{H06K)?-djM&-m+C zO!PlCPXFolD<=9C6aCK~zrP&-ubAk+`@sL{qw~Ls1^)e*S4{LPCi)c<{r?W?`xO%n z6!l&)(Lhtrf4{!HVxnI$(XW{3S4{NZ+~$Av^UXvk{m)UkUop`yO|nCMqb^eZO%6%+l6iT=l4_3!Oh zO!O-z`V|xXiiv*3L<5azzo{dynCMqb^nbei+bbse6%+l6iGIaIzha_aG131|)b#(a zaO1C-=zm-u;1v_C_yFYW0%Y_bv0pLKubAjpO!O-z`oCOJ{aoI3{utrQxg$F zy>~DSVs1_nDoy|=6GC2I1_@CqIa^~BIe?=jAsZVo8|A-t$=fvCGQT9b{!X$0lN^kHCs|*T zOn)cYUXsjzC)r<;EPo_l&O^xXC-(Y}b4gh<0dr?z{C#P_lL6Df?Ej!;15f^P#LMe1 zj`r{G_2=zjQ2l6ULiiu|0C=>p93g`!z`@eQ=3fqb$^O4S?9Y3|U<4p!`j>XZ%la-{Qc60cN3W;%MvaU}WO>^3DIc?Q#Go2Xi+<9VU84 z7LJ$eXC!>t{9R(q^lY45%)hIEu&^!gLofg3WMl@GC-Y0akTtO}buuGl=451H2PVbM zt(;682pPn!fK^4*#0XeR{$V4z;a7Si(&jswXbkDmDr^NQ^yKyJyBpQ}>Gv2_y-S=rpIMg_PSnKI(ZY-?H6L1i zZr4~y*asQeZI>sFZy;|XxvsnIN`O_?7uGZ^8Xk(e8p=9a${$ldUMIp7utXew zXmmCqAyc|eTuyBNs+Uy0ctR}qT!}kek;S**#c#G3LP{IDA`ak9yQtfw?EbplKr(T&# z&L57xh1CjzoIv%Tb=#5IveA_0mH3BrYf~5bFQFvZ%X-^YNK<@S#=g2xqoF93t^%%m zWUj@Pf7R?F29PSlh};aWKxQYT&EBlCpsN>uJkF``gw5Lus6gf)Qt}ct{uxUK6zg1uZH<=dW)NN-z1+Tz_r?JA1_ z;Fk4*s97y3ywX8E>m_J;Q{?lE@ca-(fWwt6h3fe$=-L1BLE!01fcN>#$BRgzh%4$G zY>dh7JpuZT&(VYXXB}44)C!z&e=&@*CMTjW0<2cTx9~g`xr2~yVN;rD`Ba}-n;8v0 zbl^YF-N8OLN4M4=D6A*>pyaLRs6NS-cs_FMO#NK??2=`FggIz{a+q0}`NgpHr$DQq zESF|#yQqT4nQ8cA$LvWhpF%HXV@ZEiEPQ=WmHy<&z0+isc0Ce|&m_pT7R@0(+@-Ca zvqstKfM?L{i6EG6|J38d&I3g@hj>MRQr~vdAp=xbyW6z-aS@yJ{1cc=w!q8|v?b`q z%%|#!)%x(stKClT(u&@>z>$6L`w9I=rol?$h5jfXXPZS{G_$Xt5SqTIb?P!IjQ-e7J#Cbb#*r2bG!3%#8~Tg_B^ z@bNs8hxI=FCW%j58RB{mBMBpbHmkX%PR>T&WR2%Cuc5pNKFU+Br)e8fmk_EGie9_sExzSwjG0Xawb;K=vdr_ zY5Ckay42+JFH*G+t1)R<#e;yMSA0v4bb|6#REO{MRSunHQ%>Q+%o0{shHjLUE*5K( zj!rS^DEpQUJqt&r4i^`!$9gmgVK@(sGn-YA&tIEuMcevt>{?pc^gf}U2!?DbhwVEz zL=)%T{j|JBu956^VW$6D>(9*YP#rjkwr{c(T55sR-Y(Z^Q`14eMr@ATu*A{^2{{kY zLr*du2mNGfxcNN25Np3W>yQDkWopqt(69+wpGbYCX%6+<<_%I??Fy|z_5z?squ);v zgU?bCC+dh^f*kN>#4z0Gz2iq@U8To*oNQ|f{@lNbf{cA;a$g2ELb!xL08VMo(6&--_N+^JWMU-84mn%;v%VpHpDC`CC{}5~b#6^XrtTO@=QN_Yy!Ki_UUaKW zSQ_WnvqQMmhKdzUkifUrVhref=qpGdBo3P@mlMz%k5q zD;Dqv12h?7v}YOL`X$&Cogs8_BiR?!tU+`d6TPkGzK->T9=1hGQ&x~<_e1CPa}w}G zHDKf$uOK{Me6Z@w+t|~P;tWxy>zq-?MTmnhP4@ewUO7J=dh+F1&v8ijt>xA#SOzK& z<8(nGo>2nh$sJ}UYlWMGETrYpx|~1F8Y|agQhd~bkXLWt_6h`Fsn;gPsL);{ z;DbGFvk4rY99+|mLWi73f z(tidd9BU@HBv`Yiyv`!+V^X;rTbZ7JVJ4(&Kxua=2Ow${ObI+H{n{WhCaf~e3>0JACgg#z> zKWG>IaAzmkOErELpq1USwic~+?%u5bU82EoQxOyjrE#?|ZL$m}yh|`8%(-q>5mA9h zwspa;2sgA(;ah-Icu0KQN&=NO098fZi4A{@%bT?*=b?=f-IR`EqWE(FsMSJKMF5jd znNjDC(gX64%&C{pcmopi;P$y1(iXb!oNh)gdatX6yT|-@=>qbftX7D|c;qMS)a={! zmCl&Z71Qf?I=&K`3c3bd*zVAsd1}to8y{P>#(hV@Ie6;D;Jrku?5V$7-N5s1X4!r< z`*??4*Wtc^!g-U)1i{8M^45rV;lUsRFIPX7dI7;P^@FGKJt)(>cYxzg{I+d;|Fj>G z13g78KVohv1|v_o-#C?2!Za1*6kzmhrt6sVDGqmc($L_*@{kmst+Gu>N9f@fVNh)H zjsZrsw#LolJ+6ge255nBnUykug`u}_=OY~i)Q8J#qHQh%m$W*^yHUgo+*AKa*>Mq( zK}ST``ktZ6>A>0L4nxl_XADrTI+xV;;_jYZiy9o2hsE|WK8tKswoB-*WXZh5>Ootj zY;J0y?qpG(MY;))1UQspw`7NVaQX6xE5U-rf3#6(-?5vSu7*CR$8;R*G#tIXt&$?X z4e9xQaF@!>`crVFVO2Zm;Tfo$mKzVnN*(j+PMZf!G= zqH>$vdLDXDsIw4TF5tgE7I>1@l#>RNCuzT;S1_BllY}F{>k&$qiDcsda!xx zp5JU`ZG*0NjhX^9nV4=8fO969F0%LVY5hd@fgSk*yIzOhbl8YUXdM8*#4o$0*mZ=3 zyqy!daN@8#+Px^+BPylA*tG29hCdp$X?~1u?Jxhf+%#$^_l5|SN{)SJ*Yd0?wV zrpedf%;GG9^L<@ia*0whq4>ESf-5mr4fGelF}7>+gd;`l41pI`*MPef#oK$UP6(rq zbNxk!RePL%IXv$2)4>9ND!I4WGOwUE@>IQ-~&CDDcqSx-gjx6f)v=9 zgJZZHE1QZau()XnbB*xKlx6|N;P7n1roQ)Zz{+~wPFByX;;uMxehGjj@`|<+M!+`A z@cWcdi2#t>6%rem=tZWCl-n1QqqS3s-5))1};oB+oREP|bA-RVXvCle8geV@(^ zV$b{LYui-mogXW$XqM!?V{+&vAF$R^M1Sjcqi1kY2(m`VKuhkL4y`Lr)b=P1dHSTij6L;6u=OQL^J;Dl7%=^@EiI@RyPNqo4NtA4$XX|w)W8#>*8hB z%9u8$-j^%Uh0s=|rONJJI!^(^b%UI%Gs}`;6Tfx3_oOl1cMXpZ?|W8e%)1R@@o9(h z6h8Q1?cT?H;hFmwbM1<@#v_T4r0$0?ZQ}mDhK4p<3r}l)h;x7-Hl8Hb$~&!RslGB- zeLmm}L#DzK7X;W=m1t^j3-Ki$jE$aO4kbE~m+I7T+n?=``K4%%f!5QzpPDt2sb97O zIAh;!!Pa*5^PhIZ6)e^OH=s20OYU_tEWMz*V04@v)`SsE-qdtS!&9ICuWyObhEm5x$0QL0n-WJ>`%*PZ%)8FJ3e zhtXG0p+P^F$V-y=$0qZfeV~uNtwbrXE{gzW1E(DuH@^z`rrK_}Q^GAE!@4p*mI@v; zAas*rYl|U_)?(EQ@H1QyBIojPI>c$X3pSAg+*irUuLwQ*2GJg{Cq(S`1Jwcf68z_} zUyupr;D2-uq?CIa3)$$+r1HXhky>=F39ZCLg@*|olr{Db8ZW9j1ah(F=$6^jV}wnG zlek=45IVx5i_wOxVMRwDf6}hh>-RT2zOSB{lxS!6xWd6g?1Z!3f%-u1`@X$l@R1<7 zIcBr}!CJ)POQQy;?X1ZM0AoFqs?h`ciSQ9EZizPT`|TVSW=_aJZ#G}knRoCEpLq0? zt1(q{rry>XvKkAYUEa)@@8_;^GGhkbE@eO?NAaQ}t7oJ|-I!%je&Oaq+>98^>00x^ zgS;(ZeQ2+;(;->LR9KxeC(?5&m|TxIo0;r4Ct`z5G2~=muu~Dv12y2MA!uRpPFj1! z*?^c1bHk|{(84M4vX2oF*ZQ-U~|r*nerPagh}FY7i!r{$|& z!#cM3MvRQxul(SXq5w8Ag6reVUXK}L&b<2_p3b%I#|t;>6y>mABl;>d5E?eCeD}E0ux!IXaG9K8@wgTT`}@CBRWL8G*>R z@6s)B_Y?vP7mg2ib z0fL)O>gYxy?~PEGES}>DXBPPS;nwfj7UJ}S+u6M!!w3Z2QBUT4hEBv9v0at|-<7EK z8N`PH4#>$EO&biW9KgzNwOcr|VD&d}oQQAc!M3vpN8PQucOpfwOgM$y0U)&b7;UNJ zxh!fRfECN+BJQ|bIH?oz&V_MMXDrXSV*Kp(w({BKF~!_FDXR<3##Oa%QG7xbjD=!c zt^hpQ;n9!2mOAwZ>U`6#xIZ<_I=>_DJ-o>i$~+u@u*+#Qwvoh@AAX1T;~jJ!O=;^D zBkN-aygc+GImX0Ev4(f!P!34M5VlsSU^SRHLs+-;Mb7csev^QOB~5a!o#9F?65KA2 zO=U*+Ir&NBPYdHE8!28G$G%l>=)9TUvlb)oCyT0YO^DTF&ww*%qnl56|p7DitM zp1Rc>)fuTv#tSfQuz0KLYzFmHx-l8axO347VM)Lawt4z)_%Zc9%3Lg;35wh|%!Jx_ zxN6%=uzoyA%9rCw!(pqM!!>m~f}!H4r>l%N0LY)3TF)tcI<37|ufRvf*}_R3TBK*5 z+j6-wZ45iYUa`8)p9vpT$*z1H`k?<(#ss#H?w$y_+H_Md)lEKN3HAi zGiCUVHl557i=<$J6 zEaGOrp>5yGUD*V|tOy3O_;jo}t4Nk6I=<{gwemXL?79CaSp@b}uX1ItL+CpW-G0F$ zD4)t>|Y^)jWPn{}cI zpF)Pkjj!Gv8tsilA1)2~2%nrs(wV(^mP%5NrCO7b=dhB7KiQR$7rh>j4@~Ru8NDmM zl;Zmu!Y4(yM8)^jjIUn$hbNkx;2ODK%4{{qVI*hM;974-({PzpbnlvI(EA={U4QiB zQpb^yA{>l#<++B>o-wB&_rY;{_YLycLr>CE1!dc@_H~r+(0T&fa&lo}f% zIil;c6$vikAq>ZL=`k_0`I$qlw8>)Q66>RQ#I8d+aw`Jg-BBIyfbTX_*=a&ajQI#` zl@wGmtcAe$9rYy1Qf0ZS@t5n`1YXx=jAZ1&2Qd9D`(2XeFu=EA?fKT7O&egh)Z;lN zm)1OIp{rM+v>hZrmJWiT!^0imeCA1!jGz7ik@w43hrpC+1(ac$(nY|+o6(@VpQw?^ zou=3qL1!tB1?kbF{-^Wrp)-Vj5b#qYlG|RzETBnf+IWd}uz2aTUW^2{ffQ-`>wJvy znU7TDNg-y(q)~RcI{jFZSwFr_ZCy?->&oSA})EuNP_ob)1JOI5b(*SMl9?>Z~N%v z;K(lt!~F8-Kb-1f&<{LuLKbhRGDHmhlD&D~(v;w`D$8*1w-G=5%WxMbO=Tr4`$W|~ zsg7WYRf`J!_>`GneybSTG*sY3jJhl0{^?5)^JvWjDf@#rtdFM)!3JF?>LMWOl0=c6RQ`~heD+n%?NYUQN#Nixf#o3N#RBI{{~-T%Alg39+jIOi zjC`IHF6^zn+$7qP!!fS?9-ZV=0>50W%qB}LpCRl^QK9b(bCl!{-3cquVIGY^pw3GR zgvN%b0%Ll(G6#6?(l7OO+vW#mR_O>L(M$^GJHT6K9orXBu8RSHDlu)6Hjm^uo8gSE z*%$-}6I2OGYFk2#T&-1IMpa*EL%IVbTXq_Moo_0r>p{|ARv~Z>pL#L4v?T0ZG|%2< z)Hs`yj4?cfj`YDevJbY!H>=#RF>?`^&eGgt7bhdLNSo;ELvZnQDF zCST0spX}m=d`l9ND&_U{oOJM)j)b=!jYz~BLBc;+ap*OpA z^Tv*%e&JE+Lmr!MFHCtPV(Aq`!1aD-!$BIY|Ix?Q(3{4F3cV*>l?H!0Y z3{hNV0k6bAr;UYMG4^~C@Ix;kb@C}Cd4~{vts>vp^=a+lIV50Q{h1-RCXNc6%i{mm7H>#_?fYFd{@bMhYCfW6W-b z;`;;SP;%G+dL@Zn)}W<542D2z$Ov@o@}EHiX+C4RYxf5bw_Aztx>7yP@Tr@JIQl>s zX~JnrG^GyVqCSwBS`cGEJJuLY4r5MNIDdCcF*1dVC$>|OI12aO4-gQ`G&XhHgpWw* z8a};QUg!B(eF*0a0xJHf?IM1TP?c?B7yEA2V~3Guzhm6a@woFKNO%0up$lAJyKN%C z${ePiiGO0XZCw6>F)XKL;KCqm`n#h5bIpV-u53JJkx=ot1rJZVU1ZLxIejAv+1GB$ zLD)y<@CebYs!CwiSi5MMpDOb!w{V;%zMpn8Hcg~QywiuM)jiPafnW!R$F}rAwv=Ir z7_O?jgrTjiyL3O`wVZegk$tkn(rKBL3a9fU`GA-^ii^JS*|%Dp!3ZuaD$3O!J_FAm zy5D$J&sn#Sbd)ZwlfW)Eh$_ybtF)p`cETI1B|2ZQ3x6S{x6CZ&R%SM$~?G<3vi zm&G5V!lzYgF4>1X0QLtNiAK~D=2Y8aX!PN2BX!xNk(59Zx zPOfFo(3G2Kt|g|_*ITO|jNEG7Jxr^S=F_FPQp&ohYZHA9&q&`}`8_#8N(dMmD^?@t zbbU6@#)$!WL`JWA`zy6q`%TN}8Ab)9VM_(lEqtQZ_YmSdpb~s)a$oYN5)4(>lXv@b z2xgt!dPH5uJ>44}JPt~2oaYO@1E&X1^(h*xaKyr)9uFCFj1JXiM<2e{J{H9SOUnp< zxTzYa<|efr(NBv(`_|n`H}ZEW5HKm`GVndb%D7izjJQ=&eo2<&^%Z3X*ilQrWmV6) z#9*@DePl{OO%Tc2^nsv2CQWk|DITX?hq z-tu@QG0V7AwM0s^hAYcZpc^j!Hlhqcz4c3{D+L+FfFE`bUWuMPRiuNfI$IXXhk?69 z?=U|IO3dar$T7q;{GW;N(!ZSRoPPJ#N!&x};vgZdPx_EX7tx(HEE_Oum_z74ziI&?TP08`F5FOjugYT3UiF!0~)SsMkM^G5rgj zJVs`@%<9~RHA;pH&DZXogZC;6hLcwp&K>J=p`|c-3)8@U8`L(_rRS1$V0{!dOI*nu zT+enm0ZBpON}J|G=&vhKH4b`LgLFm+9s;x4j(6YgkKa4WMg=H=$|DRPVV;IT?sOPg zf!E%wE?Qc2+x_$pcCNGbLZz)QI+`}a+;(j|mD!H@upN#U5rAV`n~n{8K5S%-I|3ST zhuq?`;pY(khi;?82Bk`-)`-&1?+LYTR-fkLwfoW?9x))^cQA^k z$!FNG%V>rdYt^ZA-;A<|;xKF`3ehI_K?bSI9X6=>8n-YKexex^Fam0kBc;mZ3oZjR z_)qX-3{nY4kl5pJQ;%jLTi3acJhyhILKh@t^X_kX?yoN6-b0oubeSChwq4y7xyg#g znJiCH-4%J+DtXGDNg=r#45~^h<2Ya9K17T2RX<#5VD8A@v`T4spCz@XVrLzT{VZ@k0C zAx{#JQsmzw4yuHHLvs=q=n#TJ;CcTld;Y+e(D1Ro&qPc1R}ZVrjaIkiTVg*tajixd z(=aU6)M@9CZZz4`+jv}L*^j5ueD?$FhuZyx`OzTyk;!t;xaPYzeEw0Ioc@rIdAmtW zXiP{Hg5k6Ee+D1{n+sT;W*C%j7B3*L`0=6mU>?a^rE{R;Eui7C-6woa!Ns$u9F8pW zrgU=W3vM6Z*TtG`O-a{M+=^TF2I6zJTMsjbqt}vH5Q`3uo-P?a$3(NcJ!PJ!Ih3v>0 z8jl*jUb?rwKH$Q3#w>fi20t-!?04DqRfzCpa{!X8a_3sp zcVzUklH+0>bM4PPd48zjctPj#EeJ};H1~FhgN@TcxPvlQUWhhc_P5v41jtPDkZW+V zYYw~ex-un)ptQ)e1m1vb?7e(?t%KMN1zr#37AxB`xIt znN51Vh<{>NF~bW_k?skd2TZ=-(+pt#LxykjlO&)>9SsTuh81moH_k07bGSyq&pj1@*WiV zYd}k3Ceke!Fj800Xy4nfIBKs3iJR3PbD2`MET6I~glvwi>zIwvqM28Jh}gH$@|+14 z_!Z8x^nn_J;4Kr3{~K8?V#v^+Swm-e=$=+t<2R(7k1mb02|rN?Kg9o4Nx}KerRUK; zD+Q2*GSQ4*0hP{lpwhXX)%;uOjMt`_ja1fNa-LkMXsaQcR;ujbttY?A$orwdW^T_k5m6?t&*5R z7gMtm%Y)mM$4BxrD(TS!r)#6FK4fW))!IRr+6)LztzqQxw2Q>!$h@e%ij)MVgAp%4ShxjIKbua;$JC1I zBoHI(`OlgqaknYjl^Xs2>mhT0Xqfj`IM6Q|CdHo`CNC3ia@&iB$@ijRCV`w7tCFH) ztCn5Wdm>qw?!Bq9cZ&-f?yF4Mi+nsT$2FWA`>ahHaFe3Vgw0H3m?oz}0NxwZ&Nv8+ zn4;Y_v!g3=W9+h>Hq|LF7X_p5%i%go_)1hkOtsBO{j1@To2JKI05%TZLtzo z;HCL*!yJ2&FYk{*;tB0@FWfB}k>o_L`q40$U_kMU2W84Iw^U#)_xTR>_@X$9`rLkM zjNEUmbx&QmnWrerXpHD9(})B0OQwcD^vm5B{qmfPysN}LiUkgeD3E=Ht}@nd*p#X91Ju4vwTmK4}1Rdy%*Tf8>mL zTWpPp0zDEz0s37hhNYvvRN&B2D7s!vG3!O@QEc*6V@kU2thE!)DN;Fvk%IdW6kjc7 zaN2Ocq18`IxB@>4G;9UIPAv%#w9X&uI#V=nO6S2hUW8N+k}SZ@H}iL$HWLujCB}l- zngdpIQiF_|T!8r(5mSej%dmo_f|uFyv>tk}^UK~nu9Fa4hEHVbKUDx9s1!iG|zrGz;qfrb^Z=|p-YtuwCBv!lD3$;g}kW`)jz znP{~I*WHbgJbVe^lDu+8te=mD!YV}$gXuO;>0+M4xh+T$0u;PR$AE&D;Ez*N&tNMv zdbk>?okJ8;b z*FrQ`(KuIMt@)bH1|^b(Vf(-tn*?fF5K}R%6&1$*S`&$}j+rMN-xYMAj=3h=QCx-=`U5tK`@Io@ZFhKK84*4hgHHU&u{!?g7`+14 zw?+33X{kN&LeRyjK-ysWZEQ=p6<06Ta$<(!O<5hCgc&{#2Hc5V8qyVMnFP;pi$+oF zHR&S_rpcfxbR#3ZX64KQb8B{W`9vsmD5)bDKZF@;E2{*qW7dVpx}Agf?x?lo&80Ag zyo&g?L8Mx`72X|R!?|@m8v}h??v1h4bk&rubp^K*Eq*F+lXPN{;gqaukGYRadjm&2Q9Q;wLRs7u$J}kMBG}GTCV;AC z-1Kz%m|y6$V{yrV#+WFY4Kq;Q^yoYe?i{G`rky-E?1%V>EAO;xLfdI#wzlkEpLr=s z^#dqlK7-(Vio<%m&7mKHlu4i}`;hb^W8y9BXyZ{-4Y*V#{UKwj|CTYWH=wZ)kSXGM ztp$Q-*M9PfHRoLAnIIOhwvu1xB~X31%*wf1losRKSZWV{kz8v;$HIS0uD-;z(rkVF zmWCtC20ZJh<2=M%WvP`OK$XVzayX!f+iR~ozYvE(zWe@RM%P#h1+PHUp1=E7YN=kA zg_q&>4t&N5)I{zCoS~SOj|bX@nJ|TAABG*M;K~8Xc1Ut({fmY<|EGqz`Jjdj`hwMC~BhB8Nj zxFZE~aJd9`4okSSl=%A?S;_2LD0B;;h>1jg4h;Y0Ya$d$u>RqnXI96IT1_e_y zf-MORxQnqcABt>QC01(Zr@RDm2o(3|ZlNl47Pm6kBom*sk5l&fNr77)PaX`~%hEh{ z1xb(X_QX3L(3jS7g(qaAzY42mbRulTOHg55-CzkQ>;{QWl|nLq}bR816bz{+KPwO)@w1mx2kdza?R#9{ek&4wBS~@{;?J7S@tPRpulxXxDu8LXyeW zL{4Qo1g7?*=aLe-T!GZ=wxwfnF3)f}Nm&zk(U0*$DW@2B2w@bMB8fj;7{!LX#ju_= zRqA8-;CYG~Pg>|R;$IV2e$Ene-|#9A>FA+MIkWy4?!|ZLG%N6g=tUv@qI=WtoUzUa zT3e!=0yn%C?HI=5cZP3l9(_0kmvPW;GDbkLTKja-@yS!c^vem|}@v_9zi z(#}JaE&Us#Y7Tbokqbu-l&&;9{fHABWueC8ZU%7gM#_`}t7aJsACCHPWQ%I((w$YP zR+C_>;cHc|>c7)OT$x_ItxRg{wIQJk7Lq`4znedU4+_*=C5%Ao1-&BuZU0&2c#2g{ zo(cl?k9i@RCChGq>#ISEU~bYF)Y=*RvUSCFaln@50@t8^qr&?jp8n;7J}Dkg+>3um zt())iC#gN9{iZ-~nWHvp$)ZtP>V~C)_H1-{e#+8w4SJ#+c3(+rLQ@Ao`hWy-3??jq zD|&v7Mmbf)h*yaUd#@fA!B7 z)KMA?@Qgi)zRY5GQuo3C+K;n}c#G$24`yKr*AsC{g%fA>4u!X*4J^vaGMUDZOyk1p z-4#eDP#mojuhRRiVB+nfCE`pcPMEcDbM*P_Cm0>hp-%@g_-U72)tIAxkiq2AJd4xR z@wRXp=S{)?L^hqcY@N;?mGd5~?3WLo(Lg;%A8SfG5=-!zS%twabT~ngh7$}Gcu|mJ zbZ-1tX*0i39dlR^?53N6hf=Lm<3$qmX1ntqq#I#gC!m6auKha#t~o&oSNg_UKy| zvabe74p{vv*){+tH;hOr&{pD6_~buOF4Zjnp}r~afL=e`&fDu{>;dYJd@88hi1lY? zBQ_>RrtDvmHF41w3FDAzOYI>Z=?6Cj1AlRj5_>H~=_^2(MG8YItr_eEJTSv1&v57n(LaA0`v z#bo#?AfG+%^2K-91=7+fS2>k3JsfM;VLYJ&vB}wC4N;zml}j^f^RVd%si1}#22f!1 zGt~~(#8a=4Uw@Nz{F6kVnqaHF7eZRedvAalc^|Bu9ZVVA1@5xNT@~}^uy-ChlV{Mx zSPR(Z0J;C@7EoD86#R<3yk}Xd*UeVyqplgNPB#)st{rd{uU+4=(yI-xXJ5-~o&Wye zAkpiW?6qTW>;{$v-zf6#v?8}MPqkPLrsF;d!sr{%Y(I7bA}Dxyi7|#wB)V+*Xkgdl zPXz@Az)_G5Abg(siLmd;i}(YTTi!dtABA#?8Mo%V02JtNR4yi4n2{=OP;ZojynD1V z8IvwauvEB?SdNtAvl+O5ix{Tm&$+QD##F#j8Wa!uL(oQ`730@EcPVE0)Y?EFI_z;- zh3%B#Lg~|x{MX1OO7v*XwkPOf;?rjAISQCyTZ}hWX5lYB!&A+NJgScOlhUX@!9qgn z&WBcP$G9Lf72jv7Lc=UQeLR;!aGP?(I}l0xy)iqM2l(8UBT0b*_*l06L{j-efS=?$DHU= zX^0p0hP|u5tQ{HCl~aXN^d$zM%+VtHsulFBzay}#1%KdtxEcXML37Mf1~XK>o@{8U zV?Hl|G&Mb-!6a<_drZF(u~A3sqMbuSaz+dS!-OMrF~{lK3{r4_W78IY`?6dv&C;J< zB$9vb%Kx($sT;fQY|X+#4qm-Od(H^qo_K5^B!GoCM#JrwWRZ--UW3|LM%af0aqnt9 z5IvJ{&_#ETI+{jzr;Kxzdxnu~GA8y#Hu~vyytR<{Hr5>qaHcRtYatAY!S*OdfcX_%*P- zwMV~btuO!KLQK{Z8E93B03X%kk@oY|uWZh37r%;|jcs>nubtHQh#ghG ztm!_?XFF`g3bhRI0#Fhx8F}}Hc_yfbTgJ+wRBTU*SJF&$g&fCH5i@aei8<}ElRjKA zY0{RvTfqmC`67Q$X4qbhvmIg2$t}g!tPspSEpuvk-|%pJI9yRmYY7A+0&dZKXIr*0zn{szS zI)$?qVh3|r&LX{Xd(g8;@Ifl_?r-XxY?meqaH4PuAPr#8Io@*|l9PEIuiiGrl*BXl zU{I-fHxhr5vi>&@vX-I!gwBIf#d+F zFhLoi07(Z-9`#uSFT1en>Bp}???8e1foOr&4p%14d`@aEoS|?N@d?*$DST3%&s)kG zv>3@J8&ApQfY|&= z6X*sBnnbpt0H>%T{iTe-OFl?b+9JPe9R;)(|Bw?QVLYN7L|5j^?8b}B_@VfXu~|4H zCD4Swru50UPz2~Q&Jb}!Gmu80)+QpE5rAPVgamr>iJD*-^Iu|j0p5Su(<}edxvjtn z8|k5d=yAi9Ff+RH;r)dw`z1GYZd?A^`NL;4TewsWCLXlJ?mI8#Q)^2!*a322I7|UM z;9hvxVUnY%$?n^!D-6&Y?k28TF1zpQsDj4bMur)1fIsSOU@EcmGMNL**mls=MsF@d z6o1gpHpMMyQGRv>@OErQBz$5Pfw{pRX@?fybX zMD*@okiHkCs$?dt9k~L+kgF%_$QgH?0rZf}i$;I~i|_jO(oEG=PSOYJCf98dxba`Q z8%d?@^o;G$H+Y_vb1<4TOt0Bfi|4kBMrj=;Z|E=6rK`YMrj#Xb zSkGvV-We9nbvTd|D5bbpOwvv`cwn1UOj;3rhl4p?wqhixB1exE_xh*|_655UPj3Py zq*m671+1P0W{6zb&PZMau2*k*8M)T zI^|&GBsBl-n*(`SPZ)Uoh9M#0aLT9 zS+GAXY3Sb`NZ4Szj?;4SV4zADrM<xw=+bXdBeX#>Vc%U%UD&O zQU*5Nd~=lKdU%Az`-X#RxY>ei{zQxGh}aJn!Zh&5WGvMzV;ZW(P$&^sS+6Kav$g4U z4Jk(80dl^Fga)%G?N*?DJkhK*R3e1(BS&^MI~0W z?6~kpyM`}Td&bj)8bd~J3|nueAg%aps7ddoIUR-n#ob$m#nEluqPV*|1b26W1b24= z1b27$5L|*oaCdii3BlbZxVv+jB=6qu{`S82o_o%B{+#A%p6crACAC&n%{Atja|nxI zh|E8FRPc`}+>W90xo-dXuo}HexUBHuR?RZ{vx9MHo38 z{2hIY!1FwtpUbwSjE8^VCY9%ei!& z`HKsk&&r!q^53S6TUmC%yX3|OD`BwiTUsmLZM3aMUbMJQabh6T98s#e^4?TZP`5G{ zC8Egm2NUsGh5?WBKzdt18GaHoPHeDt>_NveIR_iAc$dLz?)#zM{^NtL&1%W zRyp^xo|a_^^0yBJ^dCMDV`aH(4gxe9i!t)ElpJ^`sfJW^tu`u(2b=f?#Hq28mRHyhr`Vs^tn^ErjJon0(4s#sj+lgz>lM7@=Q{*9Od2Xp&ollW=fcH z)pM(f5>R|(d!r*Gxu{muS)BVRZ9>2i+D&O!HJmS&Vc!R%o1y}quxJrRC{bNvs2?o! zMe@hv0FLg^-b5+@@h`|xRhQLS77(l^LjCh?zaVv91rE=E=G((}9hcifQp9w?6;GDG z2+nH%pxH#u#rh#v8d%ah7mjZ9^Zjzy&@2 zV8gjG+mxKRDFhu^T<050RSbMsWe;((lCcxu`WCc6ipfCE0$4IwVlZL~+MWc5du5IH zp)Jbq5ArwnUa0&kZ-E=6slDIn&r3>rljX{P1cUASX_EuT^8BUO80{kJ4+8^xw)H#w zRwK=)X&e$oO8VDuC^|sc5GU*A7kWNKrz_QEHTmTY_{&2P^RTH{IN2{TeK^%xRo{}D z>t~{6=J6m%JJYbF_dZ~VA$&4E`iMv$_QDA_bzYSCdB=mQ`#pyiZo zf`hZBJyCeAXp`PbP)D`$nx#46sM7y9f(9WFTB|WeUl3Z$T#m}*Chu_{Nov0;PMucI zvq%B{!6zi!~0Vb>ufk@aixEYfVn~?>-}I^SC0gVsTjznMBYn&hDZ#lV9>OVjX>20MMfeie*3dj|5zL=50{tH(-`A8q1kH0f{8}!KX731Ye z%k48(U#qi`mM!KzV=x;7Zibjhsog+lSR{5o4;T83; zHkjCU4eVC+w$#mV{=w4>!$;q6)Bx*(uJu_ZciR~T=jMW6u=+9;$^G$8D)u&>P(|4tK=UDF7WQPkiTGG;!i*7K0j83Mv7657iftVZz$tKlFQ=GlBh;Fr2W^)CZN>-||r zlIJ}WS#>wcWum7LL<`V50$goh$fJwFTrC}rHh*6c@8nxNLFQWtkD71{vH4vmr?moBks%f}jC3UeO*gQzvr%LK)QlLF z^vD})>O^Z^fn=roXr8==>}FXuu(me`3uyFV^I#7f0lv!C7kwl(xhu#?sASJikMTP6 zxwbsC~-4t429i%Y1LW`|H5|`I2>dlK0!C{IDZ+kf zK<_AeK$ot3jrzR43gmQX5kG3^#;Qp{QIx;I&CfZCdp++48NPF>5U%9 zv5+L=Z!0vgOOY!BB-U}MXOh}gbtt-6;||p0)RmqkwN#&lAkG(@T!_1hlW<6NGP}Ge zYSp!BnxtWv8+dm!JIT2AGr$*tf6-n%YQ+B~gp0_?YzkplG)Q;#@Qks?!VMUPu&|HU zOi#9wWIO@?{vcxX1TG{h-a3xUaw@*rF)n=xovs;R=IsE?yh{BB4A3Cc$G3nzDuz1U zFZB#zRqq(^RGCD#?84S9wN%NGbXyYBY=lgM_-U#@`^N}*Q#ix~Mr|9+ct5Y?N6=DS z`YMNoz}lYeF(NoY0LU&)o!(1#YK!5E1S;=75&Rg0Oz1COcM!|Xfuj&dM1-n${6yRa zv>He7tqcX~(5@-8_@97T)~EQEMf*5o&<=eMv4DsJiYl^zV}FY`N`x0m8;uF09%er{ z4rDC|X|o^x4oBRLlO|KS1h>L^JXy|tUdX0!@DS;n0Z9600P+p)bWb`P67PUu+^DLe zo)4MVmYsz!E)HWs&#H3F=oVXFQF@SP#l#OU*4+Q=;;5A#Lez-k~sgc4s4~4yk zug{FVJl5xlZvw12x!F^o&VeB%a!WJW??k3ESe!*umDn4JJC9)gST6h6%w0BXys^As zUiq;|)9p3N-cLWWBcxJ!H2MzFzVk!G!2kA8UsQjiB7+%+a7*q6s+eE+V#eB`$Xi|NS@a$vma* zJK~?th$sojz2lczI>Mo;F};lEtfQw9lLh;DY>Hz7rrntCi#UHl`^NPiFO5K&z(agfSjrSV(ZLWARg1X4L z50V+=3uG7A&=Hi|1b@mcpKL5;ocE&yU}%a0FhM^vjQp$u&7mX18M1@MNPf1Wv#aO@ z-}cI3rj5eq3=m_dAwdW9QRz0_0Q3I%xDMoDMkNEWYfBWf{U@#`7XYL^*lIisR3*$t z=wQX4YMi!--+xt^^Mh?W0*&0NJ0%ag0;8uR7>sh-ZH#eCQ;9tEd z%DeC#bgVtDMOT)c!bVX@a;Ti4O@_gVWv329g0PWs60%o^KCC&S*4b{6y@~V|LkAwf zWWgZ`wfk*0VwIK+)+8g?y#?>M$9%ke3*!lz{+Myhod^4tML^Bg<+sDRml&_%Yx5g~ zaHkK??~{9*A|!LPfa_-90z#{WRRVcoL@@9JMI2^Bf?Hj*C`Z5gssEU+8`NSQi@hSD zRFe$D1!SOC&ycZ3I~sV`^6YvNjG%baNkh7B)54^&ua|jkBDa#3IRQ-$;Bf}M36-wo z+)<@Kk(x4#;95h*Gv4ehx2@i(yo*}`E%laELwi4JG*@1klBvijngsk4_dK4)Ggd^L zlZgT2_$%Cp3d@poiBUR2b=j?M%m6(Ib8FX@Df_fOie%hbkHFD5nj<=0%x{J^_g8`Q zTJ8QkqpR{PAQb(&1IrghTucpckyzakZQ`^mLup#M<03&C?I04UCpwQ0#a}pSA!Cao%z|NgT3fCq1;6-$x?|pMc$1f_Oe`n9h>}y|A)&O8|jVjS7P0(5KMnhxSop0%V zYAi-B&?}bIZ_1_g>#x~rd7H9WzhB6( z!~_bbsyeHa7kI&t^QoVHX~me+Qz^nc!4_dO*+m6DA}D#K#k?rHN1#q4Uk{!r?fLU* zx^X<748}CkrgI|B312XP5hNcgV0G7}+D4>YWjYK}05@5>idPG+1u(j;!;OHlx<@{zgY?v&2s_#W2|o6ZdcetQ+-!R7JZY+pGe)BNik4T zy~^gPyi5Vauq@T1xHso%usqGLWmvjUA^I;|uCog>?3;cWd{tXsf8c#V11C|}XMl~z zz%QCu*hVyBLMWTaKU^gzFprY@(E|vONBcVqdZL=b z0|4h=@u1PLqQwo_-?*oN%)A6luT?Kth*JTK?2X)un(LEnbS;vFbV=&Ay5eKjjyXV@ z6dn+ZpNqro6H9bLr<$j`=_&&bA@<|Q;~SumMJJS^T~B6&*h#?mis7?BeBOh7;$b$= zO^{gt%Wn8D%T5ySB3I8`4-1U`W3-s*{ab~8 zF2ecb!SG?^s@e932)3l!ohjRz+m9V|Hk5p#b-TewBJ7Se$R|QBXKm z{lmfRz2fPVQ~FgU_);##X7RkyVfY_`8hS$s3j2(eu#Y}us@w=LINNHiqR_a1s)U(V zPhL$?H7jsN4(N(Wc#ALYXZ}ISb=Lt%6Vc{KjTW|OOXFjQd-pkmd|D6T)3Pk3kXBR0(?Qj4ljn6j{+{h`hx3|({re^+Jkf)mVp1Sz3g8ALKMx=aGw67=2yfVBK z;^nVY1~Rnp$Gfs5?hz|yJ@{4I8*yYZEvcz!-fk5wJ#Y-GoRLm_g=BpP6~Qmp!slw_ zOjO=Zx1p2dTJ$L@ICrDY&`I-W*QwAVW-U3D(JOw5+zPSv(Y^EXQ8OQtw=2~fmULMB zKCC%WfrG+C zX_ZoF`$l_VYQztUSTQ&tJ4no%(rGRyG1VM=)2uyzzxBgts@K1#Skd;ToZqAR#gdD= zd^)2J^Kfi3T8>+!4T~?-h?=S_?$!a1kDGgzRJp;u3iY##2-SGMDdy8Fqgcc^dEEPB zc^Zra5OpjE#-TQHRYM4weF2$LamVCI00uOucU`CdhUuto%l`IF%06gTDOuKLUmu0n zWjW+4J2?mTY)F4K|B;|m<}yrrI+sTGC2Be?Z=XJc$CcZNv?K?tNCcYPp)1Rf@E(kT zxX(yJ|7%sH+zacsRPqb#g++l82$4Sv$|jiSm{hcWR5Mor)3SFLHMGSM@?yC%a%BnAm6ZiSAuL`&GaLp|WRWbFSn&MgbncoLUZL`@|$l zp^9(q7mQO0oz~+A7R(Y1?KKGUu4@3mG3+tgClr;}By`u4Z#QYVE#8)sl!Mf{yr|@l zY-yk4T>Bn(ue0T80@G3(?5d$UJ2s|S9Z+3;Ao|ho>=P`9qI4mRmb&7wj@Q1W`$7_v zLfzof{J}7RNBP#aq9l8Qe_H}rRidaSz%S`ZrOwSL${F`|r-xx**hl&ev~|4!ZM23< z4~{cb+HaY|ve1s+@*KP!=NV9aLq-R2M=qkAi~z`}$B6nRdK7cAL$H(4 zjDWVr`y@k}MBS`%+NI5n4O;H$c$xJqYT4O%qnCA}B;`_?)J{EmEp3g@YK{i!^1nWk z0}k%_n%zhTC=m4xcmsTkeuXyIp{l*$dZ$ghK(X+FnntROE<;3i3uSm%(L&0|$V5X6 zuy2%37v!6v^}TOkl2*Gq&*-wg#)9t9;)R)OeSNrgeZb0Mq-b~bh%#5J){78l$HQ&M zp^iw1OW_rv!K=zCZOK-}SF)S+wlLElsXA*n(-i=C7>;X@}3~(t>Fk zZKmq9nds)bLS3ooq017s{l+8Jj!@WTC2_T&PQ;u%NTFJzBZE*1zrjR=rC?rPm4^r7 zBdCAb5rIFXan`i|N12>>(3QS^-wvH99uKAQIYb4iYBggoMM2P)JH?|RzGgK*V#I#a zH@OS(^Drm9;==Om-smG?Qah^MMp}^F?~y`Cd^j^FomUYztqiDhgc9}iu;{@R%8JvZ z8>SNK;+$7Qi^au)eHrbcbKt|KPE_aE>vKLHmfvHRN13H(00{?_^a&|hcE5`TBGKKJ zlVqJFCAMM?Q*3RunI}9z&@`TCR|YC*xjYI4a*4pes4CV04pYl=_~C)=`5fPWiU@)B zgTOvTI_lzU>`V9xFzpK7=Zuum50q8sr(fM1W@>ycosK)2VjWEtAT0DR74_@Tf{%4K zh`!p}njo=Bd^TtOf&Frceh>Y^FBu;jg=bRx0)9``uDcb6i9g^odDd}J-q`fcb@r^N zl^QuRwM`2PqJZ4Zt64cLfy)5=Irb%xS0K*f1OG+Z#EaThLFp@-&YWRs%@e=bv#uM( zGTIoY#dFZ0In$3ypN(1q?ME@~No|kXG3=_ixvPPk4+@pw&%F+UkGhi?$k3rB>EuX` zlTRHN#T`Wx_Onm0Av20;^#}VRe&uP>Rq+fdRI6Oc5BbYuWqftJifeH)D+fv*)Ymd} zvDVi`y!+3hF7MqwrgM_3;c3=!Yo&dq+0pJQ!o`sprr+oe>NTllC-;;Z7RS0ky0C5V z=q1UE{X`udXK`;?)qMo|JrC;$dR4;@K6I&(@@L`*ST9~MW}>y+O^`(p!$6WW68L9u zGSz_sJBe%ZueS2H=Nh#dC{iKSlbekpP0U^0D0i8eJ+T-^%6`3x`e4U2?^gQ3qb3x> zX^w!=uekjXVPeS$+bdw~+i}7ANAo`kdikPZ(rC2CEce}0pGEZ8<4X#R2Tk0GGD;84 zT3%*!HrOh)aI8yBB*I@lD~(Hj;8$KMDGGEH6ohTJT#NtX%V+{)NLp%7{$KZ>qyHs6}jz3;u;5>YPu5zmq7r-aY-j@`G<&IlIPwRk~ z4`Ehid&6GNB90$cE3kX=auFM&FT%rU-2@3CCD^-u7&9?1-tsk`ecqr4kFO++AFP0i zE~geXc4pb%B>E&c3g)UlehK}Up&?z}?8M~-8(AHI{+)d`*+1C0ROh$J8&z4%w2?TJ z;O=J;cTX%X!$-I{5dpHcodaG%*n9uHM zL{0k%{1J&inD4_4{r-wg?D8lGvmQdQ-wJ8kj@->Ka&zOZdxD@RSKWH7GhaPODJ-9w zLwOX!y=t`8&iAtoJ1tz61(l%jTD~2Q)_iRWa5!8GWKsb|!J6|NCoL}<9_e20Z%r>{ z`gqbgDb|R^b4hs6M@>R?92jk+2m0Ikw$%d9cg~B~H|N!s%lF>>!>2ht0(N)5dp|p- zW#$mi&Z%_!!>Kv!9Jc2^)TnjN_B7~L%j}Z`?QOg z$d45(m9K*!>)OOgP5PSmvNaJFaIP*HMuCAMaJ-*?cJm}XMZR{Zup3djFgQ9IIPUh? zRZ8fVRuv-*IGwwA?&3#!lvpt070~I%X=r3&lzs0utXt;f4`sj#QcbG+v`v6@_4&)B ztjS6&xp9pt06Xq3@b|W;8Vt+7LX8bt`ZIXKUOUbr5xYC6J%id~{3Ogvlrw^@OtCE~ zfR2r8S=G$2b7mVvvLSUqwvnX8HMNfBUn@Y;NnnOWGo z!dpw^OG`%;M}?W%ovVR+7WVG@yz0>HLG4p=Tq5@qngqM82!|YeZR*j5U8S|)_EgS9 z*T^@xq0h#;eeLr(9ag^wqmK_au6D`5!27Ux<<=($FV@qh@I8V!%{a7Hbu?kiMI+*F zQb=SdOc4Dx4W`wOxN)h+M8W((HsFft_7h5jqiR#--m_}ZIa1dM8qpwzu5EINTqqr} zXo!lb0;HsIT7{U z`^oQGT9>tKdjwNfc-e7jFT%|todI@U(eU5Fq=}Y91_4;t?h{&>Wab(WQ)~zZx-3qz zRUUYlVeONZG~5Vad_-1%jgJUBPVoY#Z1u!AQj%(|5-?Tu#Kl;wCrXiKxDZv~PbmJ$ z2`#%zbdE!7A_dvui+5fl^D{B+TLzOV`oo+*W$?-(f85a5r+i@Of(u>sb76ZDq$>DU zXQ-*V0ZV|DLyhri&~WCFExdfS8k2}4sAAux`Q9e!c9X3V?H)pMnzrYF zlQXe6!@}5REVCX}qB7&Bl+MiqEv(Yrx)~U$VL2jgFW4{}^(5G_^;Uw$I0sg%VNN|U z&kCIb^!_ft;$`GwbC(TMuU=5@w4(ZvV46|;;^P;Y(=(% zcoQbh95^!fN-gJ3oW~}9RC!?!4nGnZ<`##k`a$j<0+ zhix1?K9j>KPA-{es7yV{&U69WU?e`?_h*4RAn*0wQ;oSo!g0&G%}>CI>&D)*VvX{T z5q_4o736uR0sbdBr$B}CWcerT-0KBj@s6oK$*V|iA*jFM@9&n?Hc8^b5B6Pfia3&C zfKUmdL6Zu-2UNg`N+)d#$do@vN2%|k{eEVTGBu?Wt1JXuN>PB~mR!u=JRHM(i12d? z6=0%>3lsqVBEz9K_Sx9C=!a7@qzn7o|D!gSY!_Z$088Lkb*akXQPlY!U%Ydge_)Te zX0){eYDE!TcCt zaEX~a;&6xXq=Vj`cwv(#llrKnUEZ_45)_SxG4{1mx`_Oh{w4CXHNYNlBi91Cs@|S- ziub6wtdn2j***A1eyh4LO$?Z=#Nri0y@^bSs6Tc1Kit+Q+yeQO9I4^1??+-ksnr~u zZ-DW^$kT?Fw8%-PGbP{|(rU&F*fRFVFqU0~xl3iIAX9c~0dx}&aItTNJ zz>~0-#L0A#{)9rN2Lt2pE}z~1KH*W`DG!KZyoOF^wha{(v1Cb3t3fLZt!30Qgq<`j zyE2nZ3!P>`N|E3GDDux3G71a7A}R}X0OvH+undq`t2{!Ut|R62JF#`^*wV5Vlz3vo2D&XUMOCoA}>i$2Z|KZo(Z zV;s8PN3x=BFn!+aMjPR=<|=LL&)^Iz;E5riLt_dPV-zfhx1={x2qx9*g=*S>onQA} zh#mo%P9knjFcNCiue3C&RR#641`w|?t9B&Hf(wiU4OR4stcxzVVSxdmiyv_CqZvfx zK*Z-XwwEe*hPF{F>-@?Sh<^tyBz^kq6-{0iHZwbM0v1SLJvjEI5~N7dlLXcv+kZ@G zw6%^+Myn=UQ<=)Hxrxo6L0x$9{H99Ah>0jVPBJA8J{#POGSCyZ8ztEtBvu*s&-%JT zWHL9?Z1TbqscC9oO<37ak*qbQQKhH^w5`>NO+rmq?+ry5dRzue zyKkU|6sBG5%0-{-6#4mi&)iXX09IL{EPXmQQ{<@U_W;*bV$%~hlN%ZGZVqY7rvHQ;fV#s@iVt(=l0*MiW8X~#Wh zrzZluN@xJ{uFx`t(Y=#=KKst~`W4T)Abg5E*p^@uMQ#`BYpG#(ps(7a%Q+U2fk-Nf zDTXmxQ&{+yo!EI}pwJkMO8v|{#GDP2MQCUl%6{p;5>-nIoe(=@VHlwo@WO~QEnfV& zrwILs+53l~Sr`T99m1vVmTZeis&}Ygy5vKBW6lgzL&NGtx8?+L+}U8xPq%H(EkZ1Q zNtJI0{gQ5m2h%KGC_W#c&k5P)8vL^wPEXOGT3Q?!Cu~Y|A`m8Y#jaOP)M-=2A7%~V ztD7>(CfxiRD$DR?Gtv=2V)E=8 z)g{Y1uL!?%5b;}f7@Ms-)$lFe{0^x) z8SWHn7u#>HooYCfr*zvMr?0BZPi;OfG6V)82JhOGw2m7_e8#42>PGPb}RWh8yvA4lWk_M$dKl%)B`gm($k(JArFy>MJ**Q(SM zXz|(W5sC^O=;5GF>E_KYukTdHB)-E~O3BEGxGLUIo4Nk*wECdvMd^b>159>+4JC6Y zcmPiJ=SIqB#Kr+j*qji1LrJ77e*K2M{koCjzBCs6<3<|Lmp!ReoTteh@c3{UYLnv{ zwb9Vr{(>cY$|PTxOMI#81y@jf#j~E@sJzCvpHRz~Dgw(VZsv1gMOl+EL_ri*5B~ef zxi=%Rh|VgTk^vv!2uPs)1rVPdqU6MWSa#X7&lSLB8r{*3BYrk@hYssL26YP!)OyZ!RKe^df@cIMkNT6Vj{*bd&~ins$<3*^u^ot$EY*^|Y~-qJ_y@FpU! zfXb`>_@b|XRAsgs6exl44v8MjP+&a#mf;)7Wl|;(j-8a$rgqx-5 zPhtWu44WY~>_%f*+%5Xe@Cvim9ugQ)(&eKJcV-?B^B0$ndu|2?66D+>+?qyG-6NYS zd!2{Px2JrUGzY_TALc32$9TnFQVz1v@9_RBoV48h#UvRZFd-R3wO;mx`6NW|bVI$t zqTvpn%A|Ch!Qo@fEMu%`{;0Ae4-HW!EvHWLEiW0{cziF(Mo@j<1Z-03?aaE@X ze9*QE0`&TQwg#$VzPdCl@e>DtO{tQpEMa3fqOpHar@uO!l2=;6l-|>Swo3X`AAGy+ zMRTZz-AW}d>==8Cq9%6w!PvM8%p&nbcR;8$(dX3YAtN{4n9M_d3<)t$qJvq~AMSo@ zBqmrY?ADQXdB9(Ps>)4~Z(qDV6(biLbbHCxU2czplq$0;(r;BQ3g+^G+zN*LLrOYb z@Goi;4S?Fj8M~!Wd?>(S<0Uga_eAE2u)dO<$&l3Rp>n6w{c1*IF`E|>5b{t$Td{`l z%nRIc&87zu3Cv>O#ov^i6N{!cg$+Y)Huj+r>C8zcbYqC0em@KY9Bu>ws%xko5y>Y# zc?mN{e+lzL^RZM$zLh$029hFr=3iHh6mqU}pE{5)X6us%rMMk{iz z$Ym2Wsxn^)DnW56%;W|y*DTtpWYAKsh4O;#p0X&y&r%%tx&sg|dJX>EGW$#9?k_>M zzx3{yS>J^9{#Ci|gSEAdBS6(n$w}Ywmja%&nY9Jrv!IQ=AwcC#>rDVol!y`VUkIQc zNAy;}+b%^T1AveqJ1Y?j2L}-oBNGt|=P#|e4@AtYf5iO$uC&L@`X<`<-&iv%8zT`b zCnw;|PQ=Q^^46rcs{bej{%h55>V^N!RWq|Q{i>Roo&B$>-z56}Xbk@IeE+-H-~aCU zeyjQIeE+THKWc~n+UYle#sB6`zYX=<`TpBb|B)B`m#W$R`zP7kNWXRZpCb(z{(nE+ zZ2!%Z3^2W!02RH}%*4j_XQ0{s(;WK`N|OIu1N}C=->QB)-G8h4Kg=^S_FF{^}&dzleMOlHGh8>A#74igE%3IXVA`dA@!3Uj;cu8Hw2b z*6P1cl>abK{?SN4CI64=n{Q3~*O~oafA;^PzWMJnR1o*BeG4ne~>3poRT?5 zTM(%mz~z}c3wii*t*?UrY{&OJ@qBSPSLN|6ck9j9=9wl}{CIbIZwO(Md&2kP!Z*6Y z8J;t~qT92!D{I>HWKdwjV`|V6<&z=T@pSOo`gnKjd9ddFB0v0k*x^Xnks+s#$8V?l ziRXJx8sF`4P}Y@cP}XOj-HJOnO*|mfN*_m8=N7mEg+bcol=$UtflR2NHS$ z72J&kaUzl`;m2s!FL6e>QE~eOM}769(o6&^UVA*VBdtZQeK=x1|1{j|x^w9$=-NYp zpN8&-6f`x&GmhRWl~fIu>-C5Gf)r5aOpOJ}heFV_5ptf4)ZEQYnR1?`o_T4A$!tSL}bIrFyl1~LXZMC(BrGnyFMM?4OEwWF-SOpQC8TMmpbX31-4m;jC%!M zLbDbj(4@mjiz!R21jv$OJX>RzEd_c?#r-8?`3m0=#Igg?41rw5`62jPZA3GIMdQxm zfc%Iua$pokHC#Y~v$dzi4FLWT=|w$j3T5VgguL+CSIL0Oh-o)9{3|!ea0i0`5FqgA zcWe58YI1_L%U+=w9ttBa8$)n%B`}f{vIVemC4`3)r2zj3Bcnt#9|hV4i1HCw8b|N+ z!6ZN$v2?ms4XZ%})ilqD&BLKl!%2=SL2v`T(LvnOwO8Q;Su?*2oNubag>*w9p`1H; z7>TzAA^6gvL2V&{6X8uK3^j63QnHoPf1NrI?^$kSX6Ph~-60#)N)DGI9hHf0VCJHW zx!QuhP$l0&k=RAuUM&1#6V5suWs#%rZj_6?ZwCi;*DSs}wPh~UNrrM%tBfnCNxXp| zW#tcdNII@x#18h6qKjOr?p>}E%2Amz7D)M5d5gS@av(_Xh>NYo7JpVs(>Q{;ykJhs zJbSyQnPqUWuj@sxE5Yu|F0Y54$L@Di~Gr2eHZ%%3aqvrN&_yw8dnRO+om<{55^R z$vE1)f2ctvC~!yn48p?j2!-Lf<$WE9omSXU&I4ToNQ{)Q_?F=3Oo7O4h14%Wz!%zQ z#?18@6?uZa*~(cM3t}NW`fM5MbRWK77s~YNyU@6T$}f!#yr^cv1*VV1*tvsoe?cIA1~u{Ue7*p)MQdD}8vT)b3Pj4AZ#Z!; zqeBF*do8=S2!rdoVXCLs8XIK8M&mXPw<@qhbf z!mppFmX89h_uYcm`g`ThWlRUC)#3mttm}TFXuP^n1D!{|!xSaqO!IzygvTOi^A)x2 zlI+>PO^&V}1kQA<*#?@O@MEU?8`-<)z00K|EX@Hz_{hJPKI`B)&!!^qi6w9CM{y$(iT z8c+OD>;QUNn;;n*Ca>1x=*yszENY7 zkXpXCZLqY5SV_@!ouYev!7Ps0YMrz8QTWJ&c|_{|$DYo?l$H0<@)pp;{+sh8IR}li zDArXZ`hW`&wz&(|e#EZN$uH@XraJUDGzeItB@|nub-h$t;6w<0|GCNdgy>laSbZt= z&OSdeWAMrutil5U>1BlI@5%(o=XySsnjk8KuJZ|7p|D^~=Qm;PnO|Y_fDN@k=#k%B zD)|RmfH7qO7cGKO(V<`nJ4<(}_y=2sLN`jE4dgJ9=Q?%!53+-Pq;ys9*H|gm_(=7o z$*zu;4jn^a9sWAg05Xm`(XMR0N<+k|G%-ZKiwTgo>(eSaECN25d6jhw6R|n?KrwoK zc5)#)UNJh%yw*%>2|8XYM~=8UtVy-9tyN1_qq1!)*uKRKGu_)4CAE;*I<{`xn{BPs zv#^oLWL6x7E$&@iv>`isEuzGs5Q$@7&1L*4aqw!a7p3*pSUHtBRFc6ISU4HkcX~33 z-Y3~6KWFe@l-qh%SK8ucLT5OL^eZeHpp&24mzzq94%*326~2QfcR2jYXOX_qoi-Rt z8M#eAh;Az{#ZbFNgXdTAxt+gV4Q;t(ZH@q`wZgp9Lu?CpX*E_*WIvvxz-IOxM>cue z=JSjKy#8b(Vy!-E{3^P2HAdA;TG9FH_icd zrbQ_)dL^eurCZKA?wEvKHIYAung@nB`Mixa_A8hT0;4>Z+UhbUpBYSB)6xkGI(^j; z)!ilxs|^z+8yC3l#|=tLomkS%3CxCjNlSYexOmmrurcguv=Tnl`OVB?b+*x>J}TB1 zbuTnPnG6V8ct`>zH}RZa{y3&H?I;B?^5A8QYWZ%tf>S;-?Xiab$24{*&|pi&3w;`- z%kN4CWUKiag;k&1nZHD6NTi6n3*TsUOOP(wZ|ylQGdOi(%R~YRS4)Nwr(DF1PHu;( z)>$`pj+FYmY+X|<%l|ZGCq;~Cz2D#&ch`t@+LJGA+ykX&RK;nm#>x}HY;Ezmo77s- z13E5`2hV2}wbtX&19m3I!j)?=D$X|m#v!D6_dYK?Els2w5-uq%etxByj;OZ-pXJAT z=t!TI?y%Oj0iMY>fY8W>{_S~c3|~zcmF-FM)DVmfus@U-&}lm4)woz#@eDrrq}n!a z5ADwy(&%ms011bW%a~Dg4j*Px&DMBGt2P09v5z-T{fQNLeHZ$GPcG{w*}WnPw(us` zl3FOJmZDCKi{+r@+(pNRmIJ6Ym2QVjIZ95MfIqn(`*a}+p^lf1H>wNgN#8Lu%4QvZ zt%kd`sJrQMZDpKec40fhWy=cNjcUm?NOBdI-Coh>(eddSN-VmG!Z3+z5so)&uv1a$ z1Uh2dgo>%MHu3aQ2u%-hP0PTEZb*krY`m$!Fb!MFcl(4;%BHD6Ie`lWoA+IKSFGR( z6|muF;{IoiUHAIZYI{ZFteT+(g{86%rqtD@1RJHC29efe60}LB3nJQYKhqV}j0gQm zJr>Ub?Hp54^*4?|4L~hBv>_s~OjbivsyD@jZsUkpO&aK5c0@@&6>>NTYr9Jh2a(k- zD_so3K_~V?MJK^ZHFCYfxbNQL=uii>m`+;cpcdRU?%$U|SWqpE(hxN#U+UK$cCrV&<&=_6Z1e>Z2D=DPA4>dzD|t#u}IjzyvT zku_uRmTGYCg@_!FWhL_gII`Mam}qhwDKRd$`@#UHClDM9!PvAg&ul>!lT#ki^j-ST^)-+_FsbL)tOhF zEuA!G^Qs5m6txtn4B-4IZf{ExuvZxV!Z~}Fdj5GXVNmiLxdiI>q>M%eO^?D2%A=() zc+Z@QDkaZ>WSOJ-4J&k^kC*8-u4cEw=O7ohVN9Xyf*H>^yif%+NJIU6xH=4sakx_m z^yV;?xsZx0;IkVDo=OCdY}{Y-tMrblz*{FcKfXIF8W{o9{&+OECv<^{=j5<9ZvyK| z)gzxFHA28DeDnR=)?z?J+sz>w*4QhdXA9{|S=^^FHLS5>j@vk67NHmRhX!^b+4xe; zIw2*9CX{dujTZH5ynI-UsfQju)LB$QNCQul5(>V+zB@Q&pU!~{>yG{j!n4twINrM= z!v0$;_ZKy*>I|oS#Ji-C$c{FO*QJ5`D{sDMLfYb)fd7cn{em|BT5Kx+!sO)jOpE|) zO?f?gBWuTB7#sj;Vi2>pak70|&I>6KF$fzun;94>iU|@i06zV5;cnpeYss!?7If7bZS0BnQ(cN_o0QeWp^ z*MX2EMI}UmfPsO4fB}C%uS-BeKoDTy5a3`C5a1AykPuKXNH8$a&@gBSh;T@lXjoX7 zXc!nc_+*4QxFmQO7(}#0B;*uS)Ku7nbc}SAjAWElly8LqLqbBrK*6BGz@Sp%VBk>x z|9-u80wF^I6M{y80uuv)AOnK}LZy3w2m$Q`2mbW}`tt$?0R^-d5(*jy7H~iv5)cS5 zC@2URC^$G67~p6x!1q94$lxgNm_9(DD(FEH+o3W0#biN|2v&8WD^8q|vgq6UL&IQT zVqxQukyB7oQM0nKb8vET3ki#eiit}|Dk-a|s;O&e8W-W{W`g{md^aJYy534pxbV2*Fo3=8kMKUb-GpsS8=ITcYWB1t>smt$ zvG`o&T#Gkh?)rk8SGPaqq<}MeO~O3jWWc$iZ@C?;{sQ3uY zlwWBJ@{B;UOSU4psp%Z_H1a=tXR5XMj#PCOOVSF}LAE(6VFy7Uk*fBWDM(dX4hU0DLo$&>Giuc?&7A)8(EK?F@D zIS5Tb0Q~=kw}Us|+z-F3+Juwr8;75rP>_%}|h z1p4y^Exhw6Z;z-DjFtI0zuYM07c?M<7V8eAMY>y1=8>yNIzbx4-D(X=LpAux9myl~ zKC-Q2!{~AKPLedy&O!qR{`*oG@Ml5+P~a%@hjzUFmR8#O6`#Zd&tTMb1Ea9W2Z{&& z@x#6B(1)ol!T*z&(*I}KG!f@wy<^a>7Nb(n`q1=Wze6le-%r}e77A{Ym_(&ja9wdW z3Mx5=HZiAts-Q5a&Te-)XE?^Ba*pc3p{9lelPhG>A8CmBnT0ER6706_xEsYV^Frx5 zr*hFgv&pmfRC@eK18cd9Jr;-QB6~l;d0^3=uBPceA{6WTpfF+X^{x1z**nI%0jKUc zFC1HlQSZZ?%H8ey2u)Dr{DEdD8k|vm{bJ_!Q^9vbt}R}s!QC>Y zSD??qXBp3+*K3dGn6E(i74d~-32Gl)9>1^hRm5EJKd~l0OJ>|FyaF97`}9coOc%WZ z#S^~F=)PCb^fA%vNIdu15u3B{;aHE#dIj3Z?Kn_=1saZe1v1Zh!I65&lY1(B1-dD| z-wfrisazYm>$pTLpMA0EA{2TB`de{gf2&93vJdUAq6xLjp4R;Nf&tBpeFZ84G?$wH zxj5?1jNu`k|03rVXt88Bl=9_Aj}ODok~2uo z8Jg5U)4a{hI7gY2?)#r}-+k{fzuE54?5e%1R;^m=TdTeeUhRNxa>A$N4?y`ktrTke zv3@vc%>n4Or%U0w7vV1W=LcLa=G5SXQ;nC)lP{rMs=y->Z8dSj|mGw)39p`ZDjGN;E{xDC!UFmY0o+b6Vd#JpC z?9ellFO;2``0=E%I!$X*I~-dj`(&TSRG^j`Wzm~E6sd`UnDwP!6jPbV=!XE-?s1+( zxpREC(bq@92;SFYYuqC}bSm`S-p*(halJ`Wn9yz*)6HfEYe5^!3;^jhO0k7B#L0Qu zrfQ<1rxBWfrri)+zl*$zNn5kUk@J%4&%yiRZPzokXPWn*k-;Td-yhp9n~SX&r9iKG zbwkj1omTcv)g6G6%(A|pV%N%O5^{2UFs~FVZBeG;|FaN7ewGkq96Qo>PvR^V6$CU< z{Y6P)01x6T9~BvC1mfeV-Q!4@SfwBHSO( zNX~o|mE1svrGALy|Efq_Sv#{Kd2rZpw0npc=dhagxXfFITHz~ zDuY!TvXygqwKoVWGv=?|mTy&Zi_{dYwSDWGjwLruV|J|=(*~pWmvl2?oMF=n4t3M* zA@5S%vh+$~xy34Ki7ah!=Po8%*?WtBDxoOfmh(CR>6D7r>&>ryf^kpRmW@c(TK%ym zHsD*RP{m5yupZSgH;lm)8OzD9HZ%sSXOO}Lq?rt+dCRWq)twn1j8c?kDRlV1_>QlS zi*6LYt2Dn8w#E8zPiXOWrDH9nf%tRLp)PVo`qTzwyfYa>TBOsKC9lir4rj-_q^;kR zdlSy}_-41?(BOk>%j2^|#(AsCsOp5x_ipgAsfRK%lx?_=P>IpdoalvAdg`B2Y<4lW zQumq4q|2HSz8tH_)fxF_46@pWyLte6@8Wv^@-jOBP2|C=ZentA&jzUWccKqKp}i+2 zTJaYc3A>qddJ=tH0}x8!0JJu+md?H# zNj537nU4DQgco}a5(JrLNPv&Lfn%1yN2|)8&{R7t+Gjxv{(1{~v@FP20`}ek==u^d z4%>79s4zUF&EjzOT{GXu%j4Z!=RKT# zX%i7?cX7ACdKuWd9AJk0rFGi@7zjDo{y00jKHh>QW7xz{@hA#-4vcm{%EHEe>ZmrVgOv@egJy;r?}@& zTuaLQqsjGm5N(a@iRE{9$$z(#XG#qxqzEcq9GgGQlgnPSch9iM;fTAda=Ly!Jd8gs zhW_P=%Slvh78%(}N}P+cR^OzVVCJg_AYUG~&-wR+to5ikSjY?N$M5T0nq&$djiV4I zdg;>Zhn2J}ex#FFqt zB)Nrn%DecyfwIEL!sQ*+5*No7*rEx&^-7!sdeGAt`faif+E>DO0Z@XSjO1#v6rdlQ z&JdU+#cyJ)*UxBJcS^dm{7vM%b%4-mEXBg4gvM zbxAJrm^Q9=J`U=o_t`{p35U#axR`qxa%o!CZ|nm73fsC-Dlr~{=))S?&1ZjdWzS8O z2~DzW{bFW<=`HGIUK5n@G{13vpti$k;QU&8aJ0sD1j*(oL>fCtxhjaCtlZAYQQTtei@Pq9nYKAS}n~Tn-lS1BK2=kLYce=w8mx_ZvRdPr}YD+aP+E z@3d;ZC%{lS_^!IiEOAp>^~GBIU0vPfO|R#9YOL5`Bz1?cYvP4s-Xk|)FDh*IC1hN*&14432eY|=P~JOnK3 zFSCXt< zKr7hjhJ8P=5f_qv&q~j*ASv0P&e6>7-FT!pAMU=-OPNV>nMs|QO{ZbJwSsIQCtJDs zqHcYp%N<)jZi=KB8<5XS6&d_<^|K1n54pHQR6U{)tMEzJv9%8W5-GK9DauBy_*(g! ziC7Y-WnE(tg4o$&Df(Hf$$SdI*%5{SCTFctmGjSIOh2_R)G8^zm7pHxS?zf<-c0Jr zbyzCY>MbyDK9Xx$Bi91L{SVSIJC z-_QmTz@Aau68$7`K3d!*!Q@Gh^<;9YaPs?REg}xcv`% z;UD!*g!6}F1`E6m0iY8DrQfqBmU2zR*R(Do^V}RO3&Csr(-KX6t=K2Kwf;B{kHXar zu*lGW@0s3s7Lxhy5cYKi)SBaj6w=?cybUXw>6rPRaNAAWyFc_M=@&~XykKj5w4!?c zI!|u8(SlxbOH%sx2FE9Mdy|p7;n=5mpc7w#|I;;fI*mVnuBvSx`7)+ct(03@K*XL{ z{O`TXQ4g)9S9Wy*rv&zcEOJ-@7PNL^%GZ4&|7t`rfIDD1=e!RaqLgYYw{tpNZgu%X zvSiSc7uGT6(?gg2)Cp3S-$B$?5FUWlbN~W;(J@wx>!*A2;5W|nP|HGMvbQ)>IG-ki zE8i&rv7J^U|CBRo8ksbZ`CaPqORY+3(k#H3Um%MG9{=f|+m>p7MlGA%+Ra(2uyZCE z;Gv6;uj&wy4u1j-OBZxFo_Ou2HGUmpoD`Y7y-7&g`0S5l|57)oD;6 zJ#Qa1yUX5ihlBgInk*$Nqs|&x1r;~UnVWQ2|CQb1HeUuwt(|UB!>MP?baE=X_e~^V zJ>_v(CN*&+omiP-Tg)a(LVkeUoXN$ko*;DJjehh&xw&AymiGKuo~I66Wh5Fv8Fk2u z71e4U6-#IIqGsmZWGTBJ4WI1Io8l>Ga-{}E42_b5h!&?VhK>n z`COqc?kz#PBi`qc$BNW>k{GPjEU1j?W<_u8DP~a%WKg%g{4!Ux zfrn)4$PG3VX`*zo;;1Elt5Tn$?X)kxr}5@}#}aF45n;>a;8d0q^VRH&Voau?R)y`- zG|-l{hKyE*4^n!fEj!{HxY_!K78TL)GG)cis~bW5Rw>s%Uq560K1@-nK{9-EgK~LP zfVO)?2<`#_94OxS?=YN6^)+_+Xwsc24Db4m=d`Q$1{p@)Nh{A1)*t&V=ks1k03Puo zh{0oX;{8x!;GW*KBsroO$}s7R`Ifz@^LK^-bS)+G5#JoG5H8sv=h{UVw1GnQQ{8lq z2d5QizHVl!m*fc848$4k$-0e6N{vOeWeN;LA&C>rOfM4(;6-VKuX{I^x;Vbn#6x>J zjhw@3@CL(-;TiR&K?d5P+qE#OnCVE&kUdXp<=d6e2DFpso6cHX}t?|`8Tlu_g z?1_O3VwL}B@c(iBY&;<*`cQG5&PY-P6c;+D5KvsH6M*7+>P?96`DC?oTm>=FcSWBy zs#C2{%kt9b%Vb>o!Yggc> z(cqiERLHt&L@Mg*`N7#ZTOe_%Z4VtdQ;Ij9p-O`>>eS7Fay2(9pRijZ3AAfez!J8c zQBT1W&GIXMsAgv)FvPfM`XLK(1+%`|kAjPCC=r@1531>Qcq#{e?SCDI3nmRo~ z)8G=1S;Cez0Q50=QvYF!o>(KRL69Jym%69TMa^CAx4odZEQi-akha6L6x-CxeZPwq49#)ueBNB zXC{~}w3%XpVWrl0VZp7$EoFJG`n!yw1m_y}V+x)y?gJ*cx5wDua}=OJPA?{iHy~db zNisMfPa6Bt=%pF#jpTH{GJK9B?qajo<*p#(e<7OnG34G~e%MDspY;$j1h!se4Uc zUYd0uqMVIiO~!fxemWQ%QwZP^5%9|Bwe5Wn9PKayz!Eyh&9{)2@(uU$N+cRpv|h~B z4jEI%?BSk5cEoG}x1Jqv!+0lFc0mWA$tlzUh(2lI8a&o>R>~JT1-GAZ(n{I0_U3HH&uu3XeJfVI2^k+Hua? z@3$!7k^6PA?M5$-mU!gN!S|A|3o9~Q#?GbYr5K!VRYjA+`4_b zpQ#SQVG?6L#a$s<*Dtg)1vT_)83qua=l);kQoak@Zg>{7)(!g;G}?d|PTV$)4`*A^ z33@xWvDLm47YEgcn&RZsdPIVqh~X4&P_=fOmcHe2b};^q4XN5HVM`B@eVn~d&Es~X ztES^!QL~%0>e}XCy)L&eV;nTJt-yeW1R{RG- zrcqYoWMp%_uC+_}BCiH-b>!6h5KW#`Aqpu4ovsLvLNXpzE69w57ruIrtm7ft&(oS~ z>m+2IpsPLrUghiQdH_0w2Ed|gM+bj-2Sa-_OUb{Z(B$*{o#?|B9rJW#kLo&kEYl%S zmH;(809C+H*gK3J3~dg|*)8p|lnIyqGH`75-6X2Fwbu;v-5l?|J#$x){#9RN< zJ`W*tOjrDohZX`#Yd82eYv%p0>e2}3EdL`a`q?P_qB%}BXS>Wn(`9>Oh>8%dN+fC0r#z33`E*yar8_Pc+(&)=vQz&+;UPoB(+`dd zloR8En(^F}aKX-`=)z2Sw4{C&G%6VG9FC45ST~)^0q9fhxI#TkOiavX<^We?+KUXGiEt^xyD6$; zGO`rfrxX4nMMtn3C^gny_nNrgXvTA(1q8$fzFJE?p+BEkVka7JtYH{8!^7iW;P)F~?)Z$|44z`6zqp$}JNfo34std3sOh~4C&{05IjQ3< zB7Ne|aZB1J)ZwESdowSqxe|}k*gu=$0i9Bu2kj`<-TAP~0HYcMpP%=-(96{AWQolP zz-enwvEJ;achz{dbCQth+!o4P@{ZZ~%Gv(;-6yrT((&85mid&Q6$_8jdwYzU-VY^2 z#?+1OKmRhZiu$^>>K1Rsc+Vze0B~q0^8Q_Wj*APrx{Mg7gR>cQa`V1qPNYd9Y4@YH z4(UGgbxJ{!OsPBZtqsrYohzSOPpq{r?pgG>QhAY;#PUSLf=rw$!c=4k5fug`&q`d} z8tC7yGCaA}g@vS+h31<`MRrUsM%ovhl$(;GaUi8OrMI(MX`C)~AB_dq?i#r0b*bZB zSn(S_e^D1fGoZkXPeLw3;L~+dN>bQdR9deXSv`t;792S@+v+=;l`+oiEd;@{@~cy0 zw9b2DrJrZOGAn_QqoFbCUnXRWM0#Ba9#5unYQ3Un56k%uynW)0A1*)%R?!J^(;|y%H2wv&228rK zknsk)u<&@mAbTimt}XlV@&jM$n3yOjankwn8y^_NM5X;ZZalJAHw5ZS{l%2Vq5)fU zNj3VYF)F=?aXtXC>;c#!@gcUTYISS27sGuE2AcJ<&yz|FZ= zf9}i)FFrRP+&QGbN6n(cj;p%tmX$-UyXv$e+V5tsgEtf}{^iEJGz$`lA6uO@c^I2u zkzIOrx^X+~qvPerbmS9~93yOM4Mt?A%k7X!jdSSs>1DUqJL_6gi+~O0A^$V@c*0e# zW5qdBeNd$%^TU_2BF|U1Vs#HdOrQpqRS?T6*CO~i>g-}EL2|SsLrbCEQ$xdNUm0LU z>-E>4Y(5b10F~M<4vkWFI%SW?YEutvZ9>|#Chl*oIS{Yc8kpddl?2m^Q7#Lu?}YNV zs6;RZ!3Fy&j3adNq85SoMI)~N{MP^Kcn>`1%XI>Vp&z=FMYXCPK_DZu3%*GLl560jpyQo>OU(|zUcmy z7 zy^!2c$**OE%qO1GFmccf=IuLLOX?iXr-yd$v!CqV7OSZ>w|mAjHnB7-#tZ4~D0Ll37nIjNA!K}G!YQq7)oMnZeaZje2b%C&`_yUXPr zsGdcG+`;g5b0Wn)yYDYgzB%jR?!wXeHibKW+HS&b-hM_uY03jYrUTag9JavlC3~_T z;rvEJw%hcXKPj(@&-`9Ys)|PBSbP405UYDDt{=9KlWrL z(hTqh>D9V@?TH%zOn2!#nBzn3++&Z56#OaL-w zeh?tKp{0g#Y<9@s#JHi=gJG}MBa@reRlfm)ps)VNNZ|U2u^qF7nM@F$z0A+_Z1CHc zSAu&*I?-YkpouB`U>h@nOh=&&$YOlrTGm2X#eNg}6~JAiQS&4^As*$JRnHXz-3Zw9ZNStZ*iK%rG84nP4( zI4a0f_^i|cD9ja%m4#UWsU_E*psKJwdvZv#eOT+iehtLpTd9#ToXmcbP7bczydS#y z1q(P#GAr2dBEW&?Y@!PBbLAFbEe5nK4(B5x*S%7SVwoV?E<4Bx1mal6g(_yb#{I=uB zoNG>lvwgORR7On6GC|DKxk`#*Y;y z99UaM-Rtu_ghMNm!|~Ss*~C)YQG#kDMj>zP{la$n!xG#0OH0&b^GDqp!9 zcA_zjK@+Fd)e8tozA83?K>}9+NaAe2RR+Ngp?S2jN&E$^4*zSaKn(g{3DM>O=yzFV zbp8LF93_46=E`ulUVad2!FnT1{<5ErI-d-IH{p`H+I27<1}PU^RnFSA5rp6?i><0; znBady0gl{?dlpS1CV8&mQ~DNk03o|a7J7A4A#>|y>Ocs3rS;7{` z-JV{IDf!7X+tN09QZe6e1hQua|4_*wJ6SL9x!wXmI;}j-*Z}D~-+W;-r2Z?VsARCW zc<)TNXT@r`T978ja;zlC`IXw$u1qXA6h8m@GbYkuTv4=OtKNnjW ze-40N65Qf(mC?{$p^Vt9pm7K`g7?A!s84<203?_1n7?%mcWM^)4R-}F!YmYiJb+Fg zG&eJ{3|Sc~V8J}d`aQRmzd_==LOq$3w5D2JN|x2cz+UcHFE)II1m4HfdjOKM9gDi=gAj zac&%d_yGI0OZ2EZIe7$Q%>TFIPe1FV>{7$AOu?GB^t;-*1n+FwIGd`fCz28ttJv0= zCeM>LQ%tZ?ITyVJ0F)~5xl%R}Z>)}ElJd3aGqg!Hc5SbpH#U-Lny%70OkQY=Pj(dA zW~+wcTgHjCHHRijW(1&n3LkxOqu*vsw-YE^>w79+%gELKaCPN{5clPYZ@lIbf00h) z$BG9%mxbZyN3gAAlzvWT&bb1BNw6&T^Q#k!TQAkVOC1=wr#NM(*O+??LtvG5N`;Kz zrFicEl&I9!b|Rj*=E-a3uEhPJrM%m!5j&!yl1ukRNXu#!HK6BpY*!Jrz0yQ$w>7S2 zXT`d;SHM_F8?$Zk>nT-vGD-*tRv1aG{26?=HkQj-v%8-o7gMsn?db&~Q;Y`Z^*l2- zBjU_5zbRi+^%h|UX^x@=2p6=urfCa;w+nx>J9eO3K>BK!PYNIjkbOFCPc|-#a=5G@y}}>Py1<)cMA@@i!1<-4Z`=qtT0Qc8LssJgjUD{?*W)* z(j<~s7)P|ZPcsq?r`+{Q-QWalN4KpTKS>!`>*2Mo9lOL|O1}7Bi2cFH=oUS$z+T00H3P{#*t@<|oZ2!;Px8y}(+n zerra($Sx~cQTt_1+!IPBpYP;WZ;%T638PWGL3&k96anEZWETWpGQc7Xkg4B42}pQL z=)CLgZHpFSN3p<$%$n4df3xWh|M@Kd!?ld?bF8voU8&-=z3TA3GqWv+?>>zQQB~-u z_aDg~zI)=sgF`Tm&P(2RI`ot!1xe0je+wRU?45F!^w^y){WKu*A^xEUjZ>x?lDT6x zF>q(S@337Z*SDS>HYpN5NVd-&S}uglL0N!zSoF5{KOcZP0v0CpcIi_vyuBOpA+HZW zlpgTcfFhfxKk<_$`|bGuUaHK|QVe)&z?}Fr_Y?{Yey?E>te#>CmF2AeI_gcvqGUA=0Du;`fNR3>)k2{Ex%ZHp}{ky8ePLbb+*WqC^_gt5fu{%L`30&v_|?! z(jmXQ>DSQOhKzG_(i;Vu&XESGJ zCT~%u(9QKXQQ&^fna~bwt1X`Xz|F|z7eK}9Ds4!>vV9c4!!GW+?+sX;?K!>OlxWlv zkQdHMpaS?D2Jl^By$uJ{1oll00(TBb?vwSrH2#};b7x$O@Qc z#_F&U5MX9d2WAGjOj*@uyOd-vz|O#&u$I#K=Y4+|XN;_S+D3zQqeGW#CTqHSaZZ+b z=ofT;VsjO*AP^HMZ*Q4bk6y6)0wZImmg)M^Xw+EWv%F8i>F*t5rmwUz)QyeiZ|ndx zUTf=;^pBDE0MpB`j{S$8(CLTg0+E3*ZUWpOF#316CY1J6N1Y>U{43+hZn}b_nQyJ1 zc6R?y|4FHuTXZd{rQf_`7@^xC6sd-Osh%e9#_o99jdANtQ@9A2W>jYe5&}eQQ zur?ZO9NdPb43&t@NW1Wd3U9YEUV!T2I^RMDaSWNeEQ}A|In!q{BVyzZKqZ_h4E;$g zcBCVBxhCg#9~Z+msG|IRL;ShTr-7nfW1jsO2GEP!w=9?zueH+Md29c) z#d!{(OVtMdK`iV8GE6$)P_Wlq2MBPA7t0Pnk0Be0;+P(kj59Ia9ivKn0u1h!Byt1u}3|_($ZCIGM(xVBs($ws770mRG zWEU&U9=rAnPNnldo4Wp%XjeNzj|Bt4j_6Px=_a!1t&ZQ3Db0_+9VhlG*!WFkpIkj%y0@Y3?jpS_L%*}RQjQ^G{G@}4 zrDKO}de;soFu|or0>SA&R~~_oNR&DELqq6TY^e@i(_CkRDT_OCw3@$B8R*{0XDufY z?{`j@4Q{D+l_JTl2B48Z`e1VFyAmLMu+WAdNFSV$1kwjZ1vz0GbW3Ty-tpX;CGpC@ z*j{HV{;S&9O)S^hPlr#wpBvdCMgZ!d$tY9@3lA5~J^)opJ_4TZgXHxePj^&vIOZR9 zK2y_HAvY4%n3s!zIriG_{U3M!zMt^AipiI}G}?RvO&7r2&3HLVO)@>J<(`g51|I6+ zYW4k%8JcDTrg=pZ;Nu5xr3Q-IN)y?S{HZd{j1Yo^e*pHD*x!vk}ZO#cnJiBY%B-h#BUuDZIr>I{4 zOpyjO!Q4^Kv}%OdM~x4Gl{h5iU7hLGckp@@E^-J?y0J0`q778pVX;v zk0dq`C+cSIL^jIWlh77j2D>kh9zJA)M0pYt^Fl+O=*@^W7gUh zJzLF?wtJHgw$C{zIo94a0f9?`NiGR33+-%w9R6-u9CB!gYIWyjTvL7OQv6bLbk!X% z(=%u_dR#UdaV;m5xu9pMjV|N58*|DVMt62qn{*YjyZSTh^mNb5J_$eBVXP&-@U1MS zP#z9gpb;K_nio(>T+hBF#{tL|z9(1ihm3<;dBss2fC^FjNrqp5C0kzba4~z-*XX8o zX*b{<=E?AXOxu9IwErbn*I?<_x$qGujI1pcrtlj+5+eQj$Bjq#T(2-+&PE)7NU#cT z-^hS+Tn$$~yQhoDw#ZB0zfC%W7c*WwkA@HE-wRT~*k6eo)>lnyrDy+m{Zo1{i#c)k zQ}%REkzmfEaq`DMEG@LwECZ8lp|X&Gh>PTnu=K}Qi> zxOfZVaVZm=mZ%F%4?zA)q- zupq5LrW3VD1;&L$m8bsIgh&F63h-phRro4`7HGCPGV&j9{Xc59&}p|!>#3qIQ2<(~ z+`tkHpoI-AaUi@hnCDtk9rpy7Vu$>yRf?r8ciERvt;mNG^@68Cc8zJZ3e=-$tB)8U zJS{y^Ew(!1Ke>Lb&y38`CDi4+_zYo@s6_=Zy6+Q?$=IGl!g(t8Aj7R*aq_Q1s@HML zbU-T_WzYQFmW(BP{6MmYEyizqIef>%I-@bmXL239ZLB*{ocElRtZDYFr?C-akKckT z#f{WZt6Oqk+vR@aH`PcQ_Vll-gtph#`u$Xm7b(|iLR2jccPyUtu{)?6dH7PO8L$Dq z{GXZFCw8U)i5-aN`Jr-t>^=LBx(_quzv9MF2AzrMw2eF*1#r(p-Jc2t>BM6nuWH5# ztvXhv)LdA&7|NE%Qz7EwwoPtF<5+wBYFZem+2hpjmheRJmEVF?<};C$^YM9*=kYRY zH7&`Owverd$wA?~5yN^aQ-vSV3Rjf`CxTCZrKX&6-t0=}{H%e{nBkP^3=f(G>bJQ5 zqkgR+I?b|nXJu=7r7vLvTSMD5oX#590A?ni3Vff6bWL?jp@(M%H9bWDjB#QrF3tI@ ze-QWOPV-mZ+>6|}P(|+TD*9T2dci0fme}_?g+Mk=cPWt1S$FMxs@r6U4;PRHcdi28 z71{de$2ud8gh#zD7WAkvWbu^;C5jd;YN7lM1n)N}Cwm){xGg2TULtS@Ieq!ee_4K%2RG|Q z?^P{qAkx|Y&ZAq=8DWMd40SxJJWszPu6|&#m_QsebCsb`ynsy0IQS%=dkTG4iAO(P zU5CEGF4wqubqMoU?Es#tp?Sw7p|XhEc)};D#Blgmg_kR&?C1!<95A`H*qIRQO`c?j zT>U|Y@;l)MZ^A|Y<9NiuKAX8M>5Muk>$a+MHNLBw4&s65>lVo z+Yf9w^?f~?I!(LN6c{KjF@S~fwlg$bDa_KWDvl0Md_H z-?k5RkjyIg*$;Qhw?dH5cjzmYUF6a=m+&5qvLtt5n+k}V2z@gXPA9E&-U}M%FLzP0 zI}wqX3b^MQvnP+5W>C$;j{6mjZU?R)(B>B*82J!jM%nNW_@RF&j~ZuLE_pB!01JA6 z@mKDaL`p2`s2S|&7p(M+70eLO)C&5j3AyD32IYmDk3;|h|BqMD_HMbb?Z7E<=3h1k zAk7%T*+*P6@&9sUrb?JPg^mQd(;pD)@^KdxwC zCm2QYem#DSF=jIhuNr(FW{e!%kJsqU8aNvoLN9Uu9;F|(XfV6|v-aGs-M0fYT9z#V?&5QCvR5vr}t3Lfkns4dX*%#jjd{$-s@>P^Xj%x-LFhV1Q zq8_+uZbfVnMMtfAs;uE(NWMDQT(;9Y=KS44-m5vLIb@D*YONg zm_$)X=39RP4}$#(zB;e~JN?$7%aSaJyX<{eNfn0SZ6S47;_Oj0}cxyMFv$Lm&R! zotsvX;i5!HaO#XL%gG@=`E2A1p)zr6@I6$gjh=8^%eb;Tt$N-~~ zpdKOqI*crx2|X}~CEg>KcLUSx2`8=cE?t-KzgmC6S4xJ-@u{a|3Dsiq;`9dmSw%?I zp2B*a6D$*$Q`;Gj;)%aGWl5P{emXNR7oZ9Gx$O+y*lUg2W4408^=W_LX-uwML{PTSk?ls+q&UZ7J3P;$z~x;hjrdW zzjg49qV6(#{S0#==46eWoFmkJu19;wRrM=; z^|>2#Ur2aCXVA2)x}@7q-_(R2mJn(m|GJRHgwY==^!h5j=Na(?EEPr_n?YYFhy zMWkPU@@hc9G2VJ3;MnF%8yxM3qd^lVq1L}(M&;tjI$n)AOYC7z&o=-l{F~?g$1z@I zxfqri*S#knfaL;E=?jder8&Xyy1GvRkeQV90}z$ky64K9g$?0S#JG9I9l;tASMe-_ z{r;Pb=4fZG*K9CGT~e*rOHCvjY?drx)M%JysQ0qBae3H%vv^fbVt zK%vvcNcf}Y|5wo#og)Kg?@GDw{(ID9*22gZU{!rs>rDe3E*b#BAN>Y@UIv$Q9|B@< zH{2?Io_hb@v9{A7SBSD&es&I`xwtse_=UjfnFl9>;|N%sQ#0Scoge3VV)5avy8(-R zZStGG7!YVO?1@engwTuR=Gb76p>1_0L(8XBMy~7c>nyJ*Havd0e45XLqeaA6*YSZp zUsWx7Bq5*Zd?punXvS#Wv)&3X3SXP0B!B&qySo5;q5kGDeq1W6&PGo`5yf z&8hSuW~xNmoBVEIu#1c=g(k)S5Qh1=FaO>#@}u-=7&ESE4-$aY`c3{=a&un7>rfxU z$adytQB_^o5ho1IDq@d!5y!lyg~Hx;3u|eVIRG)@!hmFgxVRv!lxp*~R8Og-m-KeB z;%;ttr7`zjV>}CBTe#JI{9$4Iy#Ftuu0K~{>{eCj0SU@0%;{O2cui>*c>lff3DKP- zn3;-}XDFWxy-qWjT>6Zg&-J3XnHzq0Oq7OidnpXr(@tF{qoy&5s@0I>U;)w*Is)gb zCOD083?=lNpW8CaX8^xxO9vr+4r5+Z?p)UoWaT)^H+g2Yof@vQ|Mp@V3VdkTPZZA% zd1eh&0X~m;;shk%+2{ttwz6Ld?6-fr$AVTJ;;sy{H(Da83^An3U6)KR5|7x-Z=Z6~ zjOM%ZCr+cTFsTl#W+P-m6H29vFC7{c9}j^JK)uacd%2V5@6s7vvEP!0C(N6ntfqE- zVe5PP8>=b%064ouyG#4a0JS$8S>fNo-JS<#*^^M-Zvfj2J2F+0{CA0HZ*#h%T21S% zJ6j+)JS0q7A1xunWMk5 zELA%<@$!7S0ADFNwD&0~9RsQg{EWO`Qan23wks9;0*fB(Hti+!%msSbB>!Hz3$`@s zY~Z%O#pV3Mz~KS*F>ls0^!BM*vUnhnD2TLsVnUGBoCxARXZ%?OyD2@c1k6N&-9-QK zNwlz3XpD^9Ew;--@6ONw6~_#x^$T5|aoU^DHG=IF=A~qBe@H~K8Go2u45pner5qiy zt@ZHHv(PTLjm~Qp{H!phEqdxTjt%eXbx{HUVXXk?F2|b}Ow>}r2QE0`UOZ~1XI>$N z`r8o23E%gYHZ~ee=^L;tuphAO`K+f`7yGh;I)sWP+?SptOm)J@i22%cr{s*4whi`C zR_;d@p(10hRn~%Eg&nC)_iWOnZ}lP>D>cLjGs5%T@X-$LY`%EKiGi#0nvsf*cZT9V zU83gE%>)GG_ta6YDfmDNPKh)Y2u>CO7RKZJP1&O;PZ>QDfKRU2n*i85KxUu@Rd9Ru z_cY`$*B)WuRmF7yS(342w@b?HWR(U-$m8=lFJ!DHRl$VDmUOCj6XymfBch|tlo!=0I75?P zzoc-YVR5)VFYBqX8a>7x?M*)~vM!%$_4t|g-Pg+Zb*6RK8(1c7MOo~9o6J#w+zM9h zdH{0EcTX=1kXyO{kc~7a;-Ow@;2FB46a&~gS3J`br3%GeJ z*+_{putH*vr-dx4YUv!OZw1jAvM@UbgYAirQXc~cqON4}dTR@$$;GO^0JANOfJ*g^ z%QkwlyG_=WF4u@eUQ)4J1QUsqJgp1=?r3m2cN9oln@w}Pl9BL8yG_5m!TgB}I%0Vc zmrJL>1|qj};O{A4Ni0ctrv*KKdom7s2g_3jXuDm!^f^5*q)owYzHjmdQALl$Yi+Hw z-U4_h1-;$3g<9rOXJIty`kzFk={nUYt9-1<3m=b$>PdYF^)P3UI^|R+;)4Mev>}UX z?>#P7z&v$EwhgSeVl)^J)BMPADhBYi#trd_y793WQUp_}B$)%@pNAJ*$a}?)&r_vY` z2l$bGt!WlDMgY)x5z|uPh=H}r<5s=y`8==8-{#D1T3~#XI`SEe#xghF5tqz$E9bei z<$a?1b8TNC0AW?2Xcr*n@I~Zj{pOPG-VVY76NrbjDGf8;)H0ch)#6*OIQP<#3JMe$ zEfQ)-xh4@uIR@{axLtt$xWl ziE{^E)Xwn9p{yMT(Y@Y$_?5;a%)TL$h^sZ@MTY)_s{}`zFYjTrQI{5g7O$Uz#jiD0 zmS5^BXJ63qaPdhW8fch&{FYdZMXvgsj~^ZZ{yB_J4~32j)%n$RN2Oie%Cb{>l9_!N zjUy{k5Jy)A0wDJ?t~VZ?6uu`8`33_J^&Ck?r+DLjHwko*~JDkL`vTUYs)#X%X# zFpjnIG@DL+HA)d_^;R-0{i=4zmMgAt&$C(r<>`4T+RJe}JfP*o*PSPL zy>C~R-Us#!1D0o!A7KPwc_wI4kbpp=APLO~9s2o}q|%|5*BZgs0s-&-*Br4EP+_l* zIQpJV1bv@@rMPgi=gGPH5Z3&R#)Q&-l{0tc?Bp58%fk~3t8|>$S|Yz$b!a6u_OGTK zU5W)hx|(X+ka8Ao)w-irw;v0hmIeYU|9o|7`9dOM3E+j{BwGYfb^d>=28zQ9?!wLG zcM!fuqy<5Cyf!Wd9G3#-!N7p;b%Mugsw0&P)p^f68J-~IgC zF-`O_P4qEM^f68JF-`O_P4quvP5*z2Zv2=g`sdFB9MeSK#R5FL#>&ur+GCpNW18q= zn&@Mi=zsb}^`o%hF-`O_P4qEM^f68JF-`O_P4qEM^f68JiC@Udj%lKgX`+v5qK|2! zk7=ThX`+v5qJR5n;W170F-`P;{38Vb`Rg%FG`kly@C~kHBrZhnD3$+zoZ<5KufZMW zQXkVqAJar1(?lQBME{eobtV3lnf#Fa{Lk%}Ci<8r`j{sAm?rv|Ci?w<=bONPCDCGk ze@qj7OcQ-f6Mak*eM}P#I)w&4_9(P%cuW(0OcVWoD%JddfhJmziI2(l!K1T8l9Eik zcO7g^G|Zfs^m*^zl4Ii4G;?!e;#IUZHaEM;WO$Z{SJur*Uc<@Q$&5)-l2`tg;vHL4 zvpdF)R!qW&#i;+dq+;t}ZTy%?_}Xt5H64s?9PNx9%xs*PgoO?-NlOD|$=L$ul9IrY zrY1j=sDQBO;ZMJv3LKt_{dp<~oQm-Md3x>el>g6Dp~KTdvg_aP6+S%u?P<;u9oECd z`v>jy?{z6!^8@z_^8dIWI0p*&oh=(E;P8&a?FWzcZ}0U-^YCiA+nF)_tqp)jy>W+$ z_m;7Pm6^?v+YaCSpWpUJ8}XVLGw~m}`LK=t@y);ud^~~z0!ME8x9Gm*fQ|tkTiwjj z*4e?t%<=He|7a`TJH}29mTpY?{5*VuBErBU@G%`83W)#*0z5*ZVgkR3z>OQWz#kp{ zD#|CoBqSnmC>OWQY|Nc3m;}TG1cZQ7Im^dRW)4iea*qK~xn*VoNXhR{`-7(3EoQ0A zs?}P|fpN?8DUNI<<-N6O6xE6;6ZPyIqv2!uSCcPJQlF%)%x013+oOctdYi{sz^-9^{}7 zj%kA9kgX^<4BH9!f%_lqArB_u8z&C7Mc@VNx!3)OYh4IEcfr}d{gH5X>x-=UyKWDI zdBgZ|YnWw`TCoG0>xezT2bun^gxz2#8zG!8{op)QPQvcx}I1=|^EO zRR?!MHn-t!{Y8~0&wUfP)NG<2XB*eC@F4aAx%@lvjM?KBV8pu&fJw9 z-zzk#&xtsFwomznaI!k*+;h+x))b1QxPcdTzVfP`*gXX$1ByywJVV;Ub@D_k+wAcoa$U;L}?!jXBvqMt8=DW@&^@RL!~_nvbOX*3Dzkt2q}P=+^%F^hccDs4*8g*(W% z-U17k>D@kmYdtkg6Ur#8%2*(!s%%w;aUSCJthK7>zrIk&G>(A4);{3oR}SXD(!vg2 ztZKLt2v+_*6>g390JlSSFi7mK)a)LXLdCEi-s|tX2`w2_wIiN>e6HluofW5NGs(pF zV6B)_XY5c(!i_LY{{tayR?9&4W+oDpfDGcmbpOSHQT@o^Cc#=KDpcKGkrRGdyBxQ$ z{%F$Xghbn@gq&a>{vO++{Kr03v??#TM$6tquY{B`%!OL72aDSSaVaJdhT3NL6#ey0 z`c>!aJjEZ~%N!)Ef#k35ed=Ce3|<*2p3gGaH@GPN4L&3LHQ8VY0dItpdzefX@)23{ z)Z@Ib$ADW08m02DC=P;4xi(UEC5^4I7$L8mPOo7B_1+}1-TYmt7Gaq7_8=HHK2ua1 z_?T%>XN5^`r@ps-PZ~1jdOY{TT4Q_!#z8?;t8W_S%X48Dp%CW$CQ;dMIX>W zqEH7ihIa!+Zde&-+#W!)W$ZlL|G)Tp%c!`PEnFK2uE8O=y9al7C%C&qa3{FCI|O%k zZQR}639iBAYxX|pjQiam_g5E-rdN&CRW;}P%y$li5PBBE*+3d#!Vw^?Qj_@WN|?pa zT5odb;T`s}plDv}gocLF5lr9wGTzA9%dRdk1^fdmEUOZ{&Zwb?tsS&Cn~qbLOnBS-@$FAQw{8DMq9Sn7z_X*$km+yHFp@HJQyDW{8FcETt{LVcB<96X+YCrDzQ7Rjs zA=XUiFZtikx{Gq4Pt_VEo(Me7-hD#wwDP&{w)o$@i3f2p?4L!e`dwzegEO}`Z#5=rRp3x(7AEb?eoe#U-`hr7kyidj?`8lm?%=av%7 z!Z2Y;B7kRVn&0|Hr=^ro@ZlS_-_#%%#0slyA7z z2DEDx!(*F&{Wy0j5FUmzIq>07kb-F!lVUl7Dv3=*GsKj%XoS9mQF0VHD_c#w${-pD zH;Au^D2lQnEQ(t0fkfBwwiI4b_j%s9)HHHGPiiKDC0qF2m~)bPG+@wWckaZ>HDK)X zD2Vl*@Tyo*GoX*Jo)pGbKB_PfGnrk#`h4}iGJ(gDADVy-ZdM$$+iu2xyNyyQhona! zLT9fMcGuaHnO*g?N}MgCDmX&agIP0h2A*M!*NF&>I}@8ygJ6zppPfd>$i_o7@)N zEp$v+s2QrK#5ZF0O;&`cvgv*a{K};==i&8!ItKsFfr)9~Ze~Vu>|K6nm`!ZpkoUFX zy~zblie*)UtFEFWzopHbqY;Fig_p=b8sLCnb`&d3RGC8&6*0Ir(7FWLF9at{uHW$e zqVf1+d*vJG&tS~pb^Tao@I$aSQaz6ZO^D)oYd^V^xEhQQU1Na>}I4{1>s>FNn#eFT~2PHcN!q?2=yJVqt` zzBhJn@b4p{Z1EVvevZd!dN$?Wktjw%DJkqa${~9)R%*ne(5Sczw#*EydW29bLLGXU zvspEIr^Wa=<`Wj#Ku{HKgP{y(+wb2l_S71{0zyPu0|yCro3SjaDJhfi#0GbjTME%k zX#5*i!SShbjZHm}PcR;$VH>;PWhcOYd7XU!7L&rGfr}m)_*xO{|Wk?XnCgUGPmy;REjmi z=m)H7(~O%Or3En*3jIg9LEd~XT0jG47bDGZm>K*_ZFm3UPdg>Gb`+YA8B0#Y zK$fdI3shnuNKmQ=m}>FV*q-EXmjKjeA0Yb}yHm81QX)}fB%-edns9A`5XFTQN`4vH z@S_y$-s_XLoRSDq4YPf)Mg~+wFJ1UBF^r=3hUB7l|AzCibXm>%Kw)B#4kbZ*fngp% zoV&c&rw%b(NbsRgjQyrv<)OA{%1BI4)Anuh7?)pDR?ugY62pv+;9#*w7`+hICbLSg?N` zGJvkU5d+tb|Dfb=KV5QuUI>Pr&^%YxtVIv@D5hX&4vK ze~%m{M=29^qd#dW?rwUUf)&YIFg&L$SkRJhmVJ5Is1Th=Qm0u|y^5N()$mwy<9~=; zjbSKlw1mX-ui*pD%~~PuqzUA>QI7)Qos&`LncHWM?Pchsl*vsBMI{tH)w+V8eY;Zh zTmR+Z*e=AC`;=QR4`LW&*gaCM@I6k64j?FO$8}ZFL)xHO# z1pe;I>Ga3n>ZF3^SO|J5ypQCU4>S^rG}+mma>40}(JiG9v?BgmDR=_`0O!zw(*~2d zF`%M)=(4UBU`(T`p-CumrGM!{jM@N`B)IrZE2;w%aEjCg-z&@8l;G{%WDvmAVZE>7 zvT~z0bR~yS8Lpa(v}?ZxXbf=pDhzK4Tp`*V_16t^p>Mo9REVs#bx2S@JFL8ifAaL+ zJCj~&VlpO+r+QGBu?7I&Y=Q(nFV2+E_BAXi+2iX}yJ;C`wyQfj$B17Qi|J0Xtf9h8 z_+8Wv{L!M|Geo7pmIsA@y&+7?R4zFNhZ}nk98)nAdSy*rWsPjCqsR1DINVn;kzku+ zHzZ3a=SmE*ehrb4}lOEn_{Ft+ZtHT)=>R2%Rb8&*#(T8;&~^BWo4 zm`}r+(0%jUj3VS;9(-E*>8;ykVS-w%RXQ}VjH<4(*QPEDAHB0w;mHr(r^5OmFDSbx z?y?ejNZ-q0ukiK*q|4uUD#pC*EtUoVWSt4_Yfr-QmLhdyF}F=GsxI?VjLn#G%dCiT z>f76|g!k=)Ab-`P#f536*|qA@8f<4y`n`)&fM2vI(t6t;0Lgi>`V7>OPKY&4fVV{d zDBslpe9>wHZ~%QtRPmCLZRH)>53A+uup@+&_1fGog-F5jhUpzGPI*Oqam|rg)~AC{ z-;8F40KwC1{mgE$I>+I@nOes3(+Z=|X)5KK3N@;1cyH)+by zg+3B#uQQ8M)AR zuvMFOo?dQwWz2V+P64cz6f%U*M;I8)+ zT4insYJ><|nQduk*4u9i7I9$EhI<82j4C=GZFD_WIbnlPjxtYW_mT(VReZj4m@>QF z-{-KSxA*=)keWb(qU*KYMQ>!*{}njveqFz`C=PHi=7?nJz*Cx%xv?MCch}`ZG1srD zVsv)k_=DqWz!IT%YCo*@`;EXL$vwV&2Rd5^?@ElNFu5wYyGXSPahY~2Q6F;(|F8HA zXk$wfk{&|$*wy=j{a%(xu?vUQmxHPy+wJfDqg`PG=>QxBV4x6u6x>Zwp)QeJS}Vj% zXFSvw*=m`CTTP;AVg81wwQIy6sx41fQF>A1I>Vz=OWp@+mwpK!g2_Iyhi4&0tMlDg zwnE#o=12ebx80cEPb9)tsatOmhnwp*tVMB5kr13N{(J>`qvE>c=r@IPqI*j&odT!fM%717$P?yQ$Qj(OtY zo4TD7^93k1%B6I{IU@Rd-v?ga{BDUwg+sz|>m%GRWjN?ObRmnNU;UB(G~q%;iB#1u zw|dIf7Nv)#hcK9ZmyYZ)`b8pha@5dz*a|vB3lAT0-=m!|P0+2<)N>n-v0HWvFgp~3 zKj3+2@I{UqJJKg-a8XujGxMOW4PH0H>S?!meOkorr(Az427o6KTRo=o zaXn2z3|lT%R~tn7SoEss?vGSZ?$-4;)3QlpKH=H+k*lV=jyCv?o*yyO=G$u4m*ypk zZ-i?+i}d5v3qyXn&5XsOtu7WNF{Ao7H_B^m8|5dpT`YcHL2QvUaaBm!4NDa54Sbn@ z=rwR+`$ih`gqw*#oeB|_aD$We2J%2S%aga%?4DgRL?P1CS$8WRO~Y#P3nry*eJ=7` zHwhXW(Z>}zYA;uzA@8!9)TeqoM_%Z6qbd|;`R;;Kr6C`z@H+W?k?;a&^}By@xQP+{ z`7O!a=2(_!A${KLO}!}o!i%p#w)#;eX6~l^>W;S=sH5Xy)%UvbfR)mZTEm8UdigGj zy79{An^ud;simW7b9MK^-)=cM%bm6w$}E=-Ah9|fFc2smU3Czp6TlFM7TJqpHYJcz zc9*_goSm8VxoG^owwa~6jx4+RVq!6ecqA5O%{GLs+s+KTg7CY6tUEs;L=mv0%$~V$ z>)AfOOjy@%5b!L$o&*_X$H0AK3AtY?vHZSSN8(qzQ%N)da$y?}!5FYoPVCCdg|*V% zh(@DTJhnm4_r8&uxe_%McJ=8ny=yR(MHTJ1LkFRuv6 zP-Nhjila4txF?|SRLRbf<1{e4%~Mshy!lssYkGOfyw4k%!oex+svrtO7Q{97iw;?A z-#MMQG}xbB-N}*KuhoHuHn7nwmuE~`JLu=%mW_qldjr%1+Q+l}v~YTHvrtj1&-Dck zj8oD&GCKxjS)Do#qZ;biy{isyas269MB*pq_g(n=D- z4TtuQesZl$jitva>EV_KjLAmX2zq}+2S)c#jTB9_d2% zNz#b(eNtzw<6^u+r-VQkE1E@=2;2sQqev){JJOJNU?enSGYg{+;h68wF6aSd@_oJ@ z_W$#$^+r*0#Z?T4UP(d4^Su~2$0JquP;Q^y;cH{;{P^X1_Pc0~j!Y`QbxWG+9j=(Z zG-erA|JJ>90nHJ{ugWcRd2+9yL0w;U<-4#N}R#7~P>tUq!RM))*@S-@nRop{1tFL|VUVrtw<=>-d-xv!p=dy4RUCRo+XFKfJ54f^8 z{KEZ~QOgN0u}R6CIvqfZ7@wR9aMWp`ec79KHB;*R&bCFfv*ztibFRyORU8@#i$|PUceuX6vp~-AHAGC4lM~#nAu6b3 z^3-;qwIqyWjsi}6KN%^HIbQSy1voi0RJ=_lr_3K=4CoQliS3Qye!n{g5pvt;i3jRO z7wz|!A1<8KKN&H#L!~-4a_vlbz1s!5r5X{$NqZa>u0T!{MTmdAV6w*-#|=I8^y^+P zsf;BqqhR=Yb6z`z8f2+SStmuPSS7&wlI_*3Nx0$n)|q;A97Hw(x2NeJh*v>Gvf3U1 zQcJ9{@9kZ`H;_TT)JePj1N={U$hbp zj^L0w4i!*6?;*F;A*(3Nv{{m?Z#XjPIXjj{@}P6-e11u^r>F(T(*%r;uUr--?1bL9OzG>%k9Q>(S7js-<&rXN_=T`ZaMfmeF~ zo@_2jjvfj#uy-rJollw9jX!4_yrGT)oUIN^_~&eC{YVoI?W<&d;B7J1js>Ncd&cQ`OcnJj~083$QKZar;**j`?}6sC-b zA2)4ZNxXUWT7T%VrN=fb-)v2|aUz|fd@S27i2-tKqz$-;S;odakeZwqp?6?fWwJDr zVdh8Z8MKJbVyZ?%7LxCuOjYZI9y(7rgP+XvHX^HK;W%o(;@YI;{*v_wn(sr!O%evX zGR@2}0=dm2ATbChJ?439q1|Cu8kwI=-dV^gTw#|Q()>NN{HySnjj^wyX~yPX9e&dE zTTV|4@rW}rO-$EG`Cto^To+rLV`mzJ!4_HMOAC*=o=3OjB02U9Fl1QiOMvJX$Eqe7m?;a89%9QnG?B zfW*a~24$j?t@C^5ZfcIEvxCxCC%B_`B=wy)kC89Ci$A=#({p|?^dm_u8#%h2ozT9` zUJ9!MsGLO%Nx*8qeeOapv|No>ePe>pIK*S>s|^_XijCfL)1fgIG|=tqEfv-23lAlz~b$@1NigU4Va&xZD6fNQe4 zK_2@&QVQ7F)FhFdhoewbP6cPQM|BI00NL!XBYXt@Y!!g5aD(rn@wXt-?Jee8l%SB^Kpfx0L8dVNg;g83eEh8{+%^9(LkIY z*q#B-(n0eME8aiklLUVw=^q4{57NnyyPnMU6$ditb;nS_)>mXVPw$NT9sVGoz>-NW z-HMF;D_w{xO^MKv*wN}8$nw-?R;LMol4K`SuR4tyZ;muS@2SZwF^8Mu%;X$abLC4w z5WrLg2tQdaS3@D1^~d$iie4AxyNF`5fihP^0PbHV&6tj7p^nCF;oGGDDXd4KBo_=b zjRBE;SAM(Hdl+6@mWuTAmRbfna^ZbY!+{AAIaE!dIv#_Ffcm3#a=vR-1?j2f&Z4HE zvQx7&@cEw!TJCL4l`;M%XyZnIu-n(*?Q%3s$u;V+WhSus<@+hNJ8Hon9{zg%VDH@> z7E-?)34gTTuRi`UbmxTCsORNsJLIF+!Ht!{anfv-#ETI{xZhvGy>@9K!QzBoOqRTc zl(06E5`dJRLpieuXSO5Zdv?4RjAhfQn>iOSOC_0vT7Spx0X*;bt zay-SNj{O&Mg{LdIGL@{%niv`2*n*8%!R{#e46Z3RIT1A;f5fS5*W!bo#{dI9JCK2(OdQB0(Yt+N*{*zSg^o~Gc2vY3sGFz6PSSY zL?TQ>w^Q?0d(z|zGL{Lyou4;vh%&|keRn>UyX#r@+Il=>U-b|ukx+9LLOI|+9*o?i zG^YHnCn7>bBFti@@*fZWVr_C{y!#DC%wrrR%dWBuxpBUM7iksQq$Pj}cA(qQcUh~V z(g!#ZU@-Gvid;V%F$8RIYz_n?3|>!9!mXHG5k|Y-@CE``h-crgQ|PM00jk~+C}b%h z-pPZStl*5^&+=mZO{#joLzwJZiNu*4Vl51B>;3cPUWypZ}IuzK6!OiEk0;w<0+ znU=t(GoMsdZs8kw{>~D&l%Xp|0FaqGe356)gvQDC>dMdkODgZN9mzMGOM1VaeOD7% zzo$Ms@*wyL(Y0tX4V4Hifwy-4N>h;e4=wM(py`8j79s%h@-KQ7uo-9A-X&oWh+yGp ztSf@-ob&zn+EFm4@=M&I+t48???WXa;Yi!Pwh>m@3C-Lbe0C~`K48JaNQ81joRlIV z;TlvBahg}Pe&HHgJ~+BO#CI_9#JqI>M28XqNW`xesp_~TehvJ@dTbW`|3iXDN-Ymg z%lH3JDyW6A#kxDiyEljaU0t(F%*6kSH=?HW+W(KHfq-lr!0{T!Ua}P50)^m32;fAJ*mpy{NIkCSXOT;rLOpedQ3YSVdM9wsK8?9Nc$}~U=`}GrU$w`UZ{0VwtHyM-@qHsaA1MbeunyKH&J3m-WYFyHE$a@M2qKa$dQe^0f5`GKB(XII zm^K&Wg&O+?Jbljv$GT54j3>NA z;f5LnH#>r}BuG?mYiEB$#3GN?#%@kBxY!JAQ;g=UpVmFl^c{1}yAMwvJ+Fke>`|Y0 z8v6C145oBFQ^KK13KYCb;hj1Y89kT_y_; zkv&^>jMk^Jk4VpF5p1+@`KHYcY^n;;Z7fZx?{t@;G^zXxo3us=U;ilgeBjq(5VY|v z%h^b6%ulH3{IlNtXdd6JTG?W-3idmY_nPMeuE+#1A1HHmIS9DpLlmE8$}E)K=w5vS_c=%2fx8lLP= zn@)4vZcRfC}RE( zD8l^@D3)lYnqi|ou1#`(Re`tEv_Y@tF<+oh<@3EW-^2k$=u?xm!g9%A+pdTQg^@l@ z&hLj0xXK&bZhXQhi^lpBsT--W=M|xkKM9ZTRF9s+oiIw-2QwSckEtrn;Llztu0{h+ z6l7MOAkCHV1TT3>-nTY8_qEscoHA-}FZ>)2k?l8uu{7jbP-)>iSFDOw>4YIfz-lEf z3JY2XYTZWX33E3~gjbTP%rvP6;Jm=*I zEtq9m%u{>EHzTtH8)NYd*4?I0qS#)b8_{uA^blfe1EGwjtL|n4@dZ}Cz0z#w&psX2 zwREm_4J?kdAp`b0L)hJO6wVXT8b);qU^xgR7T^S zZZX?$_-xa!k+wSW_PtKy1xCK3AhFn=K4pz zw)O5LG(7c>B%9XBQ$G?v77EBY`2Biy8Xe3VHlE;&)hv(Ayp&$S)DG_Iq|~jd9sa(i z8?>u=xkZr`nQtmk=ex1Oz+43X{DIt87Eci$>k_Zs7M19wk!2pAVLL%dS34{S*b=%O zNXPukCg(s24ArqEBzr5QIJBFZGaj?VKFS_Iu|Jz0&H~i`9=3&1tXJv(Ajjl|teH>b zNK-bZ#$5fb9#5kr7nPMDqTrn6k4EUS9J z8UF}x*`tUiluzcN22L^HbBdBE!<9`ASXH+inWTNBB&pn)q;pBdS}|w+G;d2qqw$n7 zncBjwv~H@itD+Tb#wNhh{!=<5FXsf|d?Et7IzTf}%xc8do_6EFD0`zs`)^bsO@g>b1-;LzJ~VB7nP|(xx2K_Vkj8u}!+=r=6E&oq zp=Wm*o2uD+*nX$C(hRBmQdI1~5E8r@?7%`&5+n&?C38Bzpw*jZ$v_EwzvWP&=YJTZ zm&$fo5|QPXq4f_2i#JF#sXhW^cTuiJ@DRvvihW159-CYlW%c<#AvtdrtrRus`3apj zOFG9ft+6KJCbt6{IAB)1M}y`t=w)avz*^pGcd$eQ&I5NH%I=3l7+GQG4W^^ch zUpDG%!m@j&N5>j1KpsK0`Bx58Gmc-hYWxHxw3#{uKW2T845d*jgK#rS{$sgwtIlng zG@-ImD7jlS+9u2}+0lA#;V`K~is}icRCpkt020Rq=5A^I-|F!b2fI~9t>oHIO^OXU ze&X41W6LK5ggOUZ9;HbwBUDy428=iyF_uFheKk=MI;2R9C#{8svC|JBd4T~y_Yy&o zK!?D14}%d=RbqGGL~+Ev2buRz7(D5|Y+j5KG>_7Y6C)n_!^MR*-`*n77TO&hEfv-7 zPzJ8YS3Vt6_D40#z{K1thIU%kl(taSl2kyxICLFhTs}E+Yh#33{S9>*BI|{($?yk2<6Eq_ak*UNS;`!=#ctXPG*0goD!bY`~11^8R zE_JNL+-%_P1Oi5lMeBG(;5EKaz*vshVfr6rS4PKEa+0p-l{B;?Gor?yaH|jzgB5b zkDKEGe5|FHcdQ4zKHq=DKl8zK}C_cM*aw_HXxilGlCSD#Jn5-;zXiRxhCJoKZJ zR!lLo(LbtQq-f%Fz_wS}=NrX00wyR*cfQFsv0Ye5f5Fr<)xh~P0Qhp+9ox85sc2{& zDq9C8A-hiv|7vX&OGU`3jM^$tXv`G?K|jvGQ}ZLo*b1J!iFJHvWige2o!Hn}rjB*k zu?Fl0x2{r+J!H@+Lfl7)1t|(WqBJGBYrq z))8?!S%rF*TVDS+SoBx4<(KFqm9YwT`oFlM#Jk(df={lWj(`Aob~)1EQ?qB$BP>-m z-it<~=ra%p(ddo4j4lkHP4cACHd{pkc}9i13&b^dQw2SpIJnalGbXJjN)gFLOS4CJ z)%JQcwCsrpW0CUnQ{CetcgfddqB|IrbmRmU>3>~Mzi7ZInj)tw4KT84cN>&p!rZg8 zwr-~s_<-e~J<>gsb=px%^TuCNke2gqbB@ydo*&!EPbk=Fl{_=`Ao-E>#n#(>oa+vk zwAP!J9^O<2W=KY}eIkjf9-hZ!m2~M!{GH%Ps4!H`-hvyG;sA!xeWtscSskBd;nOtn zMGHt}tHHj_;~8Q`)NUMJ51oU-Cqk9x>+(9adSrz|a;TqOovy=mQo7Y>L7WBNJj?Z3 zE6ZuJd^IFUGMAi5`wPR`fBuA@Ci`m_cmi&c2W-U z0#Q?G0~L?67h__DgRg9jh&*^!bZ)pFel>#KH5WmGAy|4Xy`7XX1{NI1MQ)r$Knzf+iW)!#*7G9=m^Mk zq2K%^s+cL+T`Pflts3J9a?J2YgZU|7UOd7usbG{!!(;C#;LggBo%}5Ue)u<-B<pMluma0t>7&qkr?!YBd3H8n2HtGj?Ba4eutm566o0xP7Drpeee@ky* zuyFCg?oWLq$XSkHU)#~R<$QvA!xAmA5jEZC{D63F-g4yLdDgOO!FJBihhIyh0mbTI zHNiW-*+^M_?ZyYB|K)BR5MGQqkh} zCu%t=`)D>Q#`l(u;5vCUoGn|BWtB~V*ATQ`qvM1keNRON#aALx2#pn{rjrDQDFb+I z&r97gYQ`$gOu36dL|sLapU^0#{E-HiCIlU}1zM?iYg$0HzjYA*4J3UbYGK$il(&2A zfP|3E7BcJP(I#Y9PAD3=3(fI zmS`Qr9K(6!stz3PH`mOs?~KInKgZ&6d{gM3L&gs-CoUYif<65R&dhnt*%Lv zeJdVy9_-pKGy1nqC{mc!U%5ROQ|Kko`)8A)mgc4OKwt_fFYA})#R1InC+x{@2EioF zQN;hS1hH0eFKBrOlO5=|^!*F>tteM67Py1vn`qy$BX90}P$WlmtqPL^fNQ@Tfmbn$ zmJl3Lm);C@2pAiTR17!y=|s@ts!0n2wVSX zl{-7W3x_fXDUhJ?@cq^xD$xje7=1(7Pb0Q4)^x{YI___Oo955LcATijd|aAvLh%T(_{T3j=xFLogeAa zw4HBQ4B*Y|gC-Tqa%bY8`?^>6^}#bNw#wRRDO)*gA}@~OPt`D>bZ%3rLsHzp(i2cQ zA5-!+Q?EGARLl+o6?%_K=|B%nqt41g{_Q+ZR z=miWX(CIQAM(_7OGaY7c|5N5Qnel*<*J#FzH=+##9UaK(iAII5IJ=%#krCk#wJfP2 z%(vwsjX-IR`j0ff9V3WHOVaQ_?x5mrQzH7)>Cn2EHR2Uq;FS4>H;?AUYH7y$!!F{@?7CYdZX{FTZ-4to(c$TTYtRKD4?Eva^~&_nmtHxE+k)WsikrD~1EoW`PA~ z8B+wL?#a&!62+PSTquT@@0P1w2w$vcISEG0yFy+;Mhu}r<|ERY^mzH9c_*<5a`5xW zxnH+;_6RXMhByo}iK$DX^kxmyoZ=~yfoOnL(lFz35d4WPtD4vyyoqfZlNQAV{;tbI zCH3lM5^1)8qefzkM2Mh^ke{SCyny;TibqvQ<;uMzt+}bl;#34f^N2H-X7x8tF}zS+ z2l1s~kj>YW0$*gx2J~7XjYk6%-J&Q7YayZs@PF!J)b>fi9Z& z*jN+DDd(NKGb9p*thBq?8n0?Epi4bQSqtj+=zwaQ!|CPTqpK9+?)>j7Y?6zG>-7zC ze~qcMRdhB%OWf~7_s5F>HRktckVaA&e{aqMphKXGhAdf^fFrvnT3Ll^<4(V)(K`H} zl$eMIOF(Q8I>28wmtYG{fCbO+({a8V01A}VGvOm`JDtBcc|QU9HQ*N&?`L9v{eN8H zbkY2`&>qRw$;UXj$03!W3;Byg5s=6kKD$}km*_4)hue3EJ~x=A4PKQaNo3IN4(6fi|ts={dea8E3>cV~VJ-JZM>~ ztCV|Uv*!0bgRz~PkK8yyEi!jYBPPH1 zf>o=aeGx00WFD4gs-lF9xxr@IsA2_5b9MZIOFE1qglYkZkXE*oEC>;9aUs#r>8S7i zKap_C+T-nvAk>9`?i_ecUW|XWAgBz!=Q zgi2kC@`D-1^bB^>Cb;imsl*iKXgSmUVW~$wm9wqK)XrGa6l3#OCQ(MV-6gZ7>IlGJ z@SKRVa~yhkexh`JbX&8dM)X?4QVSL9u8lF}3-(2+u`=s=wTu*1Yh7mIV&(f8;Jbsu zFAUo>N`P}*zeeQct29jgb|-8@^NRL_@DNHvk78f_jH~7J?*xSwQ6Ht6mLrdqvNy}> z*f*Ocm6K;f#rQ=6GyZjMTd#>XvZwSJI7wYBxn);a=BVdjV5<#t$@izEILE<_h9e@L7-NuE9F zRN-+K1HCe-+<2Bla>t+9TWF(E@m(Gf21oyDt>b5J2Cm`tGS%Yh*R@+Z@(NBo*I(e6 zwk&Q3wvk)~8@Z!Lh|!q*qj~ZIduU_mk^o!PE3V-Rv^a(V6?DLmYpIOIwMh$%5HNrG z?!TBM`k(fPO~nI(Wm*Q8BiwTZ5p!9!8y4aWi4u&Rg7}8Nw!hIe=@z4fG&}z~tu=IS zO=zO&gf$x4Kx|Q-Cl|U#JvdI4%o&LA{`u+z6uE`*1z&G=%O{Br9=G)VC~V|nksz^3 z-I`se1}KnAgljbYYbgLD(~^`_6Tp%ga=L&4p*z-mg@r(+TDZwjNoblEm$yvPZ+|v- zS}bd{0OI&cLd~CzLgz4DimS)|Al!m+>aZBvCML?*yKd&$S2W-Cpy2Wrf%#U+K=_{7o7_DS z3eC%QmdXKSp$aO^i#~?cAij(huzYj!VQ*c-XfIoVYepe2Jc(Wa;qd-3=E;L-W?g{| z_iRtI)rs)h*{=AMpzv@Cnh27m5SKhDM1_r6TOaa^$^ux%nSBIW3$pxVD1*InI*a)J zFx*z~Da78>cgKOxM~RcF-O%lBkl>4yp=+(~UBD2w?+6mYK_6EPdiPQMf;uqoRL3li zqDJaRb$b@z$=Xx0bR&F^*W|>g(O^7_qROEx47_0gWGI_H3cS+yy+G~OQl2B4HF2<& z8q=cCaQ@2YcYB@zVhTe=O=@7e^&AdxB0>!QPEaB>_BuKFR3u9;EiEnv*&5LDG||>T zE$X~^CtBske$<~lYeF`hzhh}l(Fd~{ zyZFQ~2(NIqdWhvLY_?kF#3V>5s#$9GHx=eN_4$iwd!XLtwn-)onZ-+fP2whi$N4v< z4N*jGZT3lP@0;65^Or1m*zSdcrV9QwsJYKVi|3bIgU2!pgg)Cj)5ISLnD}Tk5wpZ@ zHov1FWSb+NmfrYyD{+^UNhapBIyvCea{O z0-d6X=m%Ca1c22HxX)?^u{Oh6csF7tpp?|66;h8*QVaS!t5v^An5czx%z=;Ms>Al8 zDx>I5kl&IjWA0VMfQQmUz*&2!JTYct=bY#`MD0v^Lk-g{YB^ttq$kN@yvEhSkl5#0)rf<-yW>NiK8kQ{fw7KBJjt55))=+e;AoX-XyE< ze;pm{O){aF;+=3*55NG1*IH}Z1bbM%bSO;5@nXqc&h zM-Dj#3zhK3GUwuFQHuy#~a0?t))OfB`ED^z~_49^(fI< z1W$b#2OubgMEWMhw<<01(;^;=BKe7EtB7Uc(-jJ@DF*!?208lU57KN6N0-D4iO?xh zTn=)cD6o-IJX}ms2k12YQ`zzq-mb!NQndT$9!9YH?{z(M={-cK0S(nd5YR&kjuAe# zMUHLy3?n%~xu4VXZwDE3iEA3ppn-Bv2`hPlg7!N$vL>(>=cjo;GVn7`fS*~N+tT-P zumm@c5kiKY`IT7uuTirSH`Py@a)O9uTu9QcNOHx}K-#&Eo-d>k>?P zUUaM!9Vu+Hh=<8?!eyEN7+T{-A@pN&QFSlcZE-T?KXcb{@T)D!Pf!x1UY4)af+___alp zx2Rz%hNm#P@G`)Z2o2>ycmrTEMbXKY-ZQ6-Xcf+U_(W6Xo0tCkcsL6`QH~jmHdRIz z0gilX4+V}KRk_b&BtZsYj7(X%&tatgf1}&a(T7lxSf*}6V`Nk+CUgKDSsB`wPE3$Oi{njk#~CTPuK!WD{^Dl{YU4MbNtUam!PVc0+P#h-a~oHKbC6^^|^w?E}236~Be#3z6^-RWGoHFVe$k&I(FB zOqazrcJOGq0jHKq0>>(Xx=2Yrp-*9b#`|zy>H$a~8@&p^vG?y36(=Urk?nEOlT65FkoIHf3^i*IPB{R zLSRzz+C32uuq9aXvv5#)5Y#$UFI=oSg3P9S`rqI(I=PM3s9PVR*@PHL;_sS}~RvN^LDS zwn1g#GfXwEo3hJk1owwoVs=>A!0|bktEn`tRilLU{@v~b}qMPKIcOZ(FBBY343q!W2O0!yqwBAwl zVcI6$l$(8R0Kt5jWo@%I-)C|FduBz-7F*8xtvBxv!JkkGi6PV3Gk7i)wEEsMM)<%j zr;&rNXM?HD!n|u6wQ9Ys;)H!Sm+zx!dpTcI23+o|FH*?be64x zb`?-*p7nR0?<1rtQl4W&f%Xo8IIMY~x;qQdT#sP)uXZ-b|8Wn}%j&{kU!NnC+I*#Riwx2$(UsC5mCtpfy}w zPrQ8m(!Vc=Mno!S8%oVZga$~#VKdNLqw$8T?pwk^@JSpG94%4`<6@r;vWlM#vWAPv zTi>vKF^*BeHIc*6mzkztP81D%mhAW?GI9l^3(zz0;}|js4V$mcM83zVko7p$_VO;U zp8Kj|jg}`_h!a$O0qHm(U7lgDF=|anA_h-VOH_jF7`oV^HBauT$rL^*I13oO8wk^}uG9$;w;YEI` zHyBF(ZtdkG3vtdTF3zoG|9>|-E^p37cM{;%!rkK7B3W`&FBfUJb!RfEwTzt~J?#1c z%g6x+JS_{Rfd7xXw~ni8>9z%N_u%dt+zIXyB)GdnfZ*=#?(R--2(H21g1ZKHf14!d zeCNCGzT2<6@9RH$=eOBwuf0-LvuxEGHOCw=U(lz9?v7mRHP@iGh+wfVUJ~ZYMq|Dl zC*&KU(aoPlZn{3q*}O!9QHr0nVPtT{2-?kvH!?ixSGhz80X(xJ4f7}1yp8c%Bo|TK ztW4NZsDt_2m@kL=c;CQ)t1gBPkkA~ik~asSGt9ma<_9|f-4MV%T%beXA)0<$)$KX& z1;);)>j%_hgU>QS06eua+p5{)<&~o~j-}Cq-mw+;2x?VlBUs#>Waw2?j?boiYmhV7 zMu;y{8nJjc6gwdy9zc>Rrq^eI95Bolm(Gl(of$ahdJNw}z9fQyS5XoI9VUyFrCI{G`V{Cn3gl3|lV=V?zTS)n*hUcHau zMEg|Qioq?mKQm3y@Gd={)&Y*~)N;3Z5fU1~rgJ6jHAsFOm;+9ZpxG*P{4!^7KA8$d z%IXcK3vCnU(OuEoj>OPmk#Nw~(E=xUNtxlSX+cr~yAA9Fq^&)`Rf;FR8<%2HyA=X6 z|8#o5mr`4->uLUUo^;E_J#wZ#=3QrnTtM5^au#%X)vrJA;1~Oq;0!EdT2hNkHws?T z@gt7n;!Oqwbn$jYAHUCHWNRw0i@DWemCRC1=fc_CdTP&on|-uK>v1cxf4F3QpDNH5 zbLA57uO;Bnq8a6S{0e)y4r`6x%I9tV5D6wYJ;qSIfauq3X8@X3(=GeFdY9dvSX4t+ zZOnkEZ$^kLR^vOKQDPXsv4WN^jwl1)Ago8+2DKWGua$>%_2Q!`GMh4DBJRqLwVH_E zN=5qlgLa;e8(K&1Ia5JyxoS-bBLfc1iG{aUyld3duXAXD6bf#@z zOz6Gs8E-H`0$oL{-+|;Cx8v@9p`Xfz)$ib#wVGJUR1)91 zD#r+L767;t$pV8~Kqi14hc_0j7_K%x8*uY14CBC-%{8<_gl=W(foqYpPzrGTLk3Je z_LNnRv^Zr&hYL{F2WMU@(ii#uJK_Qu4AP1~zpsYm_wNC?8@PmiDv;GXYR}Y2Il%t5 z#=G_jySZRI(6%akH1cFUf@Tp6=TJRbb0KO$PR+1ka z$|DzRe9L{zgA)uOGzxCet=)QMzoiEWs3aCu3RokXGMFrYv=@zP76cbtQ}}P555j3kRwYkb8boHy622Yzx_?uW|5*kLk^A?6a9rKT za%heqAxo=4JwbvRetnj*_^D=I&BPZyn*!!2ZS2HTrPJe_r}KkD-J4eKrzoLXYp*>V zb?&v7u__s(q#M)~hDM!SG>!WPWhn~;nBi3ko+0k_sQ}yCqoG}4>DZ`f1r41-L;GSq zbee*OArY#9IIfRp95UPm_E_6pgXCYfwTsJ$&^c`~WNMY!9lzHCfQ9{lGMjc3T8H4b zO=medC`sA3n_1z;1*zpEZ+^nJS9g}b z(O=%kItU}Kv2c!xa-!)adEaUlmxITMVF$JuEVY%?79OCX$t;>~q|nwJl{h|7oSkv? zAAzKxXsalAPQrk9XtnZh;|W8iNrMG7?}KN4+g-kuI64lDg5!(9!Zp@!Jw-fX4f+O( zerm_L(U=dFxm)AaOiI-++aid0o?zjD!skyrbengzM1ke&tKTdtHmu+OS&a8!gvlpp z>&1K6agLsSSn@LIG|V{G#3ngRRatM=Se;slQu1nP9 z;d(i|pux*28-msM{}-_uO|-O%%LV*uAf1G;;!$wwy*oOp>(Sce7!QT zjT|TqJ10?Jzyla>`*5GpU}NMibDZ=Bmy0wN}m{itpLX@*>z4>?`IIBNS_yArr-xN z_T_UWYuLE|CR`NMiYy7{ZB0%-%{^P92iX;J$Y?g%Utl8POm5ww9}66{h?K|&G-P#) z#HZiPjj>AB;dObi){dvqnbhmZb{&lQi*Fx>_HC1SwIcOjywG%p^=knLpE`zhCII1E z`36Avj>SA0Bk%dPhe9RG<7Hm-P=*&)zO_7wo)&(pFmA7=y*w%O$zZT^<~$xtG%4d4 zX5q*j^Xzf@Sj!bT2V)L9xMw8VnP??buMBa!;-aJxr#=UU(8fEm!yo8cI;aSLt%cBb zRi3P%CL?~NY=5H*!&%HVypA2RZggVI`0bK@hj_HC41e~J4?uO0GA%iI&oDC*;uc_X z@NT=8Og%?&sbtvo5nMYZfWe&F#-skiQm+N-pU{}MfG{fn zhb)c~xX*2ErhRkb4N4MujhW_YySHv?Qn@r=Gc`4Su)DSx{nR>oUamc~=l+Di4Z`KT z3v?7E_(X%N9oK~gfEa@#bi>nva`XEdH}3o-HO7M~7StylXQs@niZ%)%pCjkG_lL?U7L}hO4rS&o7D7^bQNFJ8(r`D1 zh`G*qSn+jWP&{!}V1}O*wCHNjhSgUy%y<$lYD~8E<^~77F2YVS!6V~p%{gDUY(%$C zO1pT7z;&a2RPk|1c2n7Tn9)vI6d+*@dN@QQaBVYy+n0=%;Y?rDe5NxUc?0Z~dkCOm~U{s#WExpN)gx`tWB+^Nih zuE6>)e;tH(+A?Ul{{a8c-oQVvFYF5lin&IqT?CGzWQz>2U$hI4h@EfT84706XXHcI zEX)hoqoF@FYpWy8_>ebx=n-~8m#E0Y!fompEDW_(a5hB^qi0V=R{HB+ie0;6b7?uq{* zt)5iu#|j^56u9Z5`$ho!u<4ISF0=Q6=B+XWyh+eDJ=`LnY zm7cPQ-+_a!wqaH9F5%e+G$D`|&gou*~5A`ih%uz~Wu7U&YFU%xPZ zod0?TKmk*c9i8&)0WqTf9XVmqpU{7yLDO~W@0Fi+DVbW-JO?j=<*DScnrXFG<2)#n z2Gc?$=S;oH@HtLdI|NqYLuK_o%{xy)VSip2@8@1nEKA?gv?fAtX}5Mph7T!27*AH!tp^AZtQs+xinhVn)S&kYM%4(7r(j zhUZ#<=UJ~{b-RTex*bDb8@X~m`0rg)+uysUdI6HvcHiVCspTn(t^k2|6exsp7N`;d zjedzp2#} zr1iPco*=(jD+AfBWDQ|UA~>S7j6?uW(m!bmh)SwA?~!~%36;vMg{h$s8*E7W{PpW+l5KB}hT$R+ zSU=hq%*ah{iizU^tIlpcdNg@h(0O$jN(tG?u z1N$^rq0PJ4k>VO42V75pY8p9;^Q2L@4;JMD-XmYAf5SoD>!^f2282 zzdmqbtA_@MB5an4FNj~Qx07_PRC<9SszQw= zF@!OpRKzA(;=R)F6N8g`UlFEYi8`399Vg&K@?KTbOM&EUp~7{ySC%2TYDwavI`203 zrft3a=dWcfE(MbHPzZJ*3FdxAeTI$hIV?Usno~wPU&}FRhm!2yy=}o3Eb0s_UvRpy zHHK%f_$QXDZ6ISEWf*{_oN9C#9pCBuZ(+5@j9Mt4rY!KQxfU%968CU;rM;F?In&a$ zD|njX41mYYQ~O{coQj&NU5z;7#LHot7n^wUn<_hnXPqW*7$cATC^ev<2|-S%Sc+(p zH$ujhPjU2&+8C15-%~8~X<75YYEY$rks34*HflBzHUj1Gvz?lgWi}e$rp=hlWIZqu z1n;5GBBlDFV>zxn3X{8{~T5-6;O?0RyA z8|37-WR>ib1+E!E^eJ@IF%7T-wTA1MOe2jVo@pn`w*4Q2?-_GzqdWJgGem3vysHnl zL}$RqO!M}I??HhdSK<}Rvuy-S03|X3<&lz-oMd#9GO9DUDIJP;iqBs!7((GFWIAYD zWu;3zi5!Z51x4wi3b>>u;TfjJIlxkgE;1j=)SHa_P)fs-%F5EY|>nJ~a3DCt;PggtH9=X?tehOo+&i|e7v42PSVxpe{f zPqg09xKpWX={Qi1mhdgx_1TNbMFnaSo4$*-Yr%^U4}p0VKbL4b3VtpbeeXLhOIc)6 zuU!S$#a?aNr%wdqIA|B6T~`KGB?JgtBeB`KD!x{;D*BLkt$cNycqxB#EXsp0k>h<9 zT(^9y^F8O$+QvnqEDSqmv~4MSigB&uc>bCxjpD56>Gps;)bq=1ehALzBsG16iw;>I z^VZR+<_{?POXu(9-XAs&B(l+b+J2pSo;_ete2kCLJ!68jUSrCA&8F2*=ED*{D#C5< zdt}g<(p{IPZ=&oFWTZW2EgBhO`h{FWdarus?84lm=RU8Cn>+;fDubE-#ptH= z-00)SCeId!Ey@TTNRq|`plP+F`1y*1Hd6|s>Ouv&)-hA5Mh^N{RLS5Iqp^2CRik0xpY18Ah|WQs)!&jjA|)9Kjh40eO?93yyG#5Crs^ z=Ne!99A5N^Fzfwsu95&9;)$zcd6@X8ePkBq!5X}$ZLt@Ns9j_h_Tid?r)$2K2;mkk zAM;cP&eKo1*L~v`Tt4=h4#128d*W{| z>6$*Eeqy0~uM2WdFXKn}%03%EO>mnrJ=Z$0X*{C9wvE9dM;UEaQ@$s!y|y_|LDi1m zYSqqPwK-Aha1*%(w%??xIY2%zW0mhkxq2S%maqOk~#1Uw@&8akEhaODg-O)8p%-Rzy>AHOLfW5hL%aQ zc#+%V9Vh;a>0=pqJy(TF*hY2B8~cPO)9hjTPYknHBMdbAB;(M>UJ|d8k5O}`P0f(E zGIaFFYv~ewdYZxI=v#HHsiDVX9EqN|8bqaXlVsq*Rb}40st@A8-2va{)ndXapNgkF z^&Y(+!k_$Mv?D@65kxyJDuuSxox>Q*;?RP69VH30ZJTC-cu2q@QA&l-o6|aMmzZE@ zXlMhJrEHz;VO5LBa4%5Rsz|mTU)t3@weVP)v5LO4uYhmtr&TlaY%;Vril$L<5-wqR zIFIV}zhL(_8jr24>3X>})JL4ko7R&SgM{Ja}_{VVSfCfT~yGrK>0FsY>u-SFhb2arqL9{zQ9ql1QKMzn%z+e zk-FVFO_F96VY5BDP>KHqbIm4iFdjGhIGne2m%(5<0`~S;>$cHEV`-o6&4|@*o^Pl9 zcWSk#{mWe)4_YXgr)Hh*O7P{QtP!<2EZQ>oHCIr=C9MJh~mXrOH7%wV|0XTrX_au*bWff9AWclUDEu zwb_W)GrjBgw=Muj0>u~1bS1w_?(RyTuz0RQ62zw3Q%lfB?pE~}nz^VXU=sHTj?4MnC&QKT ztN>GG&qM<&u7RizrMKx}CD1q50NPzH8czPy$~*mdG=_$-KHlLJ?hd41@ncSRL3q#6x-%)49tZtlPh=SES+46*Dl%4-v|)YtM(cOPTLCFF zj5Pfb3OHk&GCHt9ghU8eDndVdeIKztyDa8zx#%YNG1PE!eQOcEAs95Z%xGd~`- zkuHbyr<^R70;6~~VztpfwCGM?el0C1EJC?o#>3#{_r;o2ub}=^gBJ$g*|Y*OeUiLAs{vG1wWe1>m^7y|iA| zU?R?-=7=9<<%~A2t)Qfup_>7Stf*e`fb#cpTK?J4wrVGAfPEIR=D%Jj_IJcHH>w?jx#h$VZn=8eSbyTXZ9^9uk=k0AV zh2^e496*rriPWB+T+?rA_FlDJR!_P$%r1A6b}_yC5jxsi&Jd_NWPw+y(`sW*x7(aR z9dxM9UJ%Y&4Q#Cwq_Kul1;~A=k|cN9z$jAXk11@yJ59farmrpYmm0YuSA@~PA_hUJ zoQol~y6^I4i?pYZ3eYt&g6NpGkU)eWt}@0ZYMX)f4yp!F$%~N=H~a~8u-}#$wOpBR zXUS6?zI^&bL;N*Dj>4O)%4f>%bAUd><=&iWyD^q$y>jd@ z55vJ2$r$AY6sQ>|V*~_Pf%9IlKmzeag?fBq;FOquanm2RI;LXiv0#P4Wyu%a`OER( z5jFtab_%zj`S*iFM5NhK$-Oc@-2`-AbHLsCwSN!84L#PRo04Oxwk zL;kv(%j0S<_?~d?xpMuPcnCmU^@jxxOG-VtMYMB=KEmZ8D~ERO{N{C$y`T@bL^m;b zH}wfh}smq0_!L|RZ|h~qQ<3LYgx5d62H@R|JU0eHEo={O<}qMaYMo?^SU{j+&7SyQL$ zW9KADYP;%mV@eV`q}2>kc!|}vfAx6P{8BQWxIhsN!sBsrp@&F5p?g9=yiuY1fP&3P z`(F{fM!)fj$NN$7=UZd7a7{VwVzz$%h-Dz(7t?6p;8Zd@ayykKFxfIo8>mxERkszL zlP01~J4DE!cI~Mb8rP1I8gXW;5L==z6L`q%IfdI!90iNKBiPBQIdLxPdqw<0lvLZe zp^*80$5#Zr@S3c7tGg-Spu!T(oIv0(5|##oer&5KOD0lti1P=VQTPJ#S{a5{0QBr9 zVYASD2%QU(li8h?#({}$Z?O0Y&^U|~xzBOch*KxUo^gb4tAPUU^BM{^eGDfK|&>85!S{qO{e6i z_-_(l`HWX7#ucg+{En2Pk3{bWT}5rlVwpp-QPEmchE%akzHq9Qx5?=1-;2Aj ztr5&z@Mrju6r4t7NLR#HOKtABiFGore!Ek;SMT3@VagUjeHN~1{flYQjnfZlhJk9z z7I;HReDyy3uR5^}RD(Y!d2UT$Q!%TJMSS9+Jh62jEhOujI)ZGR?W!wu8Frp;ktD;0Ig zujhtcgBkrg$Yvsv^-rQ!xHH<_KDMjaX~oq77{Et|s2hoj0{OvegyMltFHaW|CaQaQ zI^Dvn)t3F6%}PFdmKS=ES-D0zWY^EM8dP%{chxx6ZflQk=VK*u z(&Q8Lg@3m|Xti%mAlqsCq@vEn%B6HrjYB5c!r8^cQ!D9l;`UWCrlryC?&e@kGHn-3 zSE4F!efzCVd%@!44BzXqRJXF9M`WGE z;-};JCaj3HyV^;U9vZ`L-W^IeVemG9srpr=_HaiZi~yVxy>E7f>4!-;86;MiGSNN- z=9YM}GK9%$Y_YLmDF0`WF!9eXY$DPz+#uD+BAu*0zw1D=o{3bRW;9ntprsC2BpuyL zcpL3t1_d{?;vK6ye%W3{Z3!1nTYln{j?dvYt&_2hZm=TEE~YC}$J=X2Uqn z;bKH9(YVWmSgjZ~<1|Zw)Zzp_X$b{!JfHH}Uyy#(rg=hwwMm>eA}3F12_G4mirIL1q4_>083-ANTlfjuC9 zB-Hd)(O3s3(Dy@At00&S9yxzO)Qo6i)u!r3rNeJr*4Vr|GCeS*n9NfmH9ij(9jHIY z`KYEyB@m8D#O{91)}*7jT?5qSbW*Q_j^^V>)N zg~79eQe7-8QX7m#8j9toZ0#(-biP6@U*A+q8&OeuOOi>CK}`Cx;0m@!_I5LwHemJufip)!jt8ELzL#7UK`sgfPacAz(1uuhICX? zql)!%ZjR-1M0*BqTm@p_eZ-@(wVyNMT4O`|#hEk)c^IZ4PR|Q<&n+I1M^M@8LOtuD zQ4y??y-c4_W7*d2y0`Sc2(vQk2a$06uh0#Yyf1A02rUZzO@l<~K~4G7oZX}}DGWsG zvoBiQ5Cf`{zxAA<~rnAOE0&O_D+YG9LXerKkm6InO0Ue$;mV(HR3Wp+}lDJToG1n^&0b|Y!GOq zvi-o~{xEJn@>Th`C_q!Xh~JkbOCLLlV~rVJNB{#GEtrQA!eSy!MV)SVg5LaNA~aQI z|7P7MmKed(JZzVQ?4%}dzE}s)&G1Hwsk2~rD%W=cTwezpzeFPgFazTW;Lv|T zqL6?C=PpW$@ z)MOIhop`$638_yu8B3oq4t$=>Z@r` z{__t_i8VkIngSM{{V~zX1x+M)ZD{N|Uuq*0V2=sKGg9m;KX&1Ks#0K!lgV}L%%66) zPnyki6Z%*PeBeTM&xTKkauJL)%KoSP>^yscWEum<6y$zd-*u2<024EkSY)zAJ)Y^W z*p`pjpm?C-w`?%hTX)LgTReqc3Fc|`EJ`QqT<6|ZEct611GlTM0OwG**Gkz;{SX79 zHU*92+xS=Qk~Q-*&U^&~RV>hh-XHCWm(K{@t$8NaebP~x1%CV|=$}Pm?tCzLpsqSp ztX7X-eCfxW{m;W&5r;@yB>ka*=^amPbr~LMMDkE5pD5!3w~>JK7bIh$kf?Cy!O$Zu zUfAxVQ#=LbnPFa;|IB-af-sv+wk@VT#q62U-CsukGzP*k2OzL1;#*)-6}jbo8W7b? zlB8+=pI;ELKA~E_l%u!SlAfB~pJQmxRX5GY zn_!38Y#rU;v0wZ45GsVRrUj)~9~nhtNw$Ohp=}!@D(6L6!n_)bav324Xf%7ir?%0&(tgScz>v{KRljecO^N{k7 z_`tcF5Wm-D>xGkmr-kcfcYWOEBft%}2H<|SnE|{q-Md#ExN4qO(J;xFp-s-Go{c<= z?E7>)TP%QipY(CRjl6aKym733mn)JmVywby5~T7FPie@N{$%Zn`doV%(9;0DkB4W` zW?IK_FBI=4R>L5d?jztXW7#imj7Zh~5qqumpE{Bf| z5#c4+sPpUD|;u^a{Ya&K=ZYDaIuhQL($;$um~Zr0&5K7UE`C!M_%W@sqZD=eKZvg4`wpjzi~mmw__Q;o(J@--n(nm7M+TRMRFg- zVX-C!+0Ope%nA?KV2&b{!#FTDaj$#|ozx)B9s4^LQIxpM(BE+)K29uGCcl?d&$5%0 z7za!PhJZ%wjk#|c^5mYH(D+}P0m&4tRG^^tk%8(^xa$LCFH({=YrE6TE2RBQ zm@yH$QYf95T+59G)`1Mbz0f0^aOF7KdTY#YLd?(te5H=`PoK>;m?|`d%s=>{DgNfu zsQKp881qc^se3QSYV{$txJs>>JU6i}f|REP*~~Sq*A1%U`dSKZ163o}yleFPEaMYb zQtj0^*Vs!0W|&-N^x}b?crox{$i5Yq$unU5Ux5r)Rr1lwrNx5zO)n;GAGP0 zp#y;Nl+PZ^Cw~uBg?6bt_uj|@oPbXZ)SB}i18(z}r5zw!&@TF&VRgW{P2DTQ`sK!fmJ%fKk#hEipqlpp;J~lO$N$(-Ca8V4j`-r;;MNefxfrrTa zMrh~oWmXe#5?_=mnzgQ&^Ca)8Ivz(~A@RFGrGF`L{-qlEmnbLGFHOpSSI88wva+@Z zNKYy_=-dC2>HKJBWdZmuXl-ihdsWB~jX0!UmEzR7>Sosu^)0H~e5>0PpL za1gREG7++HGQa&GK*+@UCW84#6ZBtMzsZvRH)ajcNM&YcCuC$`BxL6JrKS0n^B*bH ze=3nOvAvb~zcJ@Gqu&yJGn$Ew?T^uHe{@#=J?l4((ErA)0Y<-7_nXoGs&2MF8m|AI z^Z%@c`v1D68Ce;A8O_Mb`j^qaglhj?P?d@8P5AV`*XXyL-;Dl8&i`2-`z3w*-BzxPm zh9iGAAg>@!yiQ0NBdfWGX{@5R|i+B^-B;G&Bkw{KU&r(%~tuX2?pD%C} zA^`ZXN9W%UcA_rn`Mhw(*Iqq5KeRnPc)C{a-M*%4cSon&0S+>?3okjs^Bnj1lK6^h z9gSbke-<)u5R9F^aBF=UWFaV7mD@IUzo6T?lL zZsv#^RttP2OwmnQFzoI}W}GBJg?m@6K#57MpCrei2%r`)^X7n4bc&=krL=~4Z_kjS z_J8OVK2)s=JYqFiJD+d_K{YWHQEdlkl;_Dy}gqJd{7usWN2$C6wv0w zss>kC4NI&`2uI`}Y)a`3@ST(s20iA*qnllh@Zt7 zh2y?!0lM}pv=BouxG7bY3h-3#X8;-9jMD1B|7Ea214ulKp9pj|K6u%4L~R*A*Oinje%s2mzgI3|YIkArPU# zHl5^~*Jmg^+^ZB4kNZVSbW8}{{Rwk)M>uhzpxO5fEZ%7m+NW%i*FYnV%p^G`Y%mAG^M&cn5Bc$h@ zv3({3f*gC-Ds907>aflYZ8fb7VKc%F-PUsrx1Q|cyQ+7DRcx>;v5r@10u%%YUKy+A zM~X`)JHTlPAA4xyBG|5%#@f4a0mj{9vty2ggLbW$z5v#}v$mn6uRYTb41PR??+OfN zG3z?u)stOWo&bHw#A1Uu%CW$~1=UvWfH7mlZzHxeas>9#GO!RY*-@K9r&$p&z(yjo{-d--n9eNMVQ2>nM zfSBO-0;TL>|{B9?(F zEM|;EYL8Ro+fJQ3^~!}GJyhv6CzpQWToB)Bvez10IUnttJg{$ntOK!V0j9U98_-!Y z9uhb=`y$s0e!6O1w7KXkt}5J$YQdOSzCQC9b3fHg z`J=JX@_VgLq)v?s<$aA09H6UOK3}N??o^XM8MU9QYI0nu zIzvyf+sU>Hq4S48mAiI=$%V)Ih^Xll7F%qA$oT{R=q3Tg!^weNZzGnAR=guGPVU$=_td_LV-LiV-}z)%z1F^1aE*bqsV+Yd1r0CB#3p})xLSo0&! zhaDiZtOr?y$Oh4+)+w?P*B6 z&K)izz9*k#lIb;w;~JuZS(Fmtjt~Z+JpG22dw8 z;6RXgktK6*N7Ud{49jXDA>e2174>RFAs>H1ALVUo6!Gq%mQkd28^VxoA8F)G8$#$F zz~|fsKS}`T62Ku4GL{mT@|!m-B#L|BhLlPu-9iwkgsOu|9Wchb{K{Q44pQ+Nj5zvj zYGUzjuCimw^{<43hvjpR0=Vd;W*M`t0;)ma649b94`3Yc#p`4-N26I}MiwoJ5n!1z zJDovaDOsc?7p&15x?XuWGt zhd>6V`O}vDhM(17!!3Q5A)BT-RBH%A~mH@9iW@cMx0sR?qIMg&ATw^~hjjc+)zhdCK z@35u2(g!KoW@&_>K7zRXQl>z>1Sw0yK5{G&kLs~*(iE;V%7J)@TZZAbGuu!yTjS#8M{J# zC`7#43+_HQ?iJhm8K3i6?b1H#9vMwI*f5XQUo%newW*;3N`@0ukt6^uCQE}q++~+c zlQck6h&0~{%XPVJ?e+Zfu02$|bn1{5G_;xZdoj-3vWA?q(}qT3@%27(?x$dctWkgH zNmX=se>Hh|6?$w<)S9qJ4Q1NK{Z$kp!vj5F9p>q6*rA&J)lCuO$#v?=1T*8w74TS9 zZvOct(Lxdu{I+X@kz4^uRhrr5Qlk@^A5m8g*vv3eeNqYkH?VbGFaecRV4@w{|3!kdG zK$T*C=q~l%^7QEpzbnd`XoCD}IXQ%OYd*70A5D!-tY|G--Bm-3Wyx0sgxGz9clyfj zroV5Qz4Ia^u}5X+5Mu}y{jz03x}}NA-n(PQ{3(;&VB1XSLna59(9C@augQ0xIib)( zd~ILSlHCQg(5s4s(XP|2dQRZ$jf3>qx+bmujQ7R4C=oXjA787u(}Ie;#BEU=vA{B_ zzWfYxKXv<=r|k@06$6+cRxXwIZfj3Pm@I9#qxB)-B^HIL3OVCV$)h*PfhAn$C@U2r zO!cEScdwwZRaSm-Sn82s11UDIe4X~oo@%SiNpkQfRiOXjKTIKm8EbzjuZc)MiA&fg z{pzBAN;j#R6RNU}!rSVr8m~D}h$<Ws{G(Jv6rPKXUZDY?;hezo%wX`y^> zr8!7Xht6-3;P-V5pH-HqA|JpK0(|P!oY1vn>}1!b?8P>Vl$xj`&khTG!NVm5aLL9Q zh)S1yH(lQc7rszh%|+$c7HvMbg!W%hT49b)KRAaLJ}E+?aOxt``(h;Ed=-I+Jr^i7 zF-4kH;Qx{VCJYLwkU6m_W2G;nN+R!^QQ4iuCKRugSM}VKCWW)8g(U9`MU}suhVF}m zq!_jZZkDo;GW#ix=M$Ftd2c>Ia90}@6ys|#D(%Ov#)ckIQkAwSf2_ZL_xKV56M?3p z{nShTId@ULPiaPSk&3D^WNIr+oa{Ifb$)yQ94%hfQkaB_R8jMOojENaxO5Lyg*l0D zsJX{5r`aZGtW|)CaQ|703U%XHT?`T-=|cU<7RfQi-<6yCi`z46oX)zI1DJeH*Ba)>pho@q;yxGa5So>C~=_euf`BsbUJo6g{=QPn?0+=Iz? z=w`p{;~UFXAX=fAC*wap2w}vMl!wEl5q^TFg6^)wXNM%`8#RFbLgT2T{4- z8cOPWROILoB`eACH4U;jitS~z3K&x(B7WF#d?@z*c^yP+=qDO2ZODv`^P%t7$+v^@o%sj^W2)K(uhuN>RT=tMP;8dA#s3r`{RJTYJGdaH zXJQ0+&X?1(HL|k*g?|E|O?oj~YX=)bZf<%Z1wwjZBS$j>BY81FLVCcre}N_jF2CRs zc_TY(2U`OpJHkI;&07LO)>ig_1nmel{=f_JZzzqlk)fHMptUoh#v97P!NNqy%J~~? zdxL2K7sJE+25|vNF#Seu00+Mi&bKpcZ+PRcgEzq9*TEYY_v_#fNW=6CsREn=sUf&c@D00)DB0Ed8tgn)uUf`NgC zhCxL@ghRqW#l*xwMMuZRBO}1ZA;CpQCwxyxLQX+NO@&23%Ro!XKt@SL`IZPUBqSsZ z6wEsqn0J)e=-8D1w_mTFK*&(Q1fWr%z{Efx$iSe;z^}bP1b}ja1OIvf{doa{fC9=3 z2?Y%U3%H;j2?zuj6chvu6dW833~;pv;CCP}WN;KBMgfR-pY$M!zo0Vt#N82?>jciit}|Dkv%`tEj4}8yFfHo0yuJ z+u1ufIyt+z`uPV01_g(N#>T}bBqk-Nq~_-37Zes1mz37j*3~yOHZ_0i?&Pkf-yPOUC<=V@@HuJwv#aEq%0d`=WnL{ zvh07)FyH@2mi=wmzwBBBf&&ExG#)525FgM(VJKxb$p6WAGvYhv+mDk4v5QFajnx?y zxF+T~m;=Vw+gFe=excv*!nRau6Rz6O9WK8Peqo9<;C3(m@wj659c$eefjhU|gmqjC zi;Ls)+-YOZwVD`W>ABLm22bMr^#vD?PJil25l8fzgt_0zck_N$T(~Pvo)2*|TWDjS zMBEe9XKAET^V2*{etgQ2@pmy3A=^gd$vB=3FO;H5sn{klb5748nI>rj$A zoUkT9UHJuZXL{R%K*Zoqrx!hwcsii3I!-6GP$(^BB)9!0jQt&!Tw2$EB`UR|-jVe5 zE+RLS=CbzcYi=kd(4RMG@ts>`dqkCBtn|*pa+8!#z;{8^SXUqo(!HVzw|sfhNzxdu zRx3~%ssUYBB)8D}$hM9RqsP@dNz$Y*7HZh=BTHexfdu@Zz)|K8?YR9dt?wIFypj&x zgWjzh7==YXP(1KW9PQ_ZK1^>3{+}F5|CedgM4XHDjzc?Jj7mN0L(|2LKrGJOPg%

    J5x&O{_XwjajqV75@6zlx(Y0}&y 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νi1#H9xd_;wd32GQ!>=nCg17L%Y3*#!#6iLb# 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%0Ae2>^C}eK33}hMZvVivDIeI6&}3zKn`~A*=&?A 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

    jj%?NYuKhhW`-Rh?~jhvT|-!? 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 z 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%0AZ16Oj&vt~th`BqMOVGmsKt#{l5SNMJAWwQ6% z2d?BI=3BXl`IgF6*aKJWfR20MN*!tEec&qZAF-F%0n7h*k;4CQ)94H`aKnp548x0A zIMErdj&yk}FLmSsRiJw#eph~69clk>-=wi$cEHLC-$*{JoDo1!M$V4S!x}VZv`Pk8v<}0x3ynza1}@+1DtMr9#^)#GF0ksd;rS$a=z+A z-c!_rqz#=X>S$d*;$h;#>da9zh-& z(%v>Yt90+^;}_CgT~Cc?d|zrjN#^)y`DVrQ1d=~GDKNqig!!ntK$0Ve#Jh6E3wbe zngrD4L+Ux>q;k&AvGox4Cc!S}LHEwQ`1A5uRU+LR{+xO7=j`p0XO`|Ir(`X3 z@67w)&qy-<=L^vn;G7LDA}oh!Dfs-mg=;t8UA@A<0d%=rq9MPBxe()&LxtL7}FCdcQ-i=MMotri-m z4TbM=`9{~%9VBPzDV+ETS*yjVCOAu1mpUE1Xw|+vmP?^$c}+eR2b7=AvAG%$g^y<( zfw}sSS$mckbk>*NUN?t_6?T1mEjc#?oqY&>W-UUHdw*q>cE8H~R=z3U@0z)CyOzpd znrL{PFl_VUEsZsqBN`g&7(? z>3W1u%1{cQq#_kBf)0y&ntWuB+RexwwVUBrLSvCV%;eZ=G8Uu9-ut0T8)`Qb3)Jy8 zXU@$U-4<4+XNdFVK3IOBcC&jEOWk|K@++R1)2q|mTcOKeu0*l_w{M?WACq(GUP*fN zdllc&r7qmqZ&@32-_&V_N2p$iy-(}RJ;zSN!?Z(*j;^96cc056J`{DD-G?;f?Blns zOMojyb{U7Yho1SkbLRBym3h+EBQIH!k8zueZ7pJ-nL|oU<{)Nr9$v2wZOCis|21!p zNfP-XbR3-(`oedwCNp#@0X6ueKWEMO?ymVtwe~!S(8=Xw?9-ojZ!#Rhi?0lK=e>6I z%Ohl|#vi68GrUtsBzpUmlI8#O!Oh;NYkQVn(v6O!CUf#J&B>Lt@>fk}Xp#mOKB=rN zx{5GPbR=XSU&}pxoAaP6FTav55E?>#;hn7W;y|o2_~R_iym>bWUa-l2yR}-z5y|;K zjlpsr)QHfPI?c@C&CZ;!`kufTdV4=~5Kk=dT5@E48kpqFDH4GRcV~TyDY6eKS-U>o z*vOfCe{jF066PLVJCDJihGz;%KV=1&O4o&@cO``ZD;XSk$aLSvLiEyU2B%=1gJrrh z#f90oO#L5SU~sCr==Qpo7?8KI4)(zl|MB;~{M-Nd{qH~i@TWih_`|>ZFaP#`e*eQ2 z1pem7zx?fQ|M25`D%v0Z1>isZ&%gfd4_8z7hkyQmzyJLo{_CH9|NSq2mESFq`S+iG z`PVQ1Dhu}8e@8-pWqaQState = HAL_SPI_STATE_RESET; \ - (__HANDLE__)->MspInitCallback = NULL; \ - (__HANDLE__)->MspDeInitCallback = NULL; \ - } while(0) -#else -#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET) -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - -/** @brief Enable the specified SPI interrupts. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @param __INTERRUPT__ specifies the interrupt source to enable. - * This parameter can be one of the following values: - * @arg SPI_IT_TXE: Tx buffer empty interrupt enable - * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable - * @arg SPI_IT_ERR: Error interrupt enable - * @retval None - */ -#define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)) - -/** @brief Disable the specified SPI interrupts. - * @param __HANDLE__ specifies the SPI handle. - * This parameter can be SPIx where x: 1, 2, or 3 to select the SPI peripheral. - * @param __INTERRUPT__ specifies the interrupt source to disable. - * This parameter can be one of the following values: - * @arg SPI_IT_TXE: Tx buffer empty interrupt enable - * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable - * @arg SPI_IT_ERR: Error interrupt enable - * @retval None - */ -#define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)) - -/** @brief Check whether the specified SPI interrupt source is enabled or not. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @param __INTERRUPT__ specifies the SPI interrupt source to check. - * This parameter can be one of the following values: - * @arg SPI_IT_TXE: Tx buffer empty interrupt enable - * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable - * @arg SPI_IT_ERR: Error interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2\ - & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** @brief Check whether the specified SPI flag is set or not. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg SPI_FLAG_RXNE: Receive buffer not empty flag - * @arg SPI_FLAG_TXE: Transmit buffer empty flag - * @arg SPI_FLAG_CRCERR: CRC error flag - * @arg SPI_FLAG_MODF: Mode fault flag - * @arg SPI_FLAG_OVR: Overrun flag - * @arg SPI_FLAG_BSY: Busy flag - * @arg SPI_FLAG_FRE: Frame format error flag - * @retval The new state of __FLAG__ (TRUE or FALSE). - */ -#define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) - -/** @brief Clear the SPI CRCERR pending flag. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = (uint16_t)(~SPI_FLAG_CRCERR)) - -/** @brief Clear the SPI MODF pending flag. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) \ - do{ \ - __IO uint32_t tmpreg_modf = 0x00U; \ - tmpreg_modf = (__HANDLE__)->Instance->SR; \ - CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE); \ - UNUSED(tmpreg_modf); \ - } while(0U) - -/** @brief Clear the SPI OVR pending flag. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) \ - do{ \ - __IO uint32_t tmpreg_ovr = 0x00U; \ - tmpreg_ovr = (__HANDLE__)->Instance->DR; \ - tmpreg_ovr = (__HANDLE__)->Instance->SR; \ - UNUSED(tmpreg_ovr); \ - } while(0U) - -/** @brief Clear the SPI FRE pending flag. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) \ - do{ \ - __IO uint32_t tmpreg_fre = 0x00U; \ - tmpreg_fre = (__HANDLE__)->Instance->SR; \ - UNUSED(tmpreg_fre); \ - }while(0U) - -/** @brief Enable the SPI peripheral. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define __HAL_SPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE) - -/** @brief Disable the SPI peripheral. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE) - -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ -/** @defgroup SPI_Private_Macros SPI Private Macros - * @{ - */ - -/** @brief Set the SPI transmit-only mode. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define SPI_1LINE_TX(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE) - -/** @brief Set the SPI receive-only mode. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define SPI_1LINE_RX(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE) - -/** @brief Reset the CRC calculation of the SPI. - * @param __HANDLE__ specifies the SPI Handle. - * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @retval None - */ -#define SPI_RESET_CRC(__HANDLE__) do{CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);\ - SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);}while(0U) - -/** @brief Check whether the specified SPI flag is set or not. - * @param __SR__ copy of SPI SR register. - * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg SPI_FLAG_RXNE: Receive buffer not empty flag - * @arg SPI_FLAG_TXE: Transmit buffer empty flag - * @arg SPI_FLAG_CRCERR: CRC error flag - * @arg SPI_FLAG_MODF: Mode fault flag - * @arg SPI_FLAG_OVR: Overrun flag - * @arg SPI_FLAG_BSY: Busy flag - * @arg SPI_FLAG_FRE: Frame format error flag - * @retval SET or RESET. - */ -#define SPI_CHECK_FLAG(__SR__, __FLAG__) ((((__SR__) & ((__FLAG__) & SPI_FLAG_MASK)) == \ - ((__FLAG__) & SPI_FLAG_MASK)) ? SET : RESET) - -/** @brief Check whether the specified SPI Interrupt is set or not. - * @param __CR2__ copy of SPI CR2 register. - * @param __INTERRUPT__ specifies the SPI interrupt source to check. - * This parameter can be one of the following values: - * @arg SPI_IT_TXE: Tx buffer empty interrupt enable - * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable - * @arg SPI_IT_ERR: Error interrupt enable - * @retval SET or RESET. - */ -#define SPI_CHECK_IT_SOURCE(__CR2__, __INTERRUPT__) ((((__CR2__) & (__INTERRUPT__)) == \ - (__INTERRUPT__)) ? SET : RESET) - -/** @brief Checks if SPI Mode parameter is in allowed range. - * @param __MODE__ specifies the SPI Mode. - * This parameter can be a value of @ref SPI_Mode - * @retval None - */ -#define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_SLAVE) || \ - ((__MODE__) == SPI_MODE_MASTER)) - -/** @brief Checks if SPI Direction Mode parameter is in allowed range. - * @param __MODE__ specifies the SPI Direction Mode. - * This parameter can be a value of @ref SPI_Direction - * @retval None - */ -#define IS_SPI_DIRECTION(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \ - ((__MODE__) == SPI_DIRECTION_2LINES_RXONLY) || \ - ((__MODE__) == SPI_DIRECTION_1LINE)) - -/** @brief Checks if SPI Direction Mode parameter is 2 lines. - * @param __MODE__ specifies the SPI Direction Mode. - * @retval None - */ -#define IS_SPI_DIRECTION_2LINES(__MODE__) ((__MODE__) == SPI_DIRECTION_2LINES) - -/** @brief Checks if SPI Direction Mode parameter is 1 or 2 lines. - * @param __MODE__ specifies the SPI Direction Mode. - * @retval None - */ -#define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \ - ((__MODE__) == SPI_DIRECTION_1LINE)) - -/** @brief Checks if SPI Data Size parameter is in allowed range. - * @param __DATASIZE__ specifies the SPI Data Size. - * This parameter can be a value of @ref SPI_Data_Size - * @retval None - */ -#define IS_SPI_DATASIZE(__DATASIZE__) (((__DATASIZE__) == SPI_DATASIZE_16BIT) || \ - ((__DATASIZE__) == SPI_DATASIZE_8BIT)) - -/** @brief Checks if SPI Serial clock steady state parameter is in allowed range. - * @param __CPOL__ specifies the SPI serial clock steady state. - * This parameter can be a value of @ref SPI_Clock_Polarity - * @retval None - */ -#define IS_SPI_CPOL(__CPOL__) (((__CPOL__) == SPI_POLARITY_LOW) || \ - ((__CPOL__) == SPI_POLARITY_HIGH)) - -/** @brief Checks if SPI Clock Phase parameter is in allowed range. - * @param __CPHA__ specifies the SPI Clock Phase. - * This parameter can be a value of @ref SPI_Clock_Phase - * @retval None - */ -#define IS_SPI_CPHA(__CPHA__) (((__CPHA__) == SPI_PHASE_1EDGE) || \ - ((__CPHA__) == SPI_PHASE_2EDGE)) - -/** @brief Checks if SPI Slave Select parameter is in allowed range. - * @param __NSS__ specifies the SPI Slave Select management parameter. - * This parameter can be a value of @ref SPI_Slave_Select_management - * @retval None - */ -#define IS_SPI_NSS(__NSS__) (((__NSS__) == SPI_NSS_SOFT) || \ - ((__NSS__) == SPI_NSS_HARD_INPUT) || \ - ((__NSS__) == SPI_NSS_HARD_OUTPUT)) - -/** @brief Checks if SPI Baudrate prescaler parameter is in allowed range. - * @param __PRESCALER__ specifies the SPI Baudrate prescaler. - * This parameter can be a value of @ref SPI_BaudRate_Prescaler - * @retval None - */ -#define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__) (((__PRESCALER__) == SPI_BAUDRATEPRESCALER_2) || \ - ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_4) || \ - ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_8) || \ - ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_16) || \ - ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_32) || \ - ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_64) || \ - ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_128) || \ - ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_256)) - -/** @brief Checks if SPI MSB LSB transmission parameter is in allowed range. - * @param __BIT__ specifies the SPI MSB LSB transmission (whether data transfer starts from MSB or LSB bit). - * This parameter can be a value of @ref SPI_MSB_LSB_transmission - * @retval None - */ -#define IS_SPI_FIRST_BIT(__BIT__) (((__BIT__) == SPI_FIRSTBIT_MSB) || \ - ((__BIT__) == SPI_FIRSTBIT_LSB)) - -/** @brief Checks if SPI TI mode parameter is in allowed range. - * @param __MODE__ specifies the SPI TI mode. - * This parameter can be a value of @ref SPI_TI_mode - * @retval None - */ -#define IS_SPI_TIMODE(__MODE__) (((__MODE__) == SPI_TIMODE_DISABLE) || \ - ((__MODE__) == SPI_TIMODE_ENABLE)) - -/** @brief Checks if SPI CRC calculation enabled state is in allowed range. - * @param __CALCULATION__ specifies the SPI CRC calculation enable state. - * This parameter can be a value of @ref SPI_CRC_Calculation - * @retval None - */ -#define IS_SPI_CRC_CALCULATION(__CALCULATION__) (((__CALCULATION__) == SPI_CRCCALCULATION_DISABLE) || \ - ((__CALCULATION__) == SPI_CRCCALCULATION_ENABLE)) - -/** @brief Checks if SPI polynomial value to be used for the CRC calculation, is in allowed range. - * @param __POLYNOMIAL__ specifies the SPI polynomial value to be used for the CRC calculation. - * This parameter must be a number between Min_Data = 0 and Max_Data = 65535 - * @retval None - */ -#define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__) (((__POLYNOMIAL__) >= 0x1U) && \ - ((__POLYNOMIAL__) <= 0xFFFFU) && \ - (((__POLYNOMIAL__)&0x1U) != 0U)) - -/** @brief Checks if DMA handle is valid. - * @param __HANDLE__ specifies a DMA Handle. - * @retval None - */ -#define IS_SPI_DMA_HANDLE(__HANDLE__) ((__HANDLE__) != NULL) - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup SPI_Exported_Functions - * @{ - */ - -/** @addtogroup SPI_Exported_Functions_Group1 - * @{ - */ -/* Initialization/de-initialization functions ********************************/ -HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi); -HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi); -void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi); -void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi); - -/* Callbacks Register/UnRegister functions ***********************************/ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) -HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID, - pSPI_CallbackTypeDef pCallback); -HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -/** - * @} - */ - -/** @addtogroup SPI_Exported_Functions_Group2 - * @{ - */ -/* I/O operation functions ***************************************************/ -HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); -HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); -HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, - uint32_t Timeout); -HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, - uint16_t Size); -HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, - uint16_t Size); -HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi); -HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi); -HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi); -/* Transfer Abort functions */ -HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi); -HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi); - -void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi); -void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi); -void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi); -void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi); -void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi); -void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi); -void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi); -void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi); -void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi); -/** - * @} - */ - -/** @addtogroup SPI_Exported_Functions_Group3 - * @{ - */ -/* Peripheral State and Error functions ***************************************/ -HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi); -uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32F4xx_HAL_SPI_H */ - diff --git a/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h b/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h deleted file mode 100644 index c5f5d3e..0000000 --- a/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +++ /dev/null @@ -1,884 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_uart.h - * @author MCD Application Team - * @brief Header file of UART HAL module. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_UART_H -#define __STM32F4xx_HAL_UART_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal_def.h" - -/** @addtogroup STM32F4xx_HAL_Driver - * @{ - */ - -/** @addtogroup UART - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup UART_Exported_Types UART Exported Types - * @{ - */ - -/** - * @brief UART Init Structure definition - */ -typedef struct -{ - uint32_t BaudRate; /*!< This member configures the UART communication baud rate. - The baud rate is computed using the following formula: - - IntegerDivider = ((PCLKx) / (8 * (OVR8+1) * (huart->Init.BaudRate))) - - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8 * (OVR8+1)) + 0.5 - Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */ - - uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. - This parameter can be a value of @ref UART_Word_Length */ - - uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. - This parameter can be a value of @ref UART_Stop_Bits */ - - uint32_t Parity; /*!< Specifies the parity mode. - This parameter can be a value of @ref UART_Parity - @note When parity is enabled, the computed parity is inserted - at the MSB position of the transmitted data (9th bit when - the word length is set to 9 data bits; 8th bit when the - word length is set to 8 data bits). */ - - uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. - This parameter can be a value of @ref UART_Mode */ - - uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled. - This parameter can be a value of @ref UART_Hardware_Flow_Control */ - - uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8). - This parameter can be a value of @ref UART_Over_Sampling */ -} UART_InitTypeDef; - -/** - * @brief HAL UART State structures definition - * @note HAL UART State value is a combination of 2 different substates: gState and RxState. - * - gState contains UART state information related to global Handle management - * and also information related to Tx operations. - * gState value coding follow below described bitmap : - * b7-b6 Error information - * 00 : No Error - * 01 : (Not Used) - * 10 : Timeout - * 11 : Error - * b5 Peripheral initialization status - * 0 : Reset (Peripheral not initialized) - * 1 : Init done (Peripheral initialized. HAL UART Init function already called) - * b4-b3 (not used) - * xx : Should be set to 00 - * b2 Intrinsic process state - * 0 : Ready - * 1 : Busy (Peripheral busy with some configuration or internal operations) - * b1 (not used) - * x : Should be set to 0 - * b0 Tx state - * 0 : Ready (no Tx operation ongoing) - * 1 : Busy (Tx operation ongoing) - * - RxState contains information related to Rx operations. - * RxState value coding follow below described bitmap : - * b7-b6 (not used) - * xx : Should be set to 00 - * b5 Peripheral initialization status - * 0 : Reset (Peripheral not initialized) - * 1 : Init done (Peripheral initialized) - * b4-b2 (not used) - * xxx : Should be set to 000 - * b1 Rx state - * 0 : Ready (no Rx operation ongoing) - * 1 : Busy (Rx operation ongoing) - * b0 (not used) - * x : Should be set to 0. - */ -typedef enum -{ - HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized - Value is allowed for gState and RxState */ - HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use - Value is allowed for gState and RxState */ - HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing - Value is allowed for gState only */ - HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing - Value is allowed for gState only */ - HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing - Value is allowed for RxState only */ - HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing - Not to be used for neither gState nor RxState. - Value is result of combination (Or) between gState and RxState values */ - HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state - Value is allowed for gState only */ - HAL_UART_STATE_ERROR = 0xE0U /*!< Error - Value is allowed for gState only */ -} HAL_UART_StateTypeDef; - -/** - * @brief HAL UART Reception type definition - * @note HAL UART Reception type value aims to identify which type of Reception is ongoing. - * It is expected to admit following values : - * HAL_UART_RECEPTION_STANDARD = 0x00U, - * HAL_UART_RECEPTION_TOIDLE = 0x01U, - */ -typedef uint32_t HAL_UART_RxTypeTypeDef; - -/** - * @brief UART handle Structure definition - */ -typedef struct __UART_HandleTypeDef -{ - USART_TypeDef *Instance; /*!< UART registers base address */ - - UART_InitTypeDef Init; /*!< UART communication parameters */ - - const uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */ - - uint16_t TxXferSize; /*!< UART Tx Transfer size */ - - __IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */ - - uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */ - - uint16_t RxXferSize; /*!< UART Rx Transfer size */ - - __IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */ - - __IO HAL_UART_RxTypeTypeDef ReceptionType; /*!< Type of ongoing reception */ - - DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */ - - DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */ - - HAL_LockTypeDef Lock; /*!< Locking object */ - - __IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management - and also related to Tx operations. - This parameter can be a value of @ref HAL_UART_StateTypeDef */ - - __IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations. - This parameter can be a value of @ref HAL_UART_StateTypeDef */ - - __IO uint32_t ErrorCode; /*!< UART Error code */ - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Half Complete Callback */ - void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Complete Callback */ - void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Half Complete Callback */ - void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Complete Callback */ - void (* ErrorCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Error Callback */ - void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Complete Callback */ - void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */ - void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Receive Complete Callback */ - void (* WakeupCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Wakeup Callback */ - void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback */ - - void (* MspInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp Init callback */ - void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp DeInit callback */ -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - -} UART_HandleTypeDef; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) -/** - * @brief HAL UART Callback ID enumeration definition - */ -typedef enum -{ - HAL_UART_TX_HALFCOMPLETE_CB_ID = 0x00U, /*!< UART Tx Half Complete Callback ID */ - HAL_UART_TX_COMPLETE_CB_ID = 0x01U, /*!< UART Tx Complete Callback ID */ - HAL_UART_RX_HALFCOMPLETE_CB_ID = 0x02U, /*!< UART Rx Half Complete Callback ID */ - HAL_UART_RX_COMPLETE_CB_ID = 0x03U, /*!< UART Rx Complete Callback ID */ - HAL_UART_ERROR_CB_ID = 0x04U, /*!< UART Error Callback ID */ - HAL_UART_ABORT_COMPLETE_CB_ID = 0x05U, /*!< UART Abort Complete Callback ID */ - HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U, /*!< UART Abort Transmit Complete Callback ID */ - HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID = 0x07U, /*!< UART Abort Receive Complete Callback ID */ - HAL_UART_WAKEUP_CB_ID = 0x08U, /*!< UART Wakeup Callback ID */ - - HAL_UART_MSPINIT_CB_ID = 0x0BU, /*!< UART MspInit callback ID */ - HAL_UART_MSPDEINIT_CB_ID = 0x0CU /*!< UART MspDeInit callback ID */ - -} HAL_UART_CallbackIDTypeDef; - -/** - * @brief HAL UART Callback pointer definition - */ -typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer to an UART callback function */ -typedef void (*pUART_RxEventCallbackTypeDef)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< pointer to a UART Rx Event specific callback function */ - -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - -/** - * @} - */ - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup UART_Exported_Constants UART Exported Constants - * @{ - */ - -/** @defgroup UART_Error_Code UART Error Code - * @{ - */ -#define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */ -#define HAL_UART_ERROR_PE 0x00000001U /*!< Parity error */ -#define HAL_UART_ERROR_NE 0x00000002U /*!< Noise error */ -#define HAL_UART_ERROR_FE 0x00000004U /*!< Frame error */ -#define HAL_UART_ERROR_ORE 0x00000008U /*!< Overrun error */ -#define HAL_UART_ERROR_DMA 0x00000010U /*!< DMA transfer error */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) -#define HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U /*!< Invalid Callback error */ -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -/** - * @} - */ - -/** @defgroup UART_Word_Length UART Word Length - * @{ - */ -#define UART_WORDLENGTH_8B 0x00000000U -#define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) -/** - * @} - */ - -/** @defgroup UART_Stop_Bits UART Number of Stop Bits - * @{ - */ -#define UART_STOPBITS_1 0x00000000U -#define UART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) -/** - * @} - */ - -/** @defgroup UART_Parity UART Parity - * @{ - */ -#define UART_PARITY_NONE 0x00000000U -#define UART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) -#define UART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) -/** - * @} - */ - -/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control - * @{ - */ -#define UART_HWCONTROL_NONE 0x00000000U -#define UART_HWCONTROL_RTS ((uint32_t)USART_CR3_RTSE) -#define UART_HWCONTROL_CTS ((uint32_t)USART_CR3_CTSE) -#define UART_HWCONTROL_RTS_CTS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE)) -/** - * @} - */ - -/** @defgroup UART_Mode UART Transfer Mode - * @{ - */ -#define UART_MODE_RX ((uint32_t)USART_CR1_RE) -#define UART_MODE_TX ((uint32_t)USART_CR1_TE) -#define UART_MODE_TX_RX ((uint32_t)(USART_CR1_TE | USART_CR1_RE)) -/** - * @} - */ - -/** @defgroup UART_State UART State - * @{ - */ -#define UART_STATE_DISABLE 0x00000000U -#define UART_STATE_ENABLE ((uint32_t)USART_CR1_UE) -/** - * @} - */ - -/** @defgroup UART_Over_Sampling UART Over Sampling - * @{ - */ -#define UART_OVERSAMPLING_16 0x00000000U -#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) -/** - * @} - */ - -/** @defgroup UART_LIN_Break_Detection_Length UART LIN Break Detection Length - * @{ - */ -#define UART_LINBREAKDETECTLENGTH_10B 0x00000000U -#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)USART_CR2_LBDL) -/** - * @} - */ - -/** @defgroup UART_WakeUp_functions UART Wakeup Functions - * @{ - */ -#define UART_WAKEUPMETHOD_IDLELINE 0x00000000U -#define UART_WAKEUPMETHOD_ADDRESSMARK ((uint32_t)USART_CR1_WAKE) -/** - * @} - */ - -/** @defgroup UART_Flags UART FLags - * Elements values convention: 0xXXXX - * - 0xXXXX : Flag mask in the SR register - * @{ - */ -#define UART_FLAG_CTS ((uint32_t)USART_SR_CTS) -#define UART_FLAG_LBD ((uint32_t)USART_SR_LBD) -#define UART_FLAG_TXE ((uint32_t)USART_SR_TXE) -#define UART_FLAG_TC ((uint32_t)USART_SR_TC) -#define UART_FLAG_RXNE ((uint32_t)USART_SR_RXNE) -#define UART_FLAG_IDLE ((uint32_t)USART_SR_IDLE) -#define UART_FLAG_ORE ((uint32_t)USART_SR_ORE) -#define UART_FLAG_NE ((uint32_t)USART_SR_NE) -#define UART_FLAG_FE ((uint32_t)USART_SR_FE) -#define UART_FLAG_PE ((uint32_t)USART_SR_PE) -/** - * @} - */ - -/** @defgroup UART_Interrupt_definition UART Interrupt Definitions - * Elements values convention: 0xY000XXXX - * - XXXX : Interrupt mask (16 bits) in the Y register - * - Y : Interrupt source register (2bits) - * - 0001: CR1 register - * - 0010: CR2 register - * - 0011: CR3 register - * @{ - */ - -#define UART_IT_PE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE)) -#define UART_IT_TXE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE)) -#define UART_IT_TC ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE)) -#define UART_IT_RXNE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE)) -#define UART_IT_IDLE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE)) - -#define UART_IT_LBD ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE)) - -#define UART_IT_CTS ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE)) -#define UART_IT_ERR ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE)) -/** - * @} - */ - -/** @defgroup UART_RECEPTION_TYPE_Values UART Reception type values - * @{ - */ -#define HAL_UART_RECEPTION_STANDARD (0x00000000U) /*!< Standard reception */ -#define HAL_UART_RECEPTION_TOIDLE (0x00000001U) /*!< Reception till completion or IDLE event */ -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/** @defgroup UART_Exported_Macros UART Exported Macros - * @{ - */ - -/** @brief Reset UART handle gstate & RxState - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @retval None - */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) -#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ - (__HANDLE__)->gState = HAL_UART_STATE_RESET; \ - (__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ - (__HANDLE__)->MspInitCallback = NULL; \ - (__HANDLE__)->MspDeInitCallback = NULL; \ - } while(0U) -#else -#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ - (__HANDLE__)->gState = HAL_UART_STATE_RESET; \ - (__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ - } while(0U) -#endif /*USE_HAL_UART_REGISTER_CALLBACKS */ - -/** @brief Flushes the UART DR register - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - */ -#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) - -/** @brief Checks whether the specified UART flag is set or not. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @param __FLAG__ specifies the flag to check. - * This parameter can be one of the following values: - * @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) - * @arg UART_FLAG_LBD: LIN Break detection flag - * @arg UART_FLAG_TXE: Transmit data register empty flag - * @arg UART_FLAG_TC: Transmission Complete flag - * @arg UART_FLAG_RXNE: Receive data register not empty flag - * @arg UART_FLAG_IDLE: Idle Line detection flag - * @arg UART_FLAG_ORE: Overrun Error flag - * @arg UART_FLAG_NE: Noise Error flag - * @arg UART_FLAG_FE: Framing Error flag - * @arg UART_FLAG_PE: Parity Error flag - * @retval The new state of __FLAG__ (TRUE or FALSE). - */ -#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) - -/** @brief Clears the specified UART pending flag. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @param __FLAG__ specifies the flag to check. - * This parameter can be any combination of the following values: - * @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5). - * @arg UART_FLAG_LBD: LIN Break detection flag. - * @arg UART_FLAG_TC: Transmission Complete flag. - * @arg UART_FLAG_RXNE: Receive data register not empty flag. - * - * @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun - * error) and IDLE (Idle line detected) flags are cleared by software - * sequence: a read operation to USART_SR register followed by a read - * operation to USART_DR register. - * @note RXNE flag can be also cleared by a read to the USART_DR register. - * @note TC flag can be also cleared by software sequence: a read operation to - * USART_SR register followed by a write operation to USART_DR register. - * @note TXE flag is cleared only by a write to the USART_DR register. - * - * @retval None - */ -#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) - -/** @brief Clears the UART PE pending flag. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @retval None - */ -#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) \ - do{ \ - __IO uint32_t tmpreg = 0x00U; \ - tmpreg = (__HANDLE__)->Instance->SR; \ - tmpreg = (__HANDLE__)->Instance->DR; \ - UNUSED(tmpreg); \ - } while(0U) - -/** @brief Clears the UART FE pending flag. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @retval None - */ -#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) - -/** @brief Clears the UART NE pending flag. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @retval None - */ -#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) - -/** @brief Clears the UART ORE pending flag. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @retval None - */ -#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) - -/** @brief Clears the UART IDLE pending flag. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @retval None - */ -#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) - -/** @brief Enable the specified UART interrupt. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @param __INTERRUPT__ specifies the UART interrupt source to enable. - * This parameter can be one of the following values: - * @arg UART_IT_CTS: CTS change interrupt - * @arg UART_IT_LBD: LIN Break detection interrupt - * @arg UART_IT_TXE: Transmit Data Register empty interrupt - * @arg UART_IT_TC: Transmission complete interrupt - * @arg UART_IT_RXNE: Receive Data register not empty interrupt - * @arg UART_IT_IDLE: Idle line detection interrupt - * @arg UART_IT_PE: Parity Error interrupt - * @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) - * @retval None - */ -#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \ - (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \ - ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK))) - -/** @brief Disable the specified UART interrupt. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @param __INTERRUPT__ specifies the UART interrupt source to disable. - * This parameter can be one of the following values: - * @arg UART_IT_CTS: CTS change interrupt - * @arg UART_IT_LBD: LIN Break detection interrupt - * @arg UART_IT_TXE: Transmit Data Register empty interrupt - * @arg UART_IT_TC: Transmission complete interrupt - * @arg UART_IT_RXNE: Receive Data register not empty interrupt - * @arg UART_IT_IDLE: Idle line detection interrupt - * @arg UART_IT_PE: Parity Error interrupt - * @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) - * @retval None - */ -#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ - (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ - ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK))) - -/** @brief Checks whether the specified UART interrupt source is enabled or not. - * @param __HANDLE__ specifies the UART Handle. - * UART Handle selects the USARTx or UARTy peripheral - * (USART,UART availability and x,y values depending on device). - * @param __IT__ specifies the UART interrupt source to check. - * This parameter can be one of the following values: - * @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) - * @arg UART_IT_LBD: LIN Break detection interrupt - * @arg UART_IT_TXE: Transmit Data Register empty interrupt - * @arg UART_IT_TC: Transmission complete interrupt - * @arg UART_IT_RXNE: Receive Data register not empty interrupt - * @arg UART_IT_IDLE: Idle line detection interrupt - * @arg UART_IT_ERR: Error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \ - (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK)) - -/** @brief Enable CTS flow control - * @note This macro allows to enable CTS hardware flow control for a given UART instance, - * without need to call HAL_UART_Init() function. - * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. - * @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need - * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : - * - UART instance should have already been initialised (through call of HAL_UART_Init() ) - * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) - * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__ specifies the UART Handle. - * The Handle Instance can be any USARTx (supporting the HW Flow control feature). - * It is used to select the USART peripheral (USART availability and x value depending on device). - * @retval None - */ -#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__) \ - do{ \ - ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ - (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE; \ - } while(0U) - -/** @brief Disable CTS flow control - * @note This macro allows to disable CTS hardware flow control for a given UART instance, - * without need to call HAL_UART_Init() function. - * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. - * @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need - * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : - * - UART instance should have already been initialised (through call of HAL_UART_Init() ) - * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) - * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__ specifies the UART Handle. - * The Handle Instance can be any USARTx (supporting the HW Flow control feature). - * It is used to select the USART peripheral (USART availability and x value depending on device). - * @retval None - */ -#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__) \ - do{ \ - ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ - (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE); \ - } while(0U) - -/** @brief Enable RTS flow control - * This macro allows to enable RTS hardware flow control for a given UART instance, - * without need to call HAL_UART_Init() function. - * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. - * @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need - * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : - * - UART instance should have already been initialised (through call of HAL_UART_Init() ) - * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) - * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__ specifies the UART Handle. - * The Handle Instance can be any USARTx (supporting the HW Flow control feature). - * It is used to select the USART peripheral (USART availability and x value depending on device). - * @retval None - */ -#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__) \ - do{ \ - ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \ - (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE; \ - } while(0U) - -/** @brief Disable RTS flow control - * This macro allows to disable RTS hardware flow control for a given UART instance, - * without need to call HAL_UART_Init() function. - * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. - * @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need - * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : - * - UART instance should have already been initialised (through call of HAL_UART_Init() ) - * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) - * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__ specifies the UART Handle. - * The Handle Instance can be any USARTx (supporting the HW Flow control feature). - * It is used to select the USART peripheral (USART availability and x value depending on device). - * @retval None - */ -#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__) \ - do{ \ - ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\ - (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \ - } while(0U) - -/** @brief Macro to enable the UART's one bit sample method - * @param __HANDLE__ specifies the UART Handle. - * @retval None - */ -#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) - -/** @brief Macro to disable the UART's one bit sample method - * @param __HANDLE__ specifies the UART Handle. - * @retval None - */ -#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3\ - &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT)) - -/** @brief Enable UART - * @param __HANDLE__ specifies the UART Handle. - * @retval None - */ -#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) - -/** @brief Disable UART - * @param __HANDLE__ specifies the UART Handle. - * @retval None - */ -#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup UART_Exported_Functions - * @{ - */ - -/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions - * @{ - */ - -/* Initialization/de-initialization functions **********************************/ -HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength); -HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod); -HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart); -void HAL_UART_MspInit(UART_HandleTypeDef *huart); -void HAL_UART_MspDeInit(UART_HandleTypeDef *huart); - -/* Callbacks Register/UnRegister functions ***********************************/ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) -HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, - pUART_CallbackTypeDef pCallback); -HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID); - -HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback); -HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - -/** - * @} - */ - -/** @addtogroup UART_Exported_Functions_Group2 IO operation functions - * @{ - */ - -/* IO operation functions *******************************************************/ -HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout); -HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); -HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart); - -HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, - uint32_t Timeout); -HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); - -/* Transfer Abort functions */ -HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart); - -void HAL_UART_IRQHandler(UART_HandleTypeDef *huart); -void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); -void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); -void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); -void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); -void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart); -void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart); -void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart); -void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart); - -void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size); - -/** - * @} - */ - -/** @addtogroup UART_Exported_Functions_Group3 - * @{ - */ -/* Peripheral Control functions ************************************************/ -HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart); -HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart); -/** - * @} - */ - -/** @addtogroup UART_Exported_Functions_Group4 - * @{ - */ -/* Peripheral State functions **************************************************/ -HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart); -uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart); -/** - * @} - */ - -/** - * @} - */ -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private constants ---------------------------------------------------------*/ -/** @defgroup UART_Private_Constants UART Private Constants - * @{ - */ -/** @brief UART interruptions flag mask - * - */ -#define UART_IT_MASK 0x0000FFFFU - -#define UART_CR1_REG_INDEX 1U -#define UART_CR2_REG_INDEX 2U -#define UART_CR3_REG_INDEX 3U -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ -/** @defgroup UART_Private_Macros UART Private Macros - * @{ - */ -#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \ - ((LENGTH) == UART_WORDLENGTH_9B)) -#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B)) -#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \ - ((STOPBITS) == UART_STOPBITS_2)) -#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \ - ((PARITY) == UART_PARITY_EVEN) || \ - ((PARITY) == UART_PARITY_ODD)) -#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\ - (((CONTROL) == UART_HWCONTROL_NONE) || \ - ((CONTROL) == UART_HWCONTROL_RTS) || \ - ((CONTROL) == UART_HWCONTROL_CTS) || \ - ((CONTROL) == UART_HWCONTROL_RTS_CTS)) -#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U)) -#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \ - ((STATE) == UART_STATE_ENABLE)) -#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \ - ((SAMPLING) == UART_OVERSAMPLING_8)) -#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16)) -#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \ - ((LENGTH) == UART_LINBREAKDETECTLENGTH_11B)) -#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \ - ((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK)) -#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 10500000U) -#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU) - -#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_) ((uint32_t)((((uint64_t)(_PCLK_))*25U)/(4U*((uint64_t)(_BAUD_))))) -#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_) (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U) -#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U)\ - + 50U) / 100U) -/* UART BRR = mantissa + overflow + fraction - = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */ -#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_) ((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \ - (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U) + \ - (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU)) - -#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_) ((uint32_t)((((uint64_t)(_PCLK_))*25U)/(2U*((uint64_t)(_BAUD_))))) -#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_) (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U) -#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U)\ - + 50U) / 100U) -/* UART BRR = mantissa + overflow + fraction - = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */ -#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_) ((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \ - ((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U) + \ - (UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U)) - -/** - * @} - */ - -/* Private functions ---------------------------------------------------------*/ -/** @defgroup UART_Private_Functions UART Private Functions - * @{ - */ - -HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); -HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_UART_H */ - diff --git a/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h b/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h deleted file mode 100644 index e07c232..0000000 --- a/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h +++ /dev/null @@ -1,2521 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_ll_usart.h - * @author MCD Application Team - * @brief Header file of USART LL module. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_LL_USART_H -#define __STM32F4xx_LL_USART_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" - -/** @addtogroup STM32F4xx_LL_Driver - * @{ - */ - -#if defined (USART1) || defined (USART2) || defined (USART3) || defined (USART6) || defined (UART4) || defined (UART5) || defined (UART7) || defined (UART8) || defined (UART9) || defined (UART10) - -/** @defgroup USART_LL USART - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ - -/* Private constants ---------------------------------------------------------*/ -/** @defgroup USART_LL_Private_Constants USART Private Constants - * @{ - */ - -/* Defines used for the bit position in the register and perform offsets*/ -#define USART_POSITION_GTPR_GT USART_GTPR_GT_Pos -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup USART_LL_Private_Macros USART Private Macros - * @{ - */ -/** - * @} - */ -#endif /*USE_FULL_LL_DRIVER*/ - -/* Exported types ------------------------------------------------------------*/ -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup USART_LL_ES_INIT USART Exported Init structures - * @{ - */ - -/** - * @brief LL USART Init Structure definition - */ -typedef struct -{ - uint32_t BaudRate; /*!< This field defines expected Usart communication baud rate. - - This feature can be modified afterwards using unitary function @ref LL_USART_SetBaudRate().*/ - - uint32_t DataWidth; /*!< Specifies the number of data bits transmitted or received in a frame. - This parameter can be a value of @ref USART_LL_EC_DATAWIDTH. - - This feature can be modified afterwards using unitary function @ref LL_USART_SetDataWidth().*/ - - uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. - This parameter can be a value of @ref USART_LL_EC_STOPBITS. - - This feature can be modified afterwards using unitary function @ref LL_USART_SetStopBitsLength().*/ - - uint32_t Parity; /*!< Specifies the parity mode. - This parameter can be a value of @ref USART_LL_EC_PARITY. - - This feature can be modified afterwards using unitary function @ref LL_USART_SetParity().*/ - - uint32_t TransferDirection; /*!< Specifies whether the Receive and/or Transmit mode is enabled or disabled. - This parameter can be a value of @ref USART_LL_EC_DIRECTION. - - This feature can be modified afterwards using unitary function @ref LL_USART_SetTransferDirection().*/ - - uint32_t HardwareFlowControl; /*!< Specifies whether the hardware flow control mode is enabled or disabled. - This parameter can be a value of @ref USART_LL_EC_HWCONTROL. - - This feature can be modified afterwards using unitary function @ref LL_USART_SetHWFlowCtrl().*/ - - uint32_t OverSampling; /*!< Specifies whether USART oversampling mode is 16 or 8. - This parameter can be a value of @ref USART_LL_EC_OVERSAMPLING. - - This feature can be modified afterwards using unitary function @ref LL_USART_SetOverSampling().*/ - -} LL_USART_InitTypeDef; - -/** - * @brief LL USART Clock Init Structure definition - */ -typedef struct -{ - uint32_t ClockOutput; /*!< Specifies whether the USART clock is enabled or disabled. - This parameter can be a value of @ref USART_LL_EC_CLOCK. - - USART HW configuration can be modified afterwards using unitary functions - @ref LL_USART_EnableSCLKOutput() or @ref LL_USART_DisableSCLKOutput(). - For more details, refer to description of this function. */ - - uint32_t ClockPolarity; /*!< Specifies the steady state of the serial clock. - This parameter can be a value of @ref USART_LL_EC_POLARITY. - - USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPolarity(). - For more details, refer to description of this function. */ - - uint32_t ClockPhase; /*!< Specifies the clock transition on which the bit capture is made. - This parameter can be a value of @ref USART_LL_EC_PHASE. - - USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPhase(). - For more details, refer to description of this function. */ - - uint32_t LastBitClockPulse; /*!< Specifies whether the clock pulse corresponding to the last transmitted - data bit (MSB) has to be output on the SCLK pin in synchronous mode. - This parameter can be a value of @ref USART_LL_EC_LASTCLKPULSE. - - USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetLastClkPulseOutput(). - For more details, refer to description of this function. */ - -} LL_USART_ClockInitTypeDef; - -/** - * @} - */ -#endif /* USE_FULL_LL_DRIVER */ - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup USART_LL_Exported_Constants USART Exported Constants - * @{ - */ - -/** @defgroup USART_LL_EC_GET_FLAG Get Flags Defines - * @brief Flags defines which can be used with LL_USART_ReadReg function - * @{ - */ -#define LL_USART_SR_PE USART_SR_PE /*!< Parity error flag */ -#define LL_USART_SR_FE USART_SR_FE /*!< Framing error flag */ -#define LL_USART_SR_NE USART_SR_NE /*!< Noise detected flag */ -#define LL_USART_SR_ORE USART_SR_ORE /*!< Overrun error flag */ -#define LL_USART_SR_IDLE USART_SR_IDLE /*!< Idle line detected flag */ -#define LL_USART_SR_RXNE USART_SR_RXNE /*!< Read data register not empty flag */ -#define LL_USART_SR_TC USART_SR_TC /*!< Transmission complete flag */ -#define LL_USART_SR_TXE USART_SR_TXE /*!< Transmit data register empty flag */ -#define LL_USART_SR_LBD USART_SR_LBD /*!< LIN break detection flag */ -#define LL_USART_SR_CTS USART_SR_CTS /*!< CTS flag */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_IT IT Defines - * @brief IT defines which can be used with LL_USART_ReadReg and LL_USART_WriteReg functions - * @{ - */ -#define LL_USART_CR1_IDLEIE USART_CR1_IDLEIE /*!< IDLE interrupt enable */ -#define LL_USART_CR1_RXNEIE USART_CR1_RXNEIE /*!< Read data register not empty interrupt enable */ -#define LL_USART_CR1_TCIE USART_CR1_TCIE /*!< Transmission complete interrupt enable */ -#define LL_USART_CR1_TXEIE USART_CR1_TXEIE /*!< Transmit data register empty interrupt enable */ -#define LL_USART_CR1_PEIE USART_CR1_PEIE /*!< Parity error */ -#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */ -#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */ -#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_DIRECTION Communication Direction - * @{ - */ -#define LL_USART_DIRECTION_NONE 0x00000000U /*!< Transmitter and Receiver are disabled */ -#define LL_USART_DIRECTION_RX USART_CR1_RE /*!< Transmitter is disabled and Receiver is enabled */ -#define LL_USART_DIRECTION_TX USART_CR1_TE /*!< Transmitter is enabled and Receiver is disabled */ -#define LL_USART_DIRECTION_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< Transmitter and Receiver are enabled */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_PARITY Parity Control - * @{ - */ -#define LL_USART_PARITY_NONE 0x00000000U /*!< Parity control disabled */ -#define LL_USART_PARITY_EVEN USART_CR1_PCE /*!< Parity control enabled and Even Parity is selected */ -#define LL_USART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< Parity control enabled and Odd Parity is selected */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_WAKEUP Wakeup - * @{ - */ -#define LL_USART_WAKEUP_IDLELINE 0x00000000U /*!< USART wake up from Mute mode on Idle Line */ -#define LL_USART_WAKEUP_ADDRESSMARK USART_CR1_WAKE /*!< USART wake up from Mute mode on Address Mark */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_DATAWIDTH Datawidth - * @{ - */ -#define LL_USART_DATAWIDTH_8B 0x00000000U /*!< 8 bits word length : Start bit, 8 data bits, n stop bits */ -#define LL_USART_DATAWIDTH_9B USART_CR1_M /*!< 9 bits word length : Start bit, 9 data bits, n stop bits */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_OVERSAMPLING Oversampling - * @{ - */ -#define LL_USART_OVERSAMPLING_16 0x00000000U /*!< Oversampling by 16 */ -#define LL_USART_OVERSAMPLING_8 USART_CR1_OVER8 /*!< Oversampling by 8 */ -/** - * @} - */ - -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup USART_LL_EC_CLOCK Clock Signal - * @{ - */ - -#define LL_USART_CLOCK_DISABLE 0x00000000U /*!< Clock signal not provided */ -#define LL_USART_CLOCK_ENABLE USART_CR2_CLKEN /*!< Clock signal provided */ -/** - * @} - */ -#endif /*USE_FULL_LL_DRIVER*/ - -/** @defgroup USART_LL_EC_LASTCLKPULSE Last Clock Pulse - * @{ - */ -#define LL_USART_LASTCLKPULSE_NO_OUTPUT 0x00000000U /*!< The clock pulse of the last data bit is not output to the SCLK pin */ -#define LL_USART_LASTCLKPULSE_OUTPUT USART_CR2_LBCL /*!< The clock pulse of the last data bit is output to the SCLK pin */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_PHASE Clock Phase - * @{ - */ -#define LL_USART_PHASE_1EDGE 0x00000000U /*!< The first clock transition is the first data capture edge */ -#define LL_USART_PHASE_2EDGE USART_CR2_CPHA /*!< The second clock transition is the first data capture edge */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_POLARITY Clock Polarity - * @{ - */ -#define LL_USART_POLARITY_LOW 0x00000000U /*!< Steady low value on SCLK pin outside transmission window*/ -#define LL_USART_POLARITY_HIGH USART_CR2_CPOL /*!< Steady high value on SCLK pin outside transmission window */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_STOPBITS Stop Bits - * @{ - */ -#define LL_USART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< 0.5 stop bit */ -#define LL_USART_STOPBITS_1 0x00000000U /*!< 1 stop bit */ -#define LL_USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< 1.5 stop bits */ -#define LL_USART_STOPBITS_2 USART_CR2_STOP_1 /*!< 2 stop bits */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_HWCONTROL Hardware Control - * @{ - */ -#define LL_USART_HWCONTROL_NONE 0x00000000U /*!< CTS and RTS hardware flow control disabled */ -#define LL_USART_HWCONTROL_RTS USART_CR3_RTSE /*!< RTS output enabled, data is only requested when there is space in the receive buffer */ -#define LL_USART_HWCONTROL_CTS USART_CR3_CTSE /*!< CTS mode enabled, data is only transmitted when the nCTS input is asserted (tied to 0) */ -#define LL_USART_HWCONTROL_RTS_CTS (USART_CR3_RTSE | USART_CR3_CTSE) /*!< CTS and RTS hardware flow control enabled */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_IRDA_POWER IrDA Power - * @{ - */ -#define LL_USART_IRDA_POWER_NORMAL 0x00000000U /*!< IrDA normal power mode */ -#define LL_USART_IRDA_POWER_LOW USART_CR3_IRLP /*!< IrDA low power mode */ -/** - * @} - */ - -/** @defgroup USART_LL_EC_LINBREAK_DETECT LIN Break Detection Length - * @{ - */ -#define LL_USART_LINBREAK_DETECT_10B 0x00000000U /*!< 10-bit break detection method selected */ -#define LL_USART_LINBREAK_DETECT_11B USART_CR2_LBDL /*!< 11-bit break detection method selected */ -/** - * @} - */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/** @defgroup USART_LL_Exported_Macros USART Exported Macros - * @{ - */ - -/** @defgroup USART_LL_EM_WRITE_READ Common Write and read registers Macros - * @{ - */ - -/** - * @brief Write a value in USART register - * @param __INSTANCE__ USART Instance - * @param __REG__ Register to be written - * @param __VALUE__ Value to be written in the register - * @retval None - */ -#define LL_USART_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) - -/** - * @brief Read a value in USART register - * @param __INSTANCE__ USART Instance - * @param __REG__ Register to be read - * @retval Register value - */ -#define LL_USART_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) -/** - * @} - */ - -/** @defgroup USART_LL_EM_Exported_Macros_Helper Exported_Macros_Helper - * @{ - */ - -/** - * @brief Compute USARTDIV value according to Peripheral Clock and - * expected Baud Rate in 8 bits sampling mode (32 bits value of USARTDIV is returned) - * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance - * @param __BAUDRATE__ Baud rate value to achieve - * @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case - */ -#define __LL_USART_DIV_SAMPLING8_100(__PERIPHCLK__, __BAUDRATE__) ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(2*((uint64_t)(__BAUDRATE__))))) -#define __LL_USART_DIVMANT_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__))/100) -#define __LL_USART_DIVFRAQ_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 8)\ - + 50) / 100) -/* UART BRR = mantissa + overflow + fraction - = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07) */ -#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \ - ((__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0xF8) << 1)) + \ - (__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0x07)) - -/** - * @brief Compute USARTDIV value according to Peripheral Clock and - * expected Baud Rate in 16 bits sampling mode (32 bits value of USARTDIV is returned) - * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance - * @param __BAUDRATE__ Baud rate value to achieve - * @retval USARTDIV value to be used for BRR register filling in OverSampling_16 case - */ -#define __LL_USART_DIV_SAMPLING16_100(__PERIPHCLK__, __BAUDRATE__) ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(4*((uint64_t)(__BAUDRATE__))))) -#define __LL_USART_DIVMANT_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__))/100) -#define __LL_USART_DIVFRAQ_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) ((((__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 16)\ - + 50) / 100) -/* USART BRR = mantissa + overflow + fraction - = (USART DIVMANT << 4) + (USART DIVFRAQ & 0xF0) + (USART DIVFRAQ & 0x0F) */ -#define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \ - (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0xF0)) + \ - (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0x0F)) - -/** - * @} - */ - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @defgroup USART_LL_Exported_Functions USART Exported Functions - * @{ - */ - -/** @defgroup USART_LL_EF_Configuration Configuration functions - * @{ - */ - -/** - * @brief USART Enable - * @rmtoll CR1 UE LL_USART_Enable - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR1, USART_CR1_UE); -} - -/** - * @brief USART Disable (all USART prescalers and outputs are disabled) - * @note When USART is disabled, USART prescalers and outputs are stopped immediately, - * and current operations are discarded. The configuration of the USART is kept, but all the status - * flags, in the USARTx_SR are set to their default values. - * @rmtoll CR1 UE LL_USART_Disable - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_Disable(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR1, USART_CR1_UE); -} - -/** - * @brief Indicate if USART is enabled - * @rmtoll CR1 UE LL_USART_IsEnabled - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)); -} - -/** - * @brief Receiver Enable (Receiver is enabled and begins searching for a start bit) - * @rmtoll CR1 RE LL_USART_EnableDirectionRx - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableDirectionRx(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RE); -} - -/** - * @brief Receiver Disable - * @rmtoll CR1 RE LL_USART_DisableDirectionRx - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableDirectionRx(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RE); -} - -/** - * @brief Transmitter Enable - * @rmtoll CR1 TE LL_USART_EnableDirectionTx - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableDirectionTx(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TE); -} - -/** - * @brief Transmitter Disable - * @rmtoll CR1 TE LL_USART_DisableDirectionTx - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableDirectionTx(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TE); -} - -/** - * @brief Configure simultaneously enabled/disabled states - * of Transmitter and Receiver - * @rmtoll CR1 RE LL_USART_SetTransferDirection\n - * CR1 TE LL_USART_SetTransferDirection - * @param USARTx USART Instance - * @param TransferDirection This parameter can be one of the following values: - * @arg @ref LL_USART_DIRECTION_NONE - * @arg @ref LL_USART_DIRECTION_RX - * @arg @ref LL_USART_DIRECTION_TX - * @arg @ref LL_USART_DIRECTION_TX_RX - * @retval None - */ -__STATIC_INLINE void LL_USART_SetTransferDirection(USART_TypeDef *USARTx, uint32_t TransferDirection) -{ - ATOMIC_MODIFY_REG(USARTx->CR1, USART_CR1_RE | USART_CR1_TE, TransferDirection); -} - -/** - * @brief Return enabled/disabled states of Transmitter and Receiver - * @rmtoll CR1 RE LL_USART_GetTransferDirection\n - * CR1 TE LL_USART_GetTransferDirection - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_DIRECTION_NONE - * @arg @ref LL_USART_DIRECTION_RX - * @arg @ref LL_USART_DIRECTION_TX - * @arg @ref LL_USART_DIRECTION_TX_RX - */ -__STATIC_INLINE uint32_t LL_USART_GetTransferDirection(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_RE | USART_CR1_TE)); -} - -/** - * @brief Configure Parity (enabled/disabled and parity mode if enabled). - * @note This function selects if hardware parity control (generation and detection) is enabled or disabled. - * When the parity control is enabled (Odd or Even), computed parity bit is inserted at the MSB position - * (9th or 8th bit depending on data width) and parity is checked on the received data. - * @rmtoll CR1 PS LL_USART_SetParity\n - * CR1 PCE LL_USART_SetParity - * @param USARTx USART Instance - * @param Parity This parameter can be one of the following values: - * @arg @ref LL_USART_PARITY_NONE - * @arg @ref LL_USART_PARITY_EVEN - * @arg @ref LL_USART_PARITY_ODD - * @retval None - */ -__STATIC_INLINE void LL_USART_SetParity(USART_TypeDef *USARTx, uint32_t Parity) -{ - MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE, Parity); -} - -/** - * @brief Return Parity configuration (enabled/disabled and parity mode if enabled) - * @rmtoll CR1 PS LL_USART_GetParity\n - * CR1 PCE LL_USART_GetParity - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_PARITY_NONE - * @arg @ref LL_USART_PARITY_EVEN - * @arg @ref LL_USART_PARITY_ODD - */ -__STATIC_INLINE uint32_t LL_USART_GetParity(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE)); -} - -/** - * @brief Set Receiver Wake Up method from Mute mode. - * @rmtoll CR1 WAKE LL_USART_SetWakeUpMethod - * @param USARTx USART Instance - * @param Method This parameter can be one of the following values: - * @arg @ref LL_USART_WAKEUP_IDLELINE - * @arg @ref LL_USART_WAKEUP_ADDRESSMARK - * @retval None - */ -__STATIC_INLINE void LL_USART_SetWakeUpMethod(USART_TypeDef *USARTx, uint32_t Method) -{ - MODIFY_REG(USARTx->CR1, USART_CR1_WAKE, Method); -} - -/** - * @brief Return Receiver Wake Up method from Mute mode - * @rmtoll CR1 WAKE LL_USART_GetWakeUpMethod - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_WAKEUP_IDLELINE - * @arg @ref LL_USART_WAKEUP_ADDRESSMARK - */ -__STATIC_INLINE uint32_t LL_USART_GetWakeUpMethod(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_WAKE)); -} - -/** - * @brief Set Word length (i.e. nb of data bits, excluding start and stop bits) - * @rmtoll CR1 M LL_USART_SetDataWidth - * @param USARTx USART Instance - * @param DataWidth This parameter can be one of the following values: - * @arg @ref LL_USART_DATAWIDTH_8B - * @arg @ref LL_USART_DATAWIDTH_9B - * @retval None - */ -__STATIC_INLINE void LL_USART_SetDataWidth(USART_TypeDef *USARTx, uint32_t DataWidth) -{ - MODIFY_REG(USARTx->CR1, USART_CR1_M, DataWidth); -} - -/** - * @brief Return Word length (i.e. nb of data bits, excluding start and stop bits) - * @rmtoll CR1 M LL_USART_GetDataWidth - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_DATAWIDTH_8B - * @arg @ref LL_USART_DATAWIDTH_9B - */ -__STATIC_INLINE uint32_t LL_USART_GetDataWidth(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_M)); -} - -/** - * @brief Set Oversampling to 8-bit or 16-bit mode - * @rmtoll CR1 OVER8 LL_USART_SetOverSampling - * @param USARTx USART Instance - * @param OverSampling This parameter can be one of the following values: - * @arg @ref LL_USART_OVERSAMPLING_16 - * @arg @ref LL_USART_OVERSAMPLING_8 - * @retval None - */ -__STATIC_INLINE void LL_USART_SetOverSampling(USART_TypeDef *USARTx, uint32_t OverSampling) -{ - MODIFY_REG(USARTx->CR1, USART_CR1_OVER8, OverSampling); -} - -/** - * @brief Return Oversampling mode - * @rmtoll CR1 OVER8 LL_USART_GetOverSampling - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_OVERSAMPLING_16 - * @arg @ref LL_USART_OVERSAMPLING_8 - */ -__STATIC_INLINE uint32_t LL_USART_GetOverSampling(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_OVER8)); -} - -/** - * @brief Configure if Clock pulse of the last data bit is output to the SCLK pin or not - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 LBCL LL_USART_SetLastClkPulseOutput - * @param USARTx USART Instance - * @param LastBitClockPulse This parameter can be one of the following values: - * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT - * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT - * @retval None - */ -__STATIC_INLINE void LL_USART_SetLastClkPulseOutput(USART_TypeDef *USARTx, uint32_t LastBitClockPulse) -{ - MODIFY_REG(USARTx->CR2, USART_CR2_LBCL, LastBitClockPulse); -} - -/** - * @brief Retrieve Clock pulse of the last data bit output configuration - * (Last bit Clock pulse output to the SCLK pin or not) - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 LBCL LL_USART_GetLastClkPulseOutput - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT - * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT - */ -__STATIC_INLINE uint32_t LL_USART_GetLastClkPulseOutput(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBCL)); -} - -/** - * @brief Select the phase of the clock output on the SCLK pin in synchronous mode - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 CPHA LL_USART_SetClockPhase - * @param USARTx USART Instance - * @param ClockPhase This parameter can be one of the following values: - * @arg @ref LL_USART_PHASE_1EDGE - * @arg @ref LL_USART_PHASE_2EDGE - * @retval None - */ -__STATIC_INLINE void LL_USART_SetClockPhase(USART_TypeDef *USARTx, uint32_t ClockPhase) -{ - MODIFY_REG(USARTx->CR2, USART_CR2_CPHA, ClockPhase); -} - -/** - * @brief Return phase of the clock output on the SCLK pin in synchronous mode - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 CPHA LL_USART_GetClockPhase - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_PHASE_1EDGE - * @arg @ref LL_USART_PHASE_2EDGE - */ -__STATIC_INLINE uint32_t LL_USART_GetClockPhase(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPHA)); -} - -/** - * @brief Select the polarity of the clock output on the SCLK pin in synchronous mode - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 CPOL LL_USART_SetClockPolarity - * @param USARTx USART Instance - * @param ClockPolarity This parameter can be one of the following values: - * @arg @ref LL_USART_POLARITY_LOW - * @arg @ref LL_USART_POLARITY_HIGH - * @retval None - */ -__STATIC_INLINE void LL_USART_SetClockPolarity(USART_TypeDef *USARTx, uint32_t ClockPolarity) -{ - MODIFY_REG(USARTx->CR2, USART_CR2_CPOL, ClockPolarity); -} - -/** - * @brief Return polarity of the clock output on the SCLK pin in synchronous mode - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 CPOL LL_USART_GetClockPolarity - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_POLARITY_LOW - * @arg @ref LL_USART_POLARITY_HIGH - */ -__STATIC_INLINE uint32_t LL_USART_GetClockPolarity(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPOL)); -} - -/** - * @brief Configure Clock signal format (Phase Polarity and choice about output of last bit clock pulse) - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @note Call of this function is equivalent to following function call sequence : - * - Clock Phase configuration using @ref LL_USART_SetClockPhase() function - * - Clock Polarity configuration using @ref LL_USART_SetClockPolarity() function - * - Output of Last bit Clock pulse configuration using @ref LL_USART_SetLastClkPulseOutput() function - * @rmtoll CR2 CPHA LL_USART_ConfigClock\n - * CR2 CPOL LL_USART_ConfigClock\n - * CR2 LBCL LL_USART_ConfigClock - * @param USARTx USART Instance - * @param Phase This parameter can be one of the following values: - * @arg @ref LL_USART_PHASE_1EDGE - * @arg @ref LL_USART_PHASE_2EDGE - * @param Polarity This parameter can be one of the following values: - * @arg @ref LL_USART_POLARITY_LOW - * @arg @ref LL_USART_POLARITY_HIGH - * @param LBCPOutput This parameter can be one of the following values: - * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT - * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigClock(USART_TypeDef *USARTx, uint32_t Phase, uint32_t Polarity, uint32_t LBCPOutput) -{ - MODIFY_REG(USARTx->CR2, USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL, Phase | Polarity | LBCPOutput); -} - -/** - * @brief Enable Clock output on SCLK pin - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 CLKEN LL_USART_EnableSCLKOutput - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableSCLKOutput(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR2, USART_CR2_CLKEN); -} - -/** - * @brief Disable Clock output on SCLK pin - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 CLKEN LL_USART_DisableSCLKOutput - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableSCLKOutput(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN); -} - -/** - * @brief Indicate if Clock output on SCLK pin is enabled - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @rmtoll CR2 CLKEN LL_USART_IsEnabledSCLKOutput - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledSCLKOutput(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR2, USART_CR2_CLKEN) == (USART_CR2_CLKEN)); -} - -/** - * @brief Set the length of the stop bits - * @rmtoll CR2 STOP LL_USART_SetStopBitsLength - * @param USARTx USART Instance - * @param StopBits This parameter can be one of the following values: - * @arg @ref LL_USART_STOPBITS_0_5 - * @arg @ref LL_USART_STOPBITS_1 - * @arg @ref LL_USART_STOPBITS_1_5 - * @arg @ref LL_USART_STOPBITS_2 - * @retval None - */ -__STATIC_INLINE void LL_USART_SetStopBitsLength(USART_TypeDef *USARTx, uint32_t StopBits) -{ - MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits); -} - -/** - * @brief Retrieve the length of the stop bits - * @rmtoll CR2 STOP LL_USART_GetStopBitsLength - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_STOPBITS_0_5 - * @arg @ref LL_USART_STOPBITS_1 - * @arg @ref LL_USART_STOPBITS_1_5 - * @arg @ref LL_USART_STOPBITS_2 - */ -__STATIC_INLINE uint32_t LL_USART_GetStopBitsLength(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_STOP)); -} - -/** - * @brief Configure Character frame format (Datawidth, Parity control, Stop Bits) - * @note Call of this function is equivalent to following function call sequence : - * - Data Width configuration using @ref LL_USART_SetDataWidth() function - * - Parity Control and mode configuration using @ref LL_USART_SetParity() function - * - Stop bits configuration using @ref LL_USART_SetStopBitsLength() function - * @rmtoll CR1 PS LL_USART_ConfigCharacter\n - * CR1 PCE LL_USART_ConfigCharacter\n - * CR1 M LL_USART_ConfigCharacter\n - * CR2 STOP LL_USART_ConfigCharacter - * @param USARTx USART Instance - * @param DataWidth This parameter can be one of the following values: - * @arg @ref LL_USART_DATAWIDTH_8B - * @arg @ref LL_USART_DATAWIDTH_9B - * @param Parity This parameter can be one of the following values: - * @arg @ref LL_USART_PARITY_NONE - * @arg @ref LL_USART_PARITY_EVEN - * @arg @ref LL_USART_PARITY_ODD - * @param StopBits This parameter can be one of the following values: - * @arg @ref LL_USART_STOPBITS_0_5 - * @arg @ref LL_USART_STOPBITS_1 - * @arg @ref LL_USART_STOPBITS_1_5 - * @arg @ref LL_USART_STOPBITS_2 - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigCharacter(USART_TypeDef *USARTx, uint32_t DataWidth, uint32_t Parity, - uint32_t StopBits) -{ - MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE | USART_CR1_M, Parity | DataWidth); - MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits); -} - -/** - * @brief Set Address of the USART node. - * @note This is used in multiprocessor communication during Mute mode or Stop mode, - * for wake up with address mark detection. - * @rmtoll CR2 ADD LL_USART_SetNodeAddress - * @param USARTx USART Instance - * @param NodeAddress 4 bit Address of the USART node. - * @retval None - */ -__STATIC_INLINE void LL_USART_SetNodeAddress(USART_TypeDef *USARTx, uint32_t NodeAddress) -{ - MODIFY_REG(USARTx->CR2, USART_CR2_ADD, (NodeAddress & USART_CR2_ADD)); -} - -/** - * @brief Return 4 bit Address of the USART node as set in ADD field of CR2. - * @note only 4bits (b3-b0) of returned value are relevant (b31-b4 are not relevant) - * @rmtoll CR2 ADD LL_USART_GetNodeAddress - * @param USARTx USART Instance - * @retval Address of the USART node (Value between Min_Data=0 and Max_Data=255) - */ -__STATIC_INLINE uint32_t LL_USART_GetNodeAddress(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADD)); -} - -/** - * @brief Enable RTS HW Flow Control - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 RTSE LL_USART_EnableRTSHWFlowCtrl - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableRTSHWFlowCtrl(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR3, USART_CR3_RTSE); -} - -/** - * @brief Disable RTS HW Flow Control - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 RTSE LL_USART_DisableRTSHWFlowCtrl - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableRTSHWFlowCtrl(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR3, USART_CR3_RTSE); -} - -/** - * @brief Enable CTS HW Flow Control - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 CTSE LL_USART_EnableCTSHWFlowCtrl - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableCTSHWFlowCtrl(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR3, USART_CR3_CTSE); -} - -/** - * @brief Disable CTS HW Flow Control - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 CTSE LL_USART_DisableCTSHWFlowCtrl - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableCTSHWFlowCtrl(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR3, USART_CR3_CTSE); -} - -/** - * @brief Configure HW Flow Control mode (both CTS and RTS) - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 RTSE LL_USART_SetHWFlowCtrl\n - * CR3 CTSE LL_USART_SetHWFlowCtrl - * @param USARTx USART Instance - * @param HardwareFlowControl This parameter can be one of the following values: - * @arg @ref LL_USART_HWCONTROL_NONE - * @arg @ref LL_USART_HWCONTROL_RTS - * @arg @ref LL_USART_HWCONTROL_CTS - * @arg @ref LL_USART_HWCONTROL_RTS_CTS - * @retval None - */ -__STATIC_INLINE void LL_USART_SetHWFlowCtrl(USART_TypeDef *USARTx, uint32_t HardwareFlowControl) -{ - MODIFY_REG(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE, HardwareFlowControl); -} - -/** - * @brief Return HW Flow Control configuration (both CTS and RTS) - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 RTSE LL_USART_GetHWFlowCtrl\n - * CR3 CTSE LL_USART_GetHWFlowCtrl - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_HWCONTROL_NONE - * @arg @ref LL_USART_HWCONTROL_RTS - * @arg @ref LL_USART_HWCONTROL_CTS - * @arg @ref LL_USART_HWCONTROL_RTS_CTS - */ -__STATIC_INLINE uint32_t LL_USART_GetHWFlowCtrl(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE)); -} - -/** - * @brief Enable One bit sampling method - * @rmtoll CR3 ONEBIT LL_USART_EnableOneBitSamp - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableOneBitSamp(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR3, USART_CR3_ONEBIT); -} - -/** - * @brief Disable One bit sampling method - * @rmtoll CR3 ONEBIT LL_USART_DisableOneBitSamp - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableOneBitSamp(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR3, USART_CR3_ONEBIT); -} - -/** - * @brief Indicate if One bit sampling method is enabled - * @rmtoll CR3 ONEBIT LL_USART_IsEnabledOneBitSamp - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledOneBitSamp(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_ONEBIT) == (USART_CR3_ONEBIT)); -} - -/** - * @brief Configure USART BRR register for achieving expected Baud Rate value. - * @note Compute and set USARTDIV value in BRR Register (full BRR content) - * according to used Peripheral Clock, Oversampling mode, and expected Baud Rate values - * @note Peripheral clock and Baud rate values provided as function parameters should be valid - * (Baud rate value != 0) - * @rmtoll BRR BRR LL_USART_SetBaudRate - * @param USARTx USART Instance - * @param PeriphClk Peripheral Clock - * @param OverSampling This parameter can be one of the following values: - * @arg @ref LL_USART_OVERSAMPLING_16 - * @arg @ref LL_USART_OVERSAMPLING_8 - * @param BaudRate Baud Rate - * @retval None - */ -__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling, - uint32_t BaudRate) -{ - if (OverSampling == LL_USART_OVERSAMPLING_8) - { - USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, BaudRate)); - } - else - { - USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate)); - } -} - -/** - * @brief Return current Baud Rate value, according to USARTDIV present in BRR register - * (full BRR content), and to used Peripheral Clock and Oversampling mode values - * @note In case of non-initialized or invalid value stored in BRR register, value 0 will be returned. - * @rmtoll BRR BRR LL_USART_GetBaudRate - * @param USARTx USART Instance - * @param PeriphClk Peripheral Clock - * @param OverSampling This parameter can be one of the following values: - * @arg @ref LL_USART_OVERSAMPLING_16 - * @arg @ref LL_USART_OVERSAMPLING_8 - * @retval Baud Rate - */ -__STATIC_INLINE uint32_t LL_USART_GetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling) -{ - uint32_t usartdiv = 0x0U; - uint32_t brrresult = 0x0U; - - usartdiv = USARTx->BRR; - - if (OverSampling == LL_USART_OVERSAMPLING_8) - { - if ((usartdiv & 0xFFF7U) != 0U) - { - usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ; - brrresult = (PeriphClk * 2U) / usartdiv; - } - } - else - { - if ((usartdiv & 0xFFFFU) != 0U) - { - brrresult = PeriphClk / usartdiv; - } - } - return (brrresult); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_Configuration_IRDA Configuration functions related to Irda feature - * @{ - */ - -/** - * @brief Enable IrDA mode - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @rmtoll CR3 IREN LL_USART_EnableIrda - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIrda(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR3, USART_CR3_IREN); -} - -/** - * @brief Disable IrDA mode - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @rmtoll CR3 IREN LL_USART_DisableIrda - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIrda(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR3, USART_CR3_IREN); -} - -/** - * @brief Indicate if IrDA mode is enabled - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @rmtoll CR3 IREN LL_USART_IsEnabledIrda - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIrda(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_IREN) == (USART_CR3_IREN)); -} - -/** - * @brief Configure IrDA Power Mode (Normal or Low Power) - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @rmtoll CR3 IRLP LL_USART_SetIrdaPowerMode - * @param USARTx USART Instance - * @param PowerMode This parameter can be one of the following values: - * @arg @ref LL_USART_IRDA_POWER_NORMAL - * @arg @ref LL_USART_IRDA_POWER_LOW - * @retval None - */ -__STATIC_INLINE void LL_USART_SetIrdaPowerMode(USART_TypeDef *USARTx, uint32_t PowerMode) -{ - MODIFY_REG(USARTx->CR3, USART_CR3_IRLP, PowerMode); -} - -/** - * @brief Retrieve IrDA Power Mode configuration (Normal or Low Power) - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @rmtoll CR3 IRLP LL_USART_GetIrdaPowerMode - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_IRDA_POWER_NORMAL - * @arg @ref LL_USART_PHASE_2EDGE - */ -__STATIC_INLINE uint32_t LL_USART_GetIrdaPowerMode(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_IRLP)); -} - -/** - * @brief Set Irda prescaler value, used for dividing the USART clock source - * to achieve the Irda Low Power frequency (8 bits value) - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @rmtoll GTPR PSC LL_USART_SetIrdaPrescaler - * @param USARTx USART Instance - * @param PrescalerValue Value between Min_Data=0x00 and Max_Data=0xFF - * @retval None - */ -__STATIC_INLINE void LL_USART_SetIrdaPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue) -{ - MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue); -} - -/** - * @brief Return Irda prescaler value, used for dividing the USART clock source - * to achieve the Irda Low Power frequency (8 bits value) - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @rmtoll GTPR PSC LL_USART_GetIrdaPrescaler - * @param USARTx USART Instance - * @retval Irda prescaler value (Value between Min_Data=0x00 and Max_Data=0xFF) - */ -__STATIC_INLINE uint32_t LL_USART_GetIrdaPrescaler(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC)); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_Configuration_Smartcard Configuration functions related to Smartcard feature - * @{ - */ - -/** - * @brief Enable Smartcard NACK transmission - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll CR3 NACK LL_USART_EnableSmartcardNACK - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableSmartcardNACK(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR3, USART_CR3_NACK); -} - -/** - * @brief Disable Smartcard NACK transmission - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll CR3 NACK LL_USART_DisableSmartcardNACK - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableSmartcardNACK(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR3, USART_CR3_NACK); -} - -/** - * @brief Indicate if Smartcard NACK transmission is enabled - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll CR3 NACK LL_USART_IsEnabledSmartcardNACK - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcardNACK(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_NACK) == (USART_CR3_NACK)); -} - -/** - * @brief Enable Smartcard mode - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll CR3 SCEN LL_USART_EnableSmartcard - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableSmartcard(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR3, USART_CR3_SCEN); -} - -/** - * @brief Disable Smartcard mode - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll CR3 SCEN LL_USART_DisableSmartcard - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableSmartcard(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR3, USART_CR3_SCEN); -} - -/** - * @brief Indicate if Smartcard mode is enabled - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll CR3 SCEN LL_USART_IsEnabledSmartcard - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcard(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_SCEN) == (USART_CR3_SCEN)); -} - -/** - * @brief Set Smartcard prescaler value, used for dividing the USART clock - * source to provide the SMARTCARD Clock (5 bits value) - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll GTPR PSC LL_USART_SetSmartcardPrescaler - * @param USARTx USART Instance - * @param PrescalerValue Value between Min_Data=0 and Max_Data=31 - * @retval None - */ -__STATIC_INLINE void LL_USART_SetSmartcardPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue) -{ - MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue); -} - -/** - * @brief Return Smartcard prescaler value, used for dividing the USART clock - * source to provide the SMARTCARD Clock (5 bits value) - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll GTPR PSC LL_USART_GetSmartcardPrescaler - * @param USARTx USART Instance - * @retval Smartcard prescaler value (Value between Min_Data=0 and Max_Data=31) - */ -__STATIC_INLINE uint32_t LL_USART_GetSmartcardPrescaler(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC)); -} - -/** - * @brief Set Smartcard Guard time value, expressed in nb of baud clocks periods - * (GT[7:0] bits : Guard time value) - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll GTPR GT LL_USART_SetSmartcardGuardTime - * @param USARTx USART Instance - * @param GuardTime Value between Min_Data=0x00 and Max_Data=0xFF - * @retval None - */ -__STATIC_INLINE void LL_USART_SetSmartcardGuardTime(USART_TypeDef *USARTx, uint32_t GuardTime) -{ - MODIFY_REG(USARTx->GTPR, USART_GTPR_GT, GuardTime << USART_POSITION_GTPR_GT); -} - -/** - * @brief Return Smartcard Guard time value, expressed in nb of baud clocks periods - * (GT[7:0] bits : Guard time value) - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @rmtoll GTPR GT LL_USART_GetSmartcardGuardTime - * @param USARTx USART Instance - * @retval Smartcard Guard time value (Value between Min_Data=0x00 and Max_Data=0xFF) - */ -__STATIC_INLINE uint32_t LL_USART_GetSmartcardGuardTime(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_GT) >> USART_POSITION_GTPR_GT); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_Configuration_HalfDuplex Configuration functions related to Half Duplex feature - * @{ - */ - -/** - * @brief Enable Single Wire Half-Duplex mode - * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not - * Half-Duplex mode is supported by the USARTx instance. - * @rmtoll CR3 HDSEL LL_USART_EnableHalfDuplex - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableHalfDuplex(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR3, USART_CR3_HDSEL); -} - -/** - * @brief Disable Single Wire Half-Duplex mode - * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not - * Half-Duplex mode is supported by the USARTx instance. - * @rmtoll CR3 HDSEL LL_USART_DisableHalfDuplex - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableHalfDuplex(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL); -} - -/** - * @brief Indicate if Single Wire Half-Duplex mode is enabled - * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not - * Half-Duplex mode is supported by the USARTx instance. - * @rmtoll CR3 HDSEL LL_USART_IsEnabledHalfDuplex - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledHalfDuplex(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_HDSEL) == (USART_CR3_HDSEL)); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_Configuration_LIN Configuration functions related to LIN feature - * @{ - */ - -/** - * @brief Set LIN Break Detection Length - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LBDL LL_USART_SetLINBrkDetectionLen - * @param USARTx USART Instance - * @param LINBDLength This parameter can be one of the following values: - * @arg @ref LL_USART_LINBREAK_DETECT_10B - * @arg @ref LL_USART_LINBREAK_DETECT_11B - * @retval None - */ -__STATIC_INLINE void LL_USART_SetLINBrkDetectionLen(USART_TypeDef *USARTx, uint32_t LINBDLength) -{ - MODIFY_REG(USARTx->CR2, USART_CR2_LBDL, LINBDLength); -} - -/** - * @brief Return LIN Break Detection Length - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LBDL LL_USART_GetLINBrkDetectionLen - * @param USARTx USART Instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_USART_LINBREAK_DETECT_10B - * @arg @ref LL_USART_LINBREAK_DETECT_11B - */ -__STATIC_INLINE uint32_t LL_USART_GetLINBrkDetectionLen(USART_TypeDef *USARTx) -{ - return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBDL)); -} - -/** - * @brief Enable LIN mode - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LINEN LL_USART_EnableLIN - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableLIN(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR2, USART_CR2_LINEN); -} - -/** - * @brief Disable LIN mode - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LINEN LL_USART_DisableLIN - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableLIN(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR2, USART_CR2_LINEN); -} - -/** - * @brief Indicate if LIN mode is enabled - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LINEN LL_USART_IsEnabledLIN - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledLIN(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR2, USART_CR2_LINEN) == (USART_CR2_LINEN)); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_AdvancedConfiguration Advanced Configurations services - * @{ - */ - -/** - * @brief Perform basic configuration of USART for enabling use in Asynchronous Mode (UART) - * @note In UART mode, the following bits must be kept cleared: - * - LINEN bit in the USART_CR2 register, - * - CLKEN bit in the USART_CR2 register, - * - SCEN bit in the USART_CR3 register, - * - IREN bit in the USART_CR3 register, - * - HDSEL bit in the USART_CR3 register. - * @note Call of this function is equivalent to following function call sequence : - * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function - * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function - * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function - * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function - * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function - * @note Other remaining configurations items related to Asynchronous Mode - * (as Baud Rate, Word length, Parity, ...) should be set using - * dedicated functions - * @rmtoll CR2 LINEN LL_USART_ConfigAsyncMode\n - * CR2 CLKEN LL_USART_ConfigAsyncMode\n - * CR3 SCEN LL_USART_ConfigAsyncMode\n - * CR3 IREN LL_USART_ConfigAsyncMode\n - * CR3 HDSEL LL_USART_ConfigAsyncMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx) -{ - /* In Asynchronous mode, the following bits must be kept cleared: - - LINEN, CLKEN bits in the USART_CR2 register, - - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/ - CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); - CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); -} - -/** - * @brief Perform basic configuration of USART for enabling use in Synchronous Mode - * @note In Synchronous mode, the following bits must be kept cleared: - * - LINEN bit in the USART_CR2 register, - * - SCEN bit in the USART_CR3 register, - * - IREN bit in the USART_CR3 register, - * - HDSEL bit in the USART_CR3 register. - * This function also sets the USART in Synchronous mode. - * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not - * Synchronous mode is supported by the USARTx instance. - * @note Call of this function is equivalent to following function call sequence : - * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function - * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function - * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function - * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function - * - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function - * @note Other remaining configurations items related to Synchronous Mode - * (as Baud Rate, Word length, Parity, Clock Polarity, ...) should be set using - * dedicated functions - * @rmtoll CR2 LINEN LL_USART_ConfigSyncMode\n - * CR2 CLKEN LL_USART_ConfigSyncMode\n - * CR3 SCEN LL_USART_ConfigSyncMode\n - * CR3 IREN LL_USART_ConfigSyncMode\n - * CR3 HDSEL LL_USART_ConfigSyncMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx) -{ - /* In Synchronous mode, the following bits must be kept cleared: - - LINEN bit in the USART_CR2 register, - - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/ - CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); - CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); - /* set the UART/USART in Synchronous mode */ - SET_BIT(USARTx->CR2, USART_CR2_CLKEN); -} - -/** - * @brief Perform basic configuration of USART for enabling use in LIN Mode - * @note In LIN mode, the following bits must be kept cleared: - * - STOP and CLKEN bits in the USART_CR2 register, - * - SCEN bit in the USART_CR3 register, - * - IREN bit in the USART_CR3 register, - * - HDSEL bit in the USART_CR3 register. - * This function also set the UART/USART in LIN mode. - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @note Call of this function is equivalent to following function call sequence : - * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function - * - Clear STOP in CR2 using @ref LL_USART_SetStopBitsLength() function - * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function - * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function - * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function - * - Set LINEN in CR2 using @ref LL_USART_EnableLIN() function - * @note Other remaining configurations items related to LIN Mode - * (as Baud Rate, Word length, LIN Break Detection Length, ...) should be set using - * dedicated functions - * @rmtoll CR2 CLKEN LL_USART_ConfigLINMode\n - * CR2 STOP LL_USART_ConfigLINMode\n - * CR2 LINEN LL_USART_ConfigLINMode\n - * CR3 IREN LL_USART_ConfigLINMode\n - * CR3 SCEN LL_USART_ConfigLINMode\n - * CR3 HDSEL LL_USART_ConfigLINMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx) -{ - /* In LIN mode, the following bits must be kept cleared: - - STOP and CLKEN bits in the USART_CR2 register, - - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/ - CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP)); - CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL)); - /* Set the UART/USART in LIN mode */ - SET_BIT(USARTx->CR2, USART_CR2_LINEN); -} - -/** - * @brief Perform basic configuration of USART for enabling use in Half Duplex Mode - * @note In Half Duplex mode, the following bits must be kept cleared: - * - LINEN bit in the USART_CR2 register, - * - CLKEN bit in the USART_CR2 register, - * - SCEN bit in the USART_CR3 register, - * - IREN bit in the USART_CR3 register, - * This function also sets the UART/USART in Half Duplex mode. - * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not - * Half-Duplex mode is supported by the USARTx instance. - * @note Call of this function is equivalent to following function call sequence : - * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function - * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function - * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function - * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function - * - Set HDSEL in CR3 using @ref LL_USART_EnableHalfDuplex() function - * @note Other remaining configurations items related to Half Duplex Mode - * (as Baud Rate, Word length, Parity, ...) should be set using - * dedicated functions - * @rmtoll CR2 LINEN LL_USART_ConfigHalfDuplexMode\n - * CR2 CLKEN LL_USART_ConfigHalfDuplexMode\n - * CR3 HDSEL LL_USART_ConfigHalfDuplexMode\n - * CR3 SCEN LL_USART_ConfigHalfDuplexMode\n - * CR3 IREN LL_USART_ConfigHalfDuplexMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx) -{ - /* In Half Duplex mode, the following bits must be kept cleared: - - LINEN and CLKEN bits in the USART_CR2 register, - - SCEN and IREN bits in the USART_CR3 register.*/ - CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); - CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN)); - /* set the UART/USART in Half Duplex mode */ - SET_BIT(USARTx->CR3, USART_CR3_HDSEL); -} - -/** - * @brief Perform basic configuration of USART for enabling use in Smartcard Mode - * @note In Smartcard mode, the following bits must be kept cleared: - * - LINEN bit in the USART_CR2 register, - * - IREN bit in the USART_CR3 register, - * - HDSEL bit in the USART_CR3 register. - * This function also configures Stop bits to 1.5 bits and - * sets the USART in Smartcard mode (SCEN bit). - * Clock Output is also enabled (CLKEN). - * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not - * Smartcard feature is supported by the USARTx instance. - * @note Call of this function is equivalent to following function call sequence : - * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function - * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function - * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function - * - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function - * - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function - * - Set SCEN in CR3 using @ref LL_USART_EnableSmartcard() function - * @note Other remaining configurations items related to Smartcard Mode - * (as Baud Rate, Word length, Parity, ...) should be set using - * dedicated functions - * @rmtoll CR2 LINEN LL_USART_ConfigSmartcardMode\n - * CR2 STOP LL_USART_ConfigSmartcardMode\n - * CR2 CLKEN LL_USART_ConfigSmartcardMode\n - * CR3 HDSEL LL_USART_ConfigSmartcardMode\n - * CR3 SCEN LL_USART_ConfigSmartcardMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx) -{ - /* In Smartcard mode, the following bits must be kept cleared: - - LINEN bit in the USART_CR2 register, - - IREN and HDSEL bits in the USART_CR3 register.*/ - CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); - CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL)); - /* Configure Stop bits to 1.5 bits */ - /* Synchronous mode is activated by default */ - SET_BIT(USARTx->CR2, (USART_CR2_STOP_0 | USART_CR2_STOP_1 | USART_CR2_CLKEN)); - /* set the UART/USART in Smartcard mode */ - SET_BIT(USARTx->CR3, USART_CR3_SCEN); -} - -/** - * @brief Perform basic configuration of USART for enabling use in Irda Mode - * @note In IRDA mode, the following bits must be kept cleared: - * - LINEN bit in the USART_CR2 register, - * - STOP and CLKEN bits in the USART_CR2 register, - * - SCEN bit in the USART_CR3 register, - * - HDSEL bit in the USART_CR3 register. - * This function also sets the UART/USART in IRDA mode (IREN bit). - * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not - * IrDA feature is supported by the USARTx instance. - * @note Call of this function is equivalent to following function call sequence : - * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function - * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function - * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function - * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function - * - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function - * - Set IREN in CR3 using @ref LL_USART_EnableIrda() function - * @note Other remaining configurations items related to Irda Mode - * (as Baud Rate, Word length, Power mode, ...) should be set using - * dedicated functions - * @rmtoll CR2 LINEN LL_USART_ConfigIrdaMode\n - * CR2 CLKEN LL_USART_ConfigIrdaMode\n - * CR2 STOP LL_USART_ConfigIrdaMode\n - * CR3 SCEN LL_USART_ConfigIrdaMode\n - * CR3 HDSEL LL_USART_ConfigIrdaMode\n - * CR3 IREN LL_USART_ConfigIrdaMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx) -{ - /* In IRDA mode, the following bits must be kept cleared: - - LINEN, STOP and CLKEN bits in the USART_CR2 register, - - SCEN and HDSEL bits in the USART_CR3 register.*/ - CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP)); - CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); - /* set the UART/USART in IRDA mode */ - SET_BIT(USARTx->CR3, USART_CR3_IREN); -} - -/** - * @brief Perform basic configuration of USART for enabling use in Multi processor Mode - * (several USARTs connected in a network, one of the USARTs can be the master, - * its TX output connected to the RX inputs of the other slaves USARTs). - * @note In MultiProcessor mode, the following bits must be kept cleared: - * - LINEN bit in the USART_CR2 register, - * - CLKEN bit in the USART_CR2 register, - * - SCEN bit in the USART_CR3 register, - * - IREN bit in the USART_CR3 register, - * - HDSEL bit in the USART_CR3 register. - * @note Call of this function is equivalent to following function call sequence : - * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function - * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function - * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function - * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function - * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function - * @note Other remaining configurations items related to Multi processor Mode - * (as Baud Rate, Wake Up Method, Node address, ...) should be set using - * dedicated functions - * @rmtoll CR2 LINEN LL_USART_ConfigMultiProcessMode\n - * CR2 CLKEN LL_USART_ConfigMultiProcessMode\n - * CR3 SCEN LL_USART_ConfigMultiProcessMode\n - * CR3 HDSEL LL_USART_ConfigMultiProcessMode\n - * CR3 IREN LL_USART_ConfigMultiProcessMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx) -{ - /* In Multi Processor mode, the following bits must be kept cleared: - - LINEN and CLKEN bits in the USART_CR2 register, - - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/ - CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); - CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_FLAG_Management FLAG_Management - * @{ - */ - -/** - * @brief Check if the USART Parity Error Flag is set or not - * @rmtoll SR PE LL_USART_IsActiveFlag_PE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_PE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_PE) == (USART_SR_PE)); -} - -/** - * @brief Check if the USART Framing Error Flag is set or not - * @rmtoll SR FE LL_USART_IsActiveFlag_FE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_FE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_FE) == (USART_SR_FE)); -} - -/** - * @brief Check if the USART Noise error detected Flag is set or not - * @rmtoll SR NF LL_USART_IsActiveFlag_NE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_NE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_NE) == (USART_SR_NE)); -} - -/** - * @brief Check if the USART OverRun Error Flag is set or not - * @rmtoll SR ORE LL_USART_IsActiveFlag_ORE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ORE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_ORE) == (USART_SR_ORE)); -} - -/** - * @brief Check if the USART IDLE line detected Flag is set or not - * @rmtoll SR IDLE LL_USART_IsActiveFlag_IDLE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_IDLE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_IDLE) == (USART_SR_IDLE)); -} - -/** - * @brief Check if the USART Read Data Register Not Empty Flag is set or not - * @rmtoll SR RXNE LL_USART_IsActiveFlag_RXNE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_RXNE) == (USART_SR_RXNE)); -} - -/** - * @brief Check if the USART Transmission Complete Flag is set or not - * @rmtoll SR TC LL_USART_IsActiveFlag_TC - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_TC) == (USART_SR_TC)); -} - -/** - * @brief Check if the USART Transmit Data Register Empty Flag is set or not - * @rmtoll SR TXE LL_USART_IsActiveFlag_TXE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_TXE) == (USART_SR_TXE)); -} - -/** - * @brief Check if the USART LIN Break Detection Flag is set or not - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll SR LBD LL_USART_IsActiveFlag_LBD - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_LBD(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_LBD) == (USART_SR_LBD)); -} - -/** - * @brief Check if the USART CTS Flag is set or not - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll SR CTS LL_USART_IsActiveFlag_nCTS - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_nCTS(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->SR, USART_SR_CTS) == (USART_SR_CTS)); -} - -/** - * @brief Check if the USART Send Break Flag is set or not - * @rmtoll CR1 SBK LL_USART_IsActiveFlag_SBK - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_SBK(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_SBK) == (USART_CR1_SBK)); -} - -/** - * @brief Check if the USART Receive Wake Up from mute mode Flag is set or not - * @rmtoll CR1 RWU LL_USART_IsActiveFlag_RWU - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_RWU) == (USART_CR1_RWU)); -} - -/** - * @brief Clear Parity Error Flag - * @note Clearing this flag is done by a read access to the USARTx_SR - * register followed by a read access to the USARTx_DR register. - * @note Please also consider that when clearing this flag, other flags as - * NE, FE, ORE, IDLE would also be cleared. - * @rmtoll SR PE LL_USART_ClearFlag_PE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_PE(USART_TypeDef *USARTx) -{ - __IO uint32_t tmpreg; - tmpreg = USARTx->SR; - (void) tmpreg; - tmpreg = USARTx->DR; - (void) tmpreg; -} - -/** - * @brief Clear Framing Error Flag - * @note Clearing this flag is done by a read access to the USARTx_SR - * register followed by a read access to the USARTx_DR register. - * @note Please also consider that when clearing this flag, other flags as - * PE, NE, ORE, IDLE would also be cleared. - * @rmtoll SR FE LL_USART_ClearFlag_FE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_FE(USART_TypeDef *USARTx) -{ - __IO uint32_t tmpreg; - tmpreg = USARTx->SR; - (void) tmpreg; - tmpreg = USARTx->DR; - (void) tmpreg; -} - -/** - * @brief Clear Noise detected Flag - * @note Clearing this flag is done by a read access to the USARTx_SR - * register followed by a read access to the USARTx_DR register. - * @note Please also consider that when clearing this flag, other flags as - * PE, FE, ORE, IDLE would also be cleared. - * @rmtoll SR NF LL_USART_ClearFlag_NE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_NE(USART_TypeDef *USARTx) -{ - __IO uint32_t tmpreg; - tmpreg = USARTx->SR; - (void) tmpreg; - tmpreg = USARTx->DR; - (void) tmpreg; -} - -/** - * @brief Clear OverRun Error Flag - * @note Clearing this flag is done by a read access to the USARTx_SR - * register followed by a read access to the USARTx_DR register. - * @note Please also consider that when clearing this flag, other flags as - * PE, NE, FE, IDLE would also be cleared. - * @rmtoll SR ORE LL_USART_ClearFlag_ORE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_ORE(USART_TypeDef *USARTx) -{ - __IO uint32_t tmpreg; - tmpreg = USARTx->SR; - (void) tmpreg; - tmpreg = USARTx->DR; - (void) tmpreg; -} - -/** - * @brief Clear IDLE line detected Flag - * @note Clearing this flag is done by a read access to the USARTx_SR - * register followed by a read access to the USARTx_DR register. - * @note Please also consider that when clearing this flag, other flags as - * PE, NE, FE, ORE would also be cleared. - * @rmtoll SR IDLE LL_USART_ClearFlag_IDLE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_IDLE(USART_TypeDef *USARTx) -{ - __IO uint32_t tmpreg; - tmpreg = USARTx->SR; - (void) tmpreg; - tmpreg = USARTx->DR; - (void) tmpreg; -} - -/** - * @brief Clear Transmission Complete Flag - * @rmtoll SR TC LL_USART_ClearFlag_TC - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_TC(USART_TypeDef *USARTx) -{ - WRITE_REG(USARTx->SR, ~(USART_SR_TC)); -} - -/** - * @brief Clear RX Not Empty Flag - * @rmtoll SR RXNE LL_USART_ClearFlag_RXNE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_RXNE(USART_TypeDef *USARTx) -{ - WRITE_REG(USARTx->SR, ~(USART_SR_RXNE)); -} - -/** - * @brief Clear LIN Break Detection Flag - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll SR LBD LL_USART_ClearFlag_LBD - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_LBD(USART_TypeDef *USARTx) -{ - WRITE_REG(USARTx->SR, ~(USART_SR_LBD)); -} - -/** - * @brief Clear CTS Interrupt Flag - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll SR CTS LL_USART_ClearFlag_nCTS - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_ClearFlag_nCTS(USART_TypeDef *USARTx) -{ - WRITE_REG(USARTx->SR, ~(USART_SR_CTS)); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_IT_Management IT_Management - * @{ - */ - -/** - * @brief Enable IDLE Interrupt - * @rmtoll CR1 IDLEIE LL_USART_EnableIT_IDLE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_IDLE(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_IDLEIE); -} - -/** - * @brief Enable RX Not Empty Interrupt - * @rmtoll CR1 RXNEIE LL_USART_EnableIT_RXNE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_RXNE(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RXNEIE); -} - -/** - * @brief Enable Transmission Complete Interrupt - * @rmtoll CR1 TCIE LL_USART_EnableIT_TC - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_TC(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TCIE); -} - -/** - * @brief Enable TX Empty Interrupt - * @rmtoll CR1 TXEIE LL_USART_EnableIT_TXE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_TXE(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TXEIE); -} - -/** - * @brief Enable Parity Error Interrupt - * @rmtoll CR1 PEIE LL_USART_EnableIT_PE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_PE(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_PEIE); -} - -/** - * @brief Enable LIN Break Detection Interrupt - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LBDIE LL_USART_EnableIT_LBD - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_LBD(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR2, USART_CR2_LBDIE); -} - -/** - * @brief Enable Error Interrupt - * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing - * error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register). - * 0: Interrupt is inhibited - * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register. - * @rmtoll CR3 EIE LL_USART_EnableIT_ERROR - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_ERROR(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_EIE); -} - -/** - * @brief Enable CTS Interrupt - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 CTSIE LL_USART_EnableIT_CTS - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_CTSIE); -} - -/** - * @brief Disable IDLE Interrupt - * @rmtoll CR1 IDLEIE LL_USART_DisableIT_IDLE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_IDLE(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_IDLEIE); -} - -/** - * @brief Disable RX Not Empty Interrupt - * @rmtoll CR1 RXNEIE LL_USART_DisableIT_RXNE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_RXNE(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE); -} - -/** - * @brief Disable Transmission Complete Interrupt - * @rmtoll CR1 TCIE LL_USART_DisableIT_TC - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_TC(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TCIE); -} - -/** - * @brief Disable TX Empty Interrupt - * @rmtoll CR1 TXEIE LL_USART_DisableIT_TXE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_TXE(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE); -} - -/** - * @brief Disable Parity Error Interrupt - * @rmtoll CR1 PEIE LL_USART_DisableIT_PE - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_PE(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_PEIE); -} - -/** - * @brief Disable LIN Break Detection Interrupt - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LBDIE LL_USART_DisableIT_LBD - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_LBD(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR2, USART_CR2_LBDIE); -} - -/** - * @brief Disable Error Interrupt - * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing - * error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register). - * 0: Interrupt is inhibited - * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register. - * @rmtoll CR3 EIE LL_USART_DisableIT_ERROR - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_ERROR(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_EIE); -} - -/** - * @brief Disable CTS Interrupt - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 CTSIE LL_USART_DisableIT_CTS - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE); -} - -/** - * @brief Check if the USART IDLE Interrupt source is enabled or disabled. - * @rmtoll CR1 IDLEIE LL_USART_IsEnabledIT_IDLE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_IDLE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE)); -} - -/** - * @brief Check if the USART RX Not Empty Interrupt is enabled or disabled. - * @rmtoll CR1 RXNEIE LL_USART_IsEnabledIT_RXNE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXNE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_RXNEIE) == (USART_CR1_RXNEIE)); -} - -/** - * @brief Check if the USART Transmission Complete Interrupt is enabled or disabled. - * @rmtoll CR1 TCIE LL_USART_IsEnabledIT_TC - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TC(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE)); -} - -/** - * @brief Check if the USART TX Empty Interrupt is enabled or disabled. - * @rmtoll CR1 TXEIE LL_USART_IsEnabledIT_TXE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_TXEIE) == (USART_CR1_TXEIE)); -} - -/** - * @brief Check if the USART Parity Error Interrupt is enabled or disabled. - * @rmtoll CR1 PEIE LL_USART_IsEnabledIT_PE - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_PE(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR1, USART_CR1_PEIE) == (USART_CR1_PEIE)); -} - -/** - * @brief Check if the USART LIN Break Detection Interrupt is enabled or disabled. - * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not - * LIN feature is supported by the USARTx instance. - * @rmtoll CR2 LBDIE LL_USART_IsEnabledIT_LBD - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_LBD(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR2, USART_CR2_LBDIE) == (USART_CR2_LBDIE)); -} - -/** - * @brief Check if the USART Error Interrupt is enabled or disabled. - * @rmtoll CR3 EIE LL_USART_IsEnabledIT_ERROR - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_ERROR(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_EIE) == (USART_CR3_EIE)); -} - -/** - * @brief Check if the USART CTS Interrupt is enabled or disabled. - * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not - * Hardware Flow control feature is supported by the USARTx instance. - * @rmtoll CR3 CTSIE LL_USART_IsEnabledIT_CTS - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_DMA_Management DMA_Management - * @{ - */ - -/** - * @brief Enable DMA Mode for reception - * @rmtoll CR3 DMAR LL_USART_EnableDMAReq_RX - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableDMAReq_RX(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAR); -} - -/** - * @brief Disable DMA Mode for reception - * @rmtoll CR3 DMAR LL_USART_DisableDMAReq_RX - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableDMAReq_RX(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAR); -} - -/** - * @brief Check if DMA Mode is enabled for reception - * @rmtoll CR3 DMAR LL_USART_IsEnabledDMAReq_RX - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_RX(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_DMAR) == (USART_CR3_DMAR)); -} - -/** - * @brief Enable DMA Mode for transmission - * @rmtoll CR3 DMAT LL_USART_EnableDMAReq_TX - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_EnableDMAReq_TX(USART_TypeDef *USARTx) -{ - ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAT); -} - -/** - * @brief Disable DMA Mode for transmission - * @rmtoll CR3 DMAT LL_USART_DisableDMAReq_TX - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_DisableDMAReq_TX(USART_TypeDef *USARTx) -{ - ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAT); -} - -/** - * @brief Check if DMA Mode is enabled for transmission - * @rmtoll CR3 DMAT LL_USART_IsEnabledDMAReq_TX - * @param USARTx USART Instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_TX(USART_TypeDef *USARTx) -{ - return (READ_BIT(USARTx->CR3, USART_CR3_DMAT) == (USART_CR3_DMAT)); -} - -/** - * @brief Get the data register address used for DMA transfer - * @rmtoll DR DR LL_USART_DMA_GetRegAddr - * @note Address of Data Register is valid for both Transmit and Receive transfers. - * @param USARTx USART Instance - * @retval Address of data register - */ -__STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx) -{ - /* return address of DR register */ - return ((uint32_t) &(USARTx->DR)); -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_Data_Management Data_Management - * @{ - */ - -/** - * @brief Read Receiver Data register (Receive Data value, 8 bits) - * @rmtoll DR DR LL_USART_ReceiveData8 - * @param USARTx USART Instance - * @retval Value between Min_Data=0x00 and Max_Data=0xFF - */ -__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx) -{ - return (uint8_t)(READ_BIT(USARTx->DR, USART_DR_DR)); -} - -/** - * @brief Read Receiver Data register (Receive Data value, 9 bits) - * @rmtoll DR DR LL_USART_ReceiveData9 - * @param USARTx USART Instance - * @retval Value between Min_Data=0x00 and Max_Data=0x1FF - */ -__STATIC_INLINE uint16_t LL_USART_ReceiveData9(USART_TypeDef *USARTx) -{ - return (uint16_t)(READ_BIT(USARTx->DR, USART_DR_DR)); -} - -/** - * @brief Write in Transmitter Data Register (Transmit Data value, 8 bits) - * @rmtoll DR DR LL_USART_TransmitData8 - * @param USARTx USART Instance - * @param Value between Min_Data=0x00 and Max_Data=0xFF - * @retval None - */ -__STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value) -{ - USARTx->DR = Value; -} - -/** - * @brief Write in Transmitter Data Register (Transmit Data value, 9 bits) - * @rmtoll DR DR LL_USART_TransmitData9 - * @param USARTx USART Instance - * @param Value between Min_Data=0x00 and Max_Data=0x1FF - * @retval None - */ -__STATIC_INLINE void LL_USART_TransmitData9(USART_TypeDef *USARTx, uint16_t Value) -{ - USARTx->DR = Value & 0x1FFU; -} - -/** - * @} - */ - -/** @defgroup USART_LL_EF_Execution Execution - * @{ - */ - -/** - * @brief Request Break sending - * @rmtoll CR1 SBK LL_USART_RequestBreakSending - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_RequestBreakSending(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR1, USART_CR1_SBK); -} - -/** - * @brief Put USART in Mute mode - * @rmtoll CR1 RWU LL_USART_RequestEnterMuteMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_RequestEnterMuteMode(USART_TypeDef *USARTx) -{ - SET_BIT(USARTx->CR1, USART_CR1_RWU); -} - -/** - * @brief Put USART in Active mode - * @rmtoll CR1 RWU LL_USART_RequestExitMuteMode - * @param USARTx USART Instance - * @retval None - */ -__STATIC_INLINE void LL_USART_RequestExitMuteMode(USART_TypeDef *USARTx) -{ - CLEAR_BIT(USARTx->CR1, USART_CR1_RWU); -} - -/** - * @} - */ - -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup USART_LL_EF_Init Initialization and de-initialization functions - * @{ - */ -ErrorStatus LL_USART_DeInit(USART_TypeDef *USARTx); -ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct); -void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct); -ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, LL_USART_ClockInitTypeDef *USART_ClockInitStruct); -void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct); -/** - * @} - */ -#endif /* USE_FULL_LL_DRIVER */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /* USART1 || USART2 || USART3 || USART6 || UART4 || UART5 || UART7 || UART8 || UART9 || UART10 */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_LL_USART_H */ - diff --git a/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c b/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c deleted file mode 100644 index 62d5d65..0000000 --- a/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c +++ /dev/null @@ -1,3915 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_spi.c - * @author MCD Application Team - * @brief SPI HAL module driver. - * This file provides firmware functions to manage the following - * functionalities of the Serial Peripheral Interface (SPI) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions - * + Peripheral State functions - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### How to use this driver ##### - ============================================================================== - [..] - The SPI HAL driver can be used as follows: - - (#) Declare a SPI_HandleTypeDef handle structure, for example: - SPI_HandleTypeDef hspi; - - (#)Initialize the SPI low level resources by implementing the HAL_SPI_MspInit() API: - (##) Enable the SPIx interface clock - (##) SPI pins configuration - (+++) Enable the clock for the SPI GPIOs - (+++) Configure these SPI pins as alternate function push-pull - (##) NVIC configuration if you need to use interrupt process - (+++) Configure the SPIx interrupt priority - (+++) Enable the NVIC SPI IRQ handle - (##) DMA Configuration if you need to use DMA process - (+++) Declare a DMA_HandleTypeDef handle structure for the transmit or receive Stream/Channel - (+++) Enable the DMAx clock - (+++) Configure the DMA handle parameters - (+++) Configure the DMA Tx or Rx Stream/Channel - (+++) Associate the initialized hdma_tx(or _rx) handle to the hspi DMA Tx or Rx handle - (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx or Rx Stream/Channel - - (#) Program the Mode, BidirectionalMode , Data size, Baudrate Prescaler, NSS - management, Clock polarity and phase, FirstBit and CRC configuration in the hspi Init structure. - - (#) Initialize the SPI registers by calling the HAL_SPI_Init() API: - (++) This API configures also the low level Hardware GPIO, CLOCK, CORTEX...etc) - by calling the customized HAL_SPI_MspInit() API. - [..] - Circular mode restriction: - (#) The DMA circular mode cannot be used when the SPI is configured in these modes: - (##) Master 2Lines RxOnly - (##) Master 1Line Rx - (#) The CRC feature is not managed when the DMA circular mode is enabled - (#) When the SPI DMA Pause/Stop features are used, we must use the following APIs - the HAL_SPI_DMAPause()/ HAL_SPI_DMAStop() only under the SPI callbacks - [..] - Master Receive mode restriction: - (#) In Master unidirectional receive-only mode (MSTR =1, BIDIMODE=0, RXONLY=1) or - bidirectional receive mode (MSTR=1, BIDIMODE=1, BIDIOE=0), to ensure that the SPI - does not initiate a new transfer the following procedure has to be respected: - (##) HAL_SPI_DeInit() - (##) HAL_SPI_Init() - [..] - Callback registration: - - (#) The compilation flag USE_HAL_SPI_REGISTER_CALLBACKS when set to 1U - allows the user to configure dynamically the driver callbacks. - Use Functions HAL_SPI_RegisterCallback() to register an interrupt callback. - - Function HAL_SPI_RegisterCallback() allows to register following callbacks: - (++) TxCpltCallback : SPI Tx Completed callback - (++) RxCpltCallback : SPI Rx Completed callback - (++) TxRxCpltCallback : SPI TxRx Completed callback - (++) TxHalfCpltCallback : SPI Tx Half Completed callback - (++) RxHalfCpltCallback : SPI Rx Half Completed callback - (++) TxRxHalfCpltCallback : SPI TxRx Half Completed callback - (++) ErrorCallback : SPI Error callback - (++) AbortCpltCallback : SPI Abort callback - (++) MspInitCallback : SPI Msp Init callback - (++) MspDeInitCallback : SPI Msp DeInit callback - This function takes as parameters the HAL peripheral handle, the Callback ID - and a pointer to the user callback function. - - - (#) Use function HAL_SPI_UnRegisterCallback to reset a callback to the default - weak function. - HAL_SPI_UnRegisterCallback takes as parameters the HAL peripheral handle, - and the Callback ID. - This function allows to reset following callbacks: - (++) TxCpltCallback : SPI Tx Completed callback - (++) RxCpltCallback : SPI Rx Completed callback - (++) TxRxCpltCallback : SPI TxRx Completed callback - (++) TxHalfCpltCallback : SPI Tx Half Completed callback - (++) RxHalfCpltCallback : SPI Rx Half Completed callback - (++) TxRxHalfCpltCallback : SPI TxRx Half Completed callback - (++) ErrorCallback : SPI Error callback - (++) AbortCpltCallback : SPI Abort callback - (++) MspInitCallback : SPI Msp Init callback - (++) MspDeInitCallback : SPI Msp DeInit callback - - [..] - By default, after the HAL_SPI_Init() and when the state is HAL_SPI_STATE_RESET - all callbacks are set to the corresponding weak functions: - examples HAL_SPI_MasterTxCpltCallback(), HAL_SPI_MasterRxCpltCallback(). - Exception done for MspInit and MspDeInit functions that are - reset to the legacy weak functions in the HAL_SPI_Init()/ HAL_SPI_DeInit() only when - these callbacks are null (not registered beforehand). - If MspInit or MspDeInit are not null, the HAL_SPI_Init()/ HAL_SPI_DeInit() - keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state. - - [..] - Callbacks can be registered/unregistered in HAL_SPI_STATE_READY state only. - Exception done MspInit/MspDeInit functions that can be registered/unregistered - in HAL_SPI_STATE_READY or HAL_SPI_STATE_RESET state, - thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. - Then, the user first registers the MspInit/MspDeInit user callbacks - using HAL_SPI_RegisterCallback() before calling HAL_SPI_DeInit() - or HAL_SPI_Init() function. - - [..] - When the compilation define USE_HAL_PPP_REGISTER_CALLBACKS is set to 0 or - not defined, the callback registering feature is not available - and weak (surcharged) callbacks are used. - - [..] - Using the HAL it is not possible to reach all supported SPI frequency with the different SPI Modes, - the following table resume the max SPI frequency reached with data size 8bits/16bits, - according to frequency of the APBx Peripheral Clock (fPCLK) used by the SPI instance. - - @endverbatim - - Additional table : - - DataSize = SPI_DATASIZE_8BIT: - +----------------------------------------------------------------------------------------------+ - | | | 2Lines Fullduplex | 2Lines RxOnly | 1Line | - | Process | Transfer mode |---------------------|----------------------|----------------------| - | | | Master | Slave | Master | Slave | Master | Slave | - |==============================================================================================| - | T | Polling | Fpclk/2 | Fpclk/2 | NA | NA | NA | NA | - | X |----------------|----------|----------|-----------|----------|-----------|----------| - | / | Interrupt | Fpclk/4 | Fpclk/8 | NA | NA | NA | NA | - | R |----------------|----------|----------|-----------|----------|-----------|----------| - | X | DMA | Fpclk/2 | Fpclk/2 | NA | NA | NA | NA | - |=========|================|==========|==========|===========|==========|===========|==========| - | | Polling | Fpclk/2 | Fpclk/2 | Fpclk/64 | Fpclk/2 | Fpclk/64 | Fpclk/2 | - | |----------------|----------|----------|-----------|----------|-----------|----------| - | R | Interrupt | Fpclk/8 | Fpclk/8 | Fpclk/64 | Fpclk/2 | Fpclk/64 | Fpclk/2 | - | X |----------------|----------|----------|-----------|----------|-----------|----------| - | | DMA | Fpclk/2 | Fpclk/2 | Fpclk/64 | Fpclk/2 | Fpclk/128 | Fpclk/2 | - |=========|================|==========|==========|===========|==========|===========|==========| - | | Polling | Fpclk/2 | Fpclk/4 | NA | NA | Fpclk/2 | Fpclk/64 | - | |----------------|----------|----------|-----------|----------|-----------|----------| - | T | Interrupt | Fpclk/2 | Fpclk/4 | NA | NA | Fpclk/2 | Fpclk/64 | - | X |----------------|----------|----------|-----------|----------|-----------|----------| - | | DMA | Fpclk/2 | Fpclk/2 | NA | NA | Fpclk/2 | Fpclk/128| - +----------------------------------------------------------------------------------------------+ - - DataSize = SPI_DATASIZE_16BIT: - +----------------------------------------------------------------------------------------------+ - | | | 2Lines Fullduplex | 2Lines RxOnly | 1Line | - | Process | Transfer mode |---------------------|----------------------|----------------------| - | | | Master | Slave | Master | Slave | Master | Slave | - |==============================================================================================| - | T | Polling | Fpclk/2 | Fpclk/2 | NA | NA | NA | NA | - | X |----------------|----------|----------|-----------|----------|-----------|----------| - | / | Interrupt | Fpclk/4 | Fpclk/4 | NA | NA | NA | NA | - | R |----------------|----------|----------|-----------|----------|-----------|----------| - | X | DMA | Fpclk/2 | Fpclk/2 | NA | NA | NA | NA | - |=========|================|==========|==========|===========|==========|===========|==========| - | | Polling | Fpclk/2 | Fpclk/2 | Fpclk/64 | Fpclk/2 | Fpclk/32 | Fpclk/2 | - | |----------------|----------|----------|-----------|----------|-----------|----------| - | R | Interrupt | Fpclk/4 | Fpclk/4 | Fpclk/64 | Fpclk/2 | Fpclk/64 | Fpclk/2 | - | X |----------------|----------|----------|-----------|----------|-----------|----------| - | | DMA | Fpclk/2 | Fpclk/2 | Fpclk/64 | Fpclk/2 | Fpclk/128 | Fpclk/2 | - |=========|================|==========|==========|===========|==========|===========|==========| - | | Polling | Fpclk/2 | Fpclk/2 | NA | NA | Fpclk/2 | Fpclk/32 | - | |----------------|----------|----------|-----------|----------|-----------|----------| - | T | Interrupt | Fpclk/2 | Fpclk/2 | NA | NA | Fpclk/2 | Fpclk/64 | - | X |----------------|----------|----------|-----------|----------|-----------|----------| - | | DMA | Fpclk/2 | Fpclk/2 | NA | NA | Fpclk/2 | Fpclk/128| - +----------------------------------------------------------------------------------------------+ - @note The max SPI frequency depend on SPI data size (8bits, 16bits), - SPI mode(2 Lines fullduplex, 2 lines RxOnly, 1 line TX/RX) and Process mode (Polling, IT, DMA). - @note - (#) TX/RX processes are HAL_SPI_TransmitReceive(), HAL_SPI_TransmitReceive_IT() and HAL_SPI_TransmitReceive_DMA() - (#) RX processes are HAL_SPI_Receive(), HAL_SPI_Receive_IT() and HAL_SPI_Receive_DMA() - (#) TX processes are HAL_SPI_Transmit(), HAL_SPI_Transmit_IT() and HAL_SPI_Transmit_DMA() - - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup STM32F4xx_HAL_Driver - * @{ - */ - -/** @defgroup SPI SPI - * @brief SPI HAL module driver - * @{ - */ -#ifdef HAL_SPI_MODULE_ENABLED - -/* Private typedef -----------------------------------------------------------*/ -/* Private defines -----------------------------------------------------------*/ -/** @defgroup SPI_Private_Constants SPI Private Constants - * @{ - */ -#define SPI_DEFAULT_TIMEOUT 100U -#define SPI_BSY_FLAG_WORKAROUND_TIMEOUT 1000U /*!< Timeout 1000 µs */ -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/** @defgroup SPI_Private_Functions SPI Private Functions - * @{ - */ -static void SPI_DMATransmitCplt(DMA_HandleTypeDef *hdma); -static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma); -static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma); -static void SPI_DMAHalfTransmitCplt(DMA_HandleTypeDef *hdma); -static void SPI_DMAHalfReceiveCplt(DMA_HandleTypeDef *hdma); -static void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma); -static void SPI_DMAError(DMA_HandleTypeDef *hdma); -static void SPI_DMAAbortOnError(DMA_HandleTypeDef *hdma); -static void SPI_DMATxAbortCallback(DMA_HandleTypeDef *hdma); -static void SPI_DMARxAbortCallback(DMA_HandleTypeDef *hdma); -static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, - uint32_t Timeout, uint32_t Tickstart); -static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi); -static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi); -static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi); -static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi); -static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi); -static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi); -static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi); -static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi); -#if (USE_SPI_CRC != 0U) -static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi); -static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi); -static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi); -static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi); -#endif /* USE_SPI_CRC */ -static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi); -static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi); -static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi); -static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi); -static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi); -static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart); -static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart); -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ -/** @defgroup SPI_Exported_Functions SPI Exported Functions - * @{ - */ - -/** @defgroup SPI_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and de-initialization functions ##### - =============================================================================== - [..] This subsection provides a set of functions allowing to initialize and - de-initialize the SPIx peripheral: - - (+) User must implement HAL_SPI_MspInit() function in which he configures - all related peripherals resources (CLOCK, GPIO, DMA, IT and NVIC ). - - (+) Call the function HAL_SPI_Init() to configure the selected device with - the selected configuration: - (++) Mode - (++) Direction - (++) Data Size - (++) Clock Polarity and Phase - (++) NSS Management - (++) BaudRate Prescaler - (++) FirstBit - (++) TIMode - (++) CRC Calculation - (++) CRC Polynomial if CRC enabled - - (+) Call the function HAL_SPI_DeInit() to restore the default configuration - of the selected SPIx peripheral. - -@endverbatim - * @{ - */ - -/** - * @brief Initialize the SPI according to the specified parameters - * in the SPI_InitTypeDef and initialize the associated handle. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) -{ - /* Check the SPI handle allocation */ - if (hspi == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); - assert_param(IS_SPI_MODE(hspi->Init.Mode)); - assert_param(IS_SPI_DIRECTION(hspi->Init.Direction)); - assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); - assert_param(IS_SPI_NSS(hspi->Init.NSS)); - assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); - assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); - assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); - if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) - { - assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); - assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); - - if (hspi->Init.Mode == SPI_MODE_MASTER) - { - assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); - } - else - { - /* Baudrate prescaler not use in Motoraola Slave mode. force to default value */ - hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; - } - } - else - { - assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); - - /* Force polarity and phase to TI protocaol requirements */ - hspi->Init.CLKPolarity = SPI_POLARITY_LOW; - hspi->Init.CLKPhase = SPI_PHASE_1EDGE; - } -#if (USE_SPI_CRC != 0U) - assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); - } -#else - hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; -#endif /* USE_SPI_CRC */ - - if (hspi->State == HAL_SPI_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - hspi->Lock = HAL_UNLOCKED; - -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - /* Init the SPI Callback settings */ - hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ - hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ - hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ - hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ - hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ - hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ - hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ - hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ - - if (hspi->MspInitCallback == NULL) - { - hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ - } - - /* Init the low level hardware : GPIO, CLOCK, NVIC... */ - hspi->MspInitCallback(hspi); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC... */ - HAL_SPI_MspInit(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - - hspi->State = HAL_SPI_STATE_BUSY; - - /* Disable the selected SPI peripheral */ - __HAL_SPI_DISABLE(hspi); - - /*----------------------- SPIx CR1 & CR2 Configuration ---------------------*/ - /* Configure : SPI Mode, Communication Mode, Data size, Clock polarity and phase, NSS management, - Communication speed, First bit and CRC calculation state */ - WRITE_REG(hspi->Instance->CR1, ((hspi->Init.Mode & (SPI_CR1_MSTR | SPI_CR1_SSI)) | - (hspi->Init.Direction & (SPI_CR1_RXONLY | SPI_CR1_BIDIMODE)) | - (hspi->Init.DataSize & SPI_CR1_DFF) | - (hspi->Init.CLKPolarity & SPI_CR1_CPOL) | - (hspi->Init.CLKPhase & SPI_CR1_CPHA) | - (hspi->Init.NSS & SPI_CR1_SSM) | - (hspi->Init.BaudRatePrescaler & SPI_CR1_BR_Msk) | - (hspi->Init.FirstBit & SPI_CR1_LSBFIRST) | - (hspi->Init.CRCCalculation & SPI_CR1_CRCEN))); - - /* Configure : NSS management, TI Mode */ - WRITE_REG(hspi->Instance->CR2, (((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE) | (hspi->Init.TIMode & SPI_CR2_FRF))); - -#if (USE_SPI_CRC != 0U) - /*---------------------------- SPIx CRCPOLY Configuration ------------------*/ - /* Configure : CRC Polynomial */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - WRITE_REG(hspi->Instance->CRCPR, (hspi->Init.CRCPolynomial & SPI_CRCPR_CRCPOLY_Msk)); - } -#endif /* USE_SPI_CRC */ - -#if defined(SPI_I2SCFGR_I2SMOD) - /* Activate the SPI mode (Make sure that I2SMOD bit in I2SCFGR register is reset) */ - CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); -#endif /* SPI_I2SCFGR_I2SMOD */ - - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->State = HAL_SPI_STATE_READY; - - return HAL_OK; -} - -/** - * @brief De-Initialize the SPI peripheral. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) -{ - /* Check the SPI handle allocation */ - if (hspi == NULL) - { - return HAL_ERROR; - } - - /* Check SPI Instance parameter */ - assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); - - hspi->State = HAL_SPI_STATE_BUSY; - - /* Disable the SPI Peripheral Clock */ - __HAL_SPI_DISABLE(hspi); - -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - if (hspi->MspDeInitCallback == NULL) - { - hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ - } - - /* DeInit the low level hardware: GPIO, CLOCK, NVIC... */ - hspi->MspDeInitCallback(hspi); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC... */ - HAL_SPI_MspDeInit(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->State = HAL_SPI_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(hspi); - - return HAL_OK; -} - -/** - * @brief Initialize the SPI MSP. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_MspInit should be implemented in the user file - */ -} - -/** - * @brief De-Initialize the SPI MSP. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_MspDeInit should be implemented in the user file - */ -} - -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) -/** - * @brief Register a User SPI Callback - * To be used instead of the weak predefined callback - * @param hspi Pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for the specified SPI. - * @param CallbackID ID of the callback to be registered - * @param pCallback pointer to the Callback function - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID, - pSPI_CallbackTypeDef pCallback) -{ - HAL_StatusTypeDef status = HAL_OK; - - if (pCallback == NULL) - { - /* Update the error code */ - hspi->ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK; - - return HAL_ERROR; - } - /* Process locked */ - __HAL_LOCK(hspi); - - if (HAL_SPI_STATE_READY == hspi->State) - { - switch (CallbackID) - { - case HAL_SPI_TX_COMPLETE_CB_ID : - hspi->TxCpltCallback = pCallback; - break; - - case HAL_SPI_RX_COMPLETE_CB_ID : - hspi->RxCpltCallback = pCallback; - break; - - case HAL_SPI_TX_RX_COMPLETE_CB_ID : - hspi->TxRxCpltCallback = pCallback; - break; - - case HAL_SPI_TX_HALF_COMPLETE_CB_ID : - hspi->TxHalfCpltCallback = pCallback; - break; - - case HAL_SPI_RX_HALF_COMPLETE_CB_ID : - hspi->RxHalfCpltCallback = pCallback; - break; - - case HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID : - hspi->TxRxHalfCpltCallback = pCallback; - break; - - case HAL_SPI_ERROR_CB_ID : - hspi->ErrorCallback = pCallback; - break; - - case HAL_SPI_ABORT_CB_ID : - hspi->AbortCpltCallback = pCallback; - break; - - case HAL_SPI_MSPINIT_CB_ID : - hspi->MspInitCallback = pCallback; - break; - - case HAL_SPI_MSPDEINIT_CB_ID : - hspi->MspDeInitCallback = pCallback; - break; - - default : - /* Update the error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (HAL_SPI_STATE_RESET == hspi->State) - { - switch (CallbackID) - { - case HAL_SPI_MSPINIT_CB_ID : - hspi->MspInitCallback = pCallback; - break; - - case HAL_SPI_MSPDEINIT_CB_ID : - hspi->MspDeInitCallback = pCallback; - break; - - default : - /* Update the error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Update the error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); - - /* Return error status */ - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(hspi); - return status; -} - -/** - * @brief Unregister an SPI Callback - * SPI callback is redirected to the weak predefined callback - * @param hspi Pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for the specified SPI. - * @param CallbackID ID of the callback to be unregistered - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Process locked */ - __HAL_LOCK(hspi); - - if (HAL_SPI_STATE_READY == hspi->State) - { - switch (CallbackID) - { - case HAL_SPI_TX_COMPLETE_CB_ID : - hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ - break; - - case HAL_SPI_RX_COMPLETE_CB_ID : - hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ - break; - - case HAL_SPI_TX_RX_COMPLETE_CB_ID : - hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ - break; - - case HAL_SPI_TX_HALF_COMPLETE_CB_ID : - hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ - break; - - case HAL_SPI_RX_HALF_COMPLETE_CB_ID : - hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ - break; - - case HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID : - hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ - break; - - case HAL_SPI_ERROR_CB_ID : - hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ - break; - - case HAL_SPI_ABORT_CB_ID : - hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ - break; - - case HAL_SPI_MSPINIT_CB_ID : - hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ - break; - - case HAL_SPI_MSPDEINIT_CB_ID : - hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ - break; - - default : - /* Update the error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (HAL_SPI_STATE_RESET == hspi->State) - { - switch (CallbackID) - { - case HAL_SPI_MSPINIT_CB_ID : - hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ - break; - - case HAL_SPI_MSPDEINIT_CB_ID : - hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ - break; - - default : - /* Update the error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Update the error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); - - /* Return error status */ - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(hspi); - return status; -} -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -/** - * @} - */ - -/** @defgroup SPI_Exported_Functions_Group2 IO operation functions - * @brief Data transfers functions - * -@verbatim - ============================================================================== - ##### IO operation functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to manage the SPI - data transfers. - - [..] The SPI supports master and slave mode : - - (#) There are two modes of transfer: - (++) Blocking mode: The communication is performed in polling mode. - The HAL status of all data processing is returned by the same function - after finishing transfer. - (++) No-Blocking mode: The communication is performed using Interrupts - or DMA, These APIs return the HAL status. - The end of the data processing will be indicated through the - dedicated SPI IRQ when using Interrupt mode or the DMA IRQ when - using DMA mode. - The HAL_SPI_TxCpltCallback(), HAL_SPI_RxCpltCallback() and HAL_SPI_TxRxCpltCallback() user callbacks - will be executed respectively at the end of the transmit or Receive process - The HAL_SPI_ErrorCallback()user callback will be executed when a communication error is detected - - (#) APIs provided for these 2 transfer modes (Blocking mode or Non blocking mode using either Interrupt or DMA) - exist for 1Line (simplex) and 2Lines (full duplex) modes. - -@endverbatim - * @{ - */ - -/** - * @brief Transmit an amount of data in blocking mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pData pointer to data buffer - * @param Size amount of data to be sent - * @param Timeout Timeout duration - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) -{ - uint32_t tickstart; - HAL_StatusTypeDef errorcode = HAL_OK; - uint16_t initial_TxXferCount; - - /* Check Direction parameter */ - assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); - - /* Process Locked */ - __HAL_LOCK(hspi); - - /* Init tickstart for timeout management*/ - tickstart = HAL_GetTick(); - initial_TxXferCount = Size; - - if (hspi->State != HAL_SPI_STATE_READY) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Set the transaction information */ - hspi->State = HAL_SPI_STATE_BUSY_TX; - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pTxBuffPtr = (uint8_t *)pData; - hspi->TxXferSize = Size; - hspi->TxXferCount = Size; - - /*Init field not used in handle to zero */ - hspi->pRxBuffPtr = (uint8_t *)NULL; - hspi->RxXferSize = 0U; - hspi->RxXferCount = 0U; - hspi->TxISR = NULL; - hspi->RxISR = NULL; - - /* Configure communication direction : 1Line */ - if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - { - /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ - __HAL_SPI_DISABLE(hspi); - SPI_1LINE_TX(hspi); - } - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - - /* Transmit data in 16 Bit mode */ - if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) - { - if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - { - hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint16_t); - hspi->TxXferCount--; - } - /* Transmit data in 16 Bit mode */ - while (hspi->TxXferCount > 0U) - { - /* Wait until TXE flag is set to send data */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) - { - hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint16_t); - hspi->TxXferCount--; - } - else - { - /* Timeout management */ - if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - { - errorcode = HAL_TIMEOUT; - goto error; - } - } - } - } - /* Transmit data in 8 Bit mode */ - else - { - if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - { - *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint8_t); - hspi->TxXferCount--; - } - while (hspi->TxXferCount > 0U) - { - /* Wait until TXE flag is set to send data */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) - { - *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint8_t); - hspi->TxXferCount--; - } - else - { - /* Timeout management */ - if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - { - errorcode = HAL_TIMEOUT; - goto error; - } - } - } - } -#if (USE_SPI_CRC != 0U) - /* Enable CRC Transmission */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - } -#endif /* USE_SPI_CRC */ - - /* Check the end of the transaction */ - if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) - { - hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - } - - /* Clear overrun flag in 2 Lines communication mode because received is not read */ - if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - { - __HAL_SPI_CLEAR_OVRFLAG(hspi); - } - - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - { - errorcode = HAL_ERROR; - } - -error: - hspi->State = HAL_SPI_STATE_READY; - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Receive an amount of data in blocking mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pData pointer to data buffer - * @param Size amount of data to be received - * @param Timeout Timeout duration - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) -{ -#if (USE_SPI_CRC != 0U) - __IO uint32_t tmpreg = 0U; -#endif /* USE_SPI_CRC */ - uint32_t tickstart; - HAL_StatusTypeDef errorcode = HAL_OK; - - if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES)) - { - hspi->State = HAL_SPI_STATE_BUSY_RX; - /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ - return HAL_SPI_TransmitReceive(hspi, pData, pData, Size, Timeout); - } - - /* Process Locked */ - __HAL_LOCK(hspi); - - /* Init tickstart for timeout management*/ - tickstart = HAL_GetTick(); - - if (hspi->State != HAL_SPI_STATE_READY) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Set the transaction information */ - hspi->State = HAL_SPI_STATE_BUSY_RX; - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pRxBuffPtr = (uint8_t *)pData; - hspi->RxXferSize = Size; - hspi->RxXferCount = Size; - - /*Init field not used in handle to zero */ - hspi->pTxBuffPtr = (uint8_t *)NULL; - hspi->TxXferSize = 0U; - hspi->TxXferCount = 0U; - hspi->RxISR = NULL; - hspi->TxISR = NULL; - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - /* this is done to handle the CRCNEXT before the latest data */ - hspi->RxXferCount--; - } -#endif /* USE_SPI_CRC */ - - /* Configure communication direction: 1Line */ - if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - { - /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ - __HAL_SPI_DISABLE(hspi); - SPI_1LINE_RX(hspi); - } - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - - /* Receive data in 8 Bit mode */ - if (hspi->Init.DataSize == SPI_DATASIZE_8BIT) - { - /* Transfer loop */ - while (hspi->RxXferCount > 0U) - { - /* Check the RXNE flag */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) - { - /* read the received data */ - (* (uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; - hspi->pRxBuffPtr += sizeof(uint8_t); - hspi->RxXferCount--; - } - else - { - /* Timeout management */ - if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - { - errorcode = HAL_TIMEOUT; - goto error; - } - } - } - } - else - { - /* Transfer loop */ - while (hspi->RxXferCount > 0U) - { - /* Check the RXNE flag */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) - { - *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; - hspi->pRxBuffPtr += sizeof(uint16_t); - hspi->RxXferCount--; - } - else - { - /* Timeout management */ - if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - { - errorcode = HAL_TIMEOUT; - goto error; - } - } - } - } - -#if (USE_SPI_CRC != 0U) - /* Handle the CRC Transmission */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* freeze the CRC before the latest data */ - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - - /* Read the latest data */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) - { - /* the latest data has not been received */ - errorcode = HAL_TIMEOUT; - goto error; - } - - /* Receive last data in 16 Bit mode */ - if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) - { - *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; - } - /* Receive last data in 8 Bit mode */ - else - { - (*(uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; - } - - /* Wait the CRC data */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - errorcode = HAL_TIMEOUT; - goto error; - } - - /* Read CRC to Flush DR and RXNE flag */ - tmpreg = READ_REG(hspi->Instance->DR); - /* To avoid GCC warning */ - UNUSED(tmpreg); - } -#endif /* USE_SPI_CRC */ - - /* Check the end of the transaction */ - if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK) - { - hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - } - -#if (USE_SPI_CRC != 0U) - /* Check if CRC error occurred */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - __HAL_SPI_CLEAR_CRCERRFLAG(hspi); - } -#endif /* USE_SPI_CRC */ - - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - { - errorcode = HAL_ERROR; - } - -error : - hspi->State = HAL_SPI_STATE_READY; - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Transmit and Receive an amount of data in blocking mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pTxData pointer to transmission data buffer - * @param pRxData pointer to reception data buffer - * @param Size amount of data to be sent and received - * @param Timeout Timeout duration - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, - uint32_t Timeout) -{ - uint16_t initial_TxXferCount; - uint32_t tmp_mode; - HAL_SPI_StateTypeDef tmp_state; - uint32_t tickstart; -#if (USE_SPI_CRC != 0U) - __IO uint32_t tmpreg = 0U; -#endif /* USE_SPI_CRC */ - - /* Variable used to alternate Rx and Tx during transfer */ - uint32_t txallowed = 1U; - HAL_StatusTypeDef errorcode = HAL_OK; - - /* Check Direction parameter */ - assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); - - /* Process Locked */ - __HAL_LOCK(hspi); - - /* Init tickstart for timeout management*/ - tickstart = HAL_GetTick(); - - /* Init temporary variables */ - tmp_state = hspi->State; - tmp_mode = hspi->Init.Mode; - initial_TxXferCount = Size; - - if (!((tmp_state == HAL_SPI_STATE_READY) || \ - ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ - if (hspi->State != HAL_SPI_STATE_BUSY_RX) - { - hspi->State = HAL_SPI_STATE_BUSY_TX_RX; - } - - /* Set the transaction information */ - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pRxBuffPtr = (uint8_t *)pRxData; - hspi->RxXferCount = Size; - hspi->RxXferSize = Size; - hspi->pTxBuffPtr = (uint8_t *)pTxData; - hspi->TxXferCount = Size; - hspi->TxXferSize = Size; - - /*Init field not used in handle to zero */ - hspi->RxISR = NULL; - hspi->TxISR = NULL; - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - - /* Transmit and Receive data in 16 Bit mode */ - if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) - { - if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - { - hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint16_t); - hspi->TxXferCount--; - } - while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - { - /* Check TXE flag */ - if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) - { - hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint16_t); - hspi->TxXferCount--; - /* Next Data is a reception (Rx). Tx not allowed */ - txallowed = 0U; - -#if (USE_SPI_CRC != 0U) - /* Enable CRC Transmission */ - if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) - { - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - } -#endif /* USE_SPI_CRC */ - } - - /* Check RXNE flag */ - if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) - { - *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; - hspi->pRxBuffPtr += sizeof(uint16_t); - hspi->RxXferCount--; - /* Next Data is a Transmission (Tx). Tx is allowed */ - txallowed = 1U; - } - if (((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) - { - errorcode = HAL_TIMEOUT; - goto error; - } - } - } - /* Transmit and Receive data in 8 Bit mode */ - else - { - if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - { - *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint8_t); - hspi->TxXferCount--; - } - while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - { - /* Check TXE flag */ - if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) - { - *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); - hspi->pTxBuffPtr++; - hspi->TxXferCount--; - /* Next Data is a reception (Rx). Tx not allowed */ - txallowed = 0U; - -#if (USE_SPI_CRC != 0U) - /* Enable CRC Transmission */ - if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) - { - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - } -#endif /* USE_SPI_CRC */ - } - - /* Wait until RXNE flag is reset */ - if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) - { - (*(uint8_t *)hspi->pRxBuffPtr) = hspi->Instance->DR; - hspi->pRxBuffPtr++; - hspi->RxXferCount--; - /* Next Data is a Transmission (Tx). Tx is allowed */ - txallowed = 1U; - } - if ((((HAL_GetTick() - tickstart) >= Timeout) && ((Timeout != HAL_MAX_DELAY))) || (Timeout == 0U)) - { - errorcode = HAL_TIMEOUT; - goto error; - } - } - } - -#if (USE_SPI_CRC != 0U) - /* Read CRC from DR to close CRC calculation process */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* Wait until TXE flag */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) - { - /* Error on the CRC reception */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - errorcode = HAL_TIMEOUT; - goto error; - } - /* Read CRC */ - tmpreg = READ_REG(hspi->Instance->DR); - /* To avoid GCC warning */ - UNUSED(tmpreg); - } - - /* Check if CRC error occurred */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - /* Clear CRC Flag */ - __HAL_SPI_CLEAR_CRCERRFLAG(hspi); - - errorcode = HAL_ERROR; - } -#endif /* USE_SPI_CRC */ - - /* Check the end of the transaction */ - if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) - { - errorcode = HAL_ERROR; - hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - goto error; - } - - /* Clear overrun flag in 2 Lines communication mode because received is not read */ - if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - { - __HAL_SPI_CLEAR_OVRFLAG(hspi); - } - -error : - hspi->State = HAL_SPI_STATE_READY; - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Transmit an amount of data in non-blocking mode with Interrupt. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pData pointer to data buffer - * @param Size amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) -{ - HAL_StatusTypeDef errorcode = HAL_OK; - - /* Check Direction parameter */ - assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); - - /* Process Locked */ - __HAL_LOCK(hspi); - - if ((pData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - if (hspi->State != HAL_SPI_STATE_READY) - { - errorcode = HAL_BUSY; - goto error; - } - - /* Set the transaction information */ - hspi->State = HAL_SPI_STATE_BUSY_TX; - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pTxBuffPtr = (uint8_t *)pData; - hspi->TxXferSize = Size; - hspi->TxXferCount = Size; - - /* Init field not used in handle to zero */ - hspi->pRxBuffPtr = (uint8_t *)NULL; - hspi->RxXferSize = 0U; - hspi->RxXferCount = 0U; - hspi->RxISR = NULL; - - /* Set the function for IT treatment */ - if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) - { - hspi->TxISR = SPI_TxISR_16BIT; - } - else - { - hspi->TxISR = SPI_TxISR_8BIT; - } - - /* Configure communication direction : 1Line */ - if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - { - /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ - __HAL_SPI_DISABLE(hspi); - SPI_1LINE_TX(hspi); - } - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Enable TXE and ERR interrupt */ - __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); - - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - -error : - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Receive an amount of data in non-blocking mode with Interrupt. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pData pointer to data buffer - * @param Size amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) -{ - HAL_StatusTypeDef errorcode = HAL_OK; - - if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) - { - hspi->State = HAL_SPI_STATE_BUSY_RX; - /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ - return HAL_SPI_TransmitReceive_IT(hspi, pData, pData, Size); - } - - /* Process Locked */ - __HAL_LOCK(hspi); - - if (hspi->State != HAL_SPI_STATE_READY) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Set the transaction information */ - hspi->State = HAL_SPI_STATE_BUSY_RX; - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pRxBuffPtr = (uint8_t *)pData; - hspi->RxXferSize = Size; - hspi->RxXferCount = Size; - - /* Init field not used in handle to zero */ - hspi->pTxBuffPtr = (uint8_t *)NULL; - hspi->TxXferSize = 0U; - hspi->TxXferCount = 0U; - hspi->TxISR = NULL; - - /* Set the function for IT treatment */ - if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) - { - hspi->RxISR = SPI_RxISR_16BIT; - } - else - { - hspi->RxISR = SPI_RxISR_8BIT; - } - - /* Configure communication direction : 1Line */ - if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - { - /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ - __HAL_SPI_DISABLE(hspi); - SPI_1LINE_RX(hspi); - } - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Enable TXE and ERR interrupt */ - __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); - - /* Note : The SPI must be enabled after unlocking current process - to avoid the risk of SPI interrupt handle execution before current - process unlock */ - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - -error : - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Transmit and Receive an amount of data in non-blocking mode with Interrupt. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pTxData pointer to transmission data buffer - * @param pRxData pointer to reception data buffer - * @param Size amount of data to be sent and received - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size) -{ - uint32_t tmp_mode; - HAL_SPI_StateTypeDef tmp_state; - HAL_StatusTypeDef errorcode = HAL_OK; - - /* Check Direction parameter */ - assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); - - /* Process locked */ - __HAL_LOCK(hspi); - - /* Init temporary variables */ - tmp_state = hspi->State; - tmp_mode = hspi->Init.Mode; - - if (!((tmp_state == HAL_SPI_STATE_READY) || \ - ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ - if (hspi->State != HAL_SPI_STATE_BUSY_RX) - { - hspi->State = HAL_SPI_STATE_BUSY_TX_RX; - } - - /* Set the transaction information */ - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pTxBuffPtr = (uint8_t *)pTxData; - hspi->TxXferSize = Size; - hspi->TxXferCount = Size; - hspi->pRxBuffPtr = (uint8_t *)pRxData; - hspi->RxXferSize = Size; - hspi->RxXferCount = Size; - - /* Set the function for IT treatment */ - if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) - { - hspi->RxISR = SPI_2linesRxISR_16BIT; - hspi->TxISR = SPI_2linesTxISR_16BIT; - } - else - { - hspi->RxISR = SPI_2linesRxISR_8BIT; - hspi->TxISR = SPI_2linesTxISR_8BIT; - } - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Enable TXE, RXNE and ERR interrupt */ - __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - -error : - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Transmit an amount of data in non-blocking mode with DMA. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pData pointer to data buffer - * @param Size amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) -{ - HAL_StatusTypeDef errorcode = HAL_OK; - - /* Check tx dma handle */ - assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); - - /* Check Direction parameter */ - assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); - - /* Process Locked */ - __HAL_LOCK(hspi); - - if (hspi->State != HAL_SPI_STATE_READY) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Set the transaction information */ - hspi->State = HAL_SPI_STATE_BUSY_TX; - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pTxBuffPtr = (uint8_t *)pData; - hspi->TxXferSize = Size; - hspi->TxXferCount = Size; - - /* Init field not used in handle to zero */ - hspi->pRxBuffPtr = (uint8_t *)NULL; - hspi->TxISR = NULL; - hspi->RxISR = NULL; - hspi->RxXferSize = 0U; - hspi->RxXferCount = 0U; - - /* Configure communication direction : 1Line */ - if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - { - /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ - __HAL_SPI_DISABLE(hspi); - SPI_1LINE_TX(hspi); - } - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Set the SPI TxDMA Half transfer complete callback */ - hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; - - /* Set the SPI TxDMA transfer complete callback */ - hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; - - /* Set the DMA error callback */ - hspi->hdmatx->XferErrorCallback = SPI_DMAError; - - /* Set the DMA AbortCpltCallback */ - hspi->hdmatx->XferAbortCallback = NULL; - - /* Enable the Tx DMA Stream/Channel */ - if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->DR, - hspi->TxXferCount)) - { - /* Update SPI error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); - errorcode = HAL_ERROR; - - hspi->State = HAL_SPI_STATE_READY; - goto error; - } - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - - /* Enable the SPI Error Interrupt Bit */ - __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); - - /* Enable Tx DMA Request */ - SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); - -error : - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Receive an amount of data in non-blocking mode with DMA. - * @note In case of MASTER mode and SPI_DIRECTION_2LINES direction, hdmatx shall be defined. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pData pointer to data buffer - * @note When the CRC feature is enabled the pData Length must be Size + 1. - * @param Size amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) -{ - HAL_StatusTypeDef errorcode = HAL_OK; - - /* Check rx dma handle */ - assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); - - if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) - { - hspi->State = HAL_SPI_STATE_BUSY_RX; - - /* Check tx dma handle */ - assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); - - /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ - return HAL_SPI_TransmitReceive_DMA(hspi, pData, pData, Size); - } - - /* Process Locked */ - __HAL_LOCK(hspi); - - if (hspi->State != HAL_SPI_STATE_READY) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Set the transaction information */ - hspi->State = HAL_SPI_STATE_BUSY_RX; - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pRxBuffPtr = (uint8_t *)pData; - hspi->RxXferSize = Size; - hspi->RxXferCount = Size; - - /*Init field not used in handle to zero */ - hspi->RxISR = NULL; - hspi->TxISR = NULL; - hspi->TxXferSize = 0U; - hspi->TxXferCount = 0U; - - /* Configure communication direction : 1Line */ - if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - { - /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ - __HAL_SPI_DISABLE(hspi); - SPI_1LINE_RX(hspi); - } - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Set the SPI RxDMA Half transfer complete callback */ - hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; - - /* Set the SPI Rx DMA transfer complete callback */ - hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; - - /* Set the DMA error callback */ - hspi->hdmarx->XferErrorCallback = SPI_DMAError; - - /* Set the DMA AbortCpltCallback */ - hspi->hdmarx->XferAbortCallback = NULL; - - /* Enable the Rx DMA Stream/Channel */ - if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuffPtr, - hspi->RxXferCount)) - { - /* Update SPI error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); - errorcode = HAL_ERROR; - - hspi->State = HAL_SPI_STATE_READY; - goto error; - } - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - - /* Enable the SPI Error Interrupt Bit */ - __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); - - /* Enable Rx DMA Request */ - SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); - -error: - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Transmit and Receive an amount of data in non-blocking mode with DMA. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param pTxData pointer to transmission data buffer - * @param pRxData pointer to reception data buffer - * @note When the CRC feature is enabled the pRxData Length must be Size + 1 - * @param Size amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, - uint16_t Size) -{ - uint32_t tmp_mode; - HAL_SPI_StateTypeDef tmp_state; - HAL_StatusTypeDef errorcode = HAL_OK; - - /* Check rx & tx dma handles */ - assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); - assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); - - /* Check Direction parameter */ - assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); - - /* Process locked */ - __HAL_LOCK(hspi); - - /* Init temporary variables */ - tmp_state = hspi->State; - tmp_mode = hspi->Init.Mode; - - if (!((tmp_state == HAL_SPI_STATE_READY) || - ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) - { - errorcode = HAL_BUSY; - goto error; - } - - if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) - { - errorcode = HAL_ERROR; - goto error; - } - - /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ - if (hspi->State != HAL_SPI_STATE_BUSY_RX) - { - hspi->State = HAL_SPI_STATE_BUSY_TX_RX; - } - - /* Set the transaction information */ - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pTxBuffPtr = (uint8_t *)pTxData; - hspi->TxXferSize = Size; - hspi->TxXferCount = Size; - hspi->pRxBuffPtr = (uint8_t *)pRxData; - hspi->RxXferSize = Size; - hspi->RxXferCount = Size; - - /* Init field not used in handle to zero */ - hspi->RxISR = NULL; - hspi->TxISR = NULL; - -#if (USE_SPI_CRC != 0U) - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } -#endif /* USE_SPI_CRC */ - - /* Check if we are in Rx only or in Rx/Tx Mode and configure the DMA transfer complete callback */ - if (hspi->State == HAL_SPI_STATE_BUSY_RX) - { - /* Set the SPI Rx DMA Half transfer complete callback */ - hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; - hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; - } - else - { - /* Set the SPI Tx/Rx DMA Half transfer complete callback */ - hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; - hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; - } - - /* Set the DMA error callback */ - hspi->hdmarx->XferErrorCallback = SPI_DMAError; - - /* Set the DMA AbortCpltCallback */ - hspi->hdmarx->XferAbortCallback = NULL; - - /* Enable the Rx DMA Stream/Channel */ - if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuffPtr, - hspi->RxXferCount)) - { - /* Update SPI error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); - errorcode = HAL_ERROR; - - hspi->State = HAL_SPI_STATE_READY; - goto error; - } - - /* Enable Rx DMA Request */ - SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); - - /* Set the SPI Tx DMA transfer complete callback as NULL because the communication closing - is performed in DMA reception complete callback */ - hspi->hdmatx->XferHalfCpltCallback = NULL; - hspi->hdmatx->XferCpltCallback = NULL; - hspi->hdmatx->XferErrorCallback = NULL; - hspi->hdmatx->XferAbortCallback = NULL; - - /* Enable the Tx DMA Stream/Channel */ - if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->DR, - hspi->TxXferCount)) - { - /* Update SPI error code */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); - errorcode = HAL_ERROR; - - hspi->State = HAL_SPI_STATE_READY; - goto error; - } - - /* Check if the SPI is already enabled */ - if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - { - /* Enable SPI peripheral */ - __HAL_SPI_ENABLE(hspi); - } - /* Enable the SPI Error Interrupt Bit */ - __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); - - /* Enable Tx DMA Request */ - SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); - -error : - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - return errorcode; -} - -/** - * @brief Abort ongoing transfer (blocking mode). - * @param hspi SPI handle. - * @note This procedure could be used for aborting any ongoing transfer (Tx and Rx), - * started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable SPI Interrupts (depending of transfer direction) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) - * - Set handle State to READY - * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) -{ - HAL_StatusTypeDef errorcode; - __IO uint32_t count; - __IO uint32_t resetcount; - - /* Initialized local variable */ - errorcode = HAL_OK; - resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); - count = resetcount; - - /* Clear ERRIE interrupt to avoid error interrupts generation during Abort procedure */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); - - /* Disable TXEIE, RXNEIE and ERRIE(mode fault event, overrun error, TI frame error) interrupts */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) - { - hspi->TxISR = SPI_AbortTx_ISR; - /* Wait HAL_SPI_STATE_ABORT state */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - break; - } - count--; - } while (hspi->State != HAL_SPI_STATE_ABORT); - /* Reset Timeout Counter */ - count = resetcount; - } - - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) - { - hspi->RxISR = SPI_AbortRx_ISR; - /* Wait HAL_SPI_STATE_ABORT state */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - break; - } - count--; - } while (hspi->State != HAL_SPI_STATE_ABORT); - /* Reset Timeout Counter */ - count = resetcount; - } - - /* Disable the SPI DMA Tx request if enabled */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) - { - /* Abort the SPI DMA Tx Stream/Channel : use blocking DMA Abort API (no callback) */ - if (hspi->hdmatx != NULL) - { - /* Set the SPI DMA Abort callback : - will lead to call HAL_SPI_AbortCpltCallback() at end of DMA abort procedure */ - hspi->hdmatx->XferAbortCallback = NULL; - - /* Abort DMA Tx Handle linked to SPI Peripheral */ - if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) - { - hspi->ErrorCode = HAL_SPI_ERROR_ABORT; - } - - /* Disable Tx DMA Request */ - CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN)); - - /* Wait until TXE flag is set */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - break; - } - count--; - } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); - } - } - - /* Disable the SPI DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) - { - /* Abort the SPI DMA Rx Stream/Channel : use blocking DMA Abort API (no callback) */ - if (hspi->hdmarx != NULL) - { - /* Set the SPI DMA Abort callback : - will lead to call HAL_SPI_AbortCpltCallback() at end of DMA abort procedure */ - hspi->hdmarx->XferAbortCallback = NULL; - - /* Abort DMA Rx Handle linked to SPI Peripheral */ - if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) - { - hspi->ErrorCode = HAL_SPI_ERROR_ABORT; - } - - /* Disable peripheral */ - __HAL_SPI_DISABLE(hspi); - - /* Disable Rx DMA Request */ - CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXDMAEN)); - } - } - /* Reset Tx and Rx transfer counters */ - hspi->RxXferCount = 0U; - hspi->TxXferCount = 0U; - - /* Check error during Abort procedure */ - if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) - { - /* return HAL_Error in case of error during Abort procedure */ - errorcode = HAL_ERROR; - } - else - { - /* Reset errorCode */ - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - } - - /* Clear the Error flags in the SR register */ - __HAL_SPI_CLEAR_OVRFLAG(hspi); - __HAL_SPI_CLEAR_FREFLAG(hspi); - - /* Restore hspi->state to ready */ - hspi->State = HAL_SPI_STATE_READY; - - return errorcode; -} - -/** - * @brief Abort ongoing transfer (Interrupt mode). - * @param hspi SPI handle. - * @note This procedure could be used for aborting any ongoing transfer (Tx and Rx), - * started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable SPI Interrupts (depending of transfer direction) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) - * - Set handle State to READY - * - At abort completion, call user abort complete callback - * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be - * considered as completed only when user abort complete callback is executed (not when exiting function). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) -{ - HAL_StatusTypeDef errorcode; - uint32_t abortcplt ; - __IO uint32_t count; - __IO uint32_t resetcount; - - /* Initialized local variable */ - errorcode = HAL_OK; - abortcplt = 1U; - resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); - count = resetcount; - - /* Clear ERRIE interrupt to avoid error interrupts generation during Abort procedure */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); - - /* Change Rx and Tx Irq Handler to Disable TXEIE, RXNEIE and ERRIE interrupts */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) - { - hspi->TxISR = SPI_AbortTx_ISR; - /* Wait HAL_SPI_STATE_ABORT state */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - break; - } - count--; - } while (hspi->State != HAL_SPI_STATE_ABORT); - /* Reset Timeout Counter */ - count = resetcount; - } - - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) - { - hspi->RxISR = SPI_AbortRx_ISR; - /* Wait HAL_SPI_STATE_ABORT state */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - break; - } - count--; - } while (hspi->State != HAL_SPI_STATE_ABORT); - /* Reset Timeout Counter */ - count = resetcount; - } - - /* If DMA Tx and/or DMA Rx Handles are associated to SPI Handle, DMA Abort complete callbacks should be initialised - before any call to DMA Abort functions */ - /* DMA Tx Handle is valid */ - if (hspi->hdmatx != NULL) - { - /* Set DMA Abort Complete callback if UART DMA Tx request if enabled. - Otherwise, set it to NULL */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) - { - hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; - } - else - { - hspi->hdmatx->XferAbortCallback = NULL; - } - } - /* DMA Rx Handle is valid */ - if (hspi->hdmarx != NULL) - { - /* Set DMA Abort Complete callback if UART DMA Rx request if enabled. - Otherwise, set it to NULL */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) - { - hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; - } - else - { - hspi->hdmarx->XferAbortCallback = NULL; - } - } - - /* Disable the SPI DMA Tx request if enabled */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) - { - /* Abort the SPI DMA Tx Stream/Channel */ - if (hspi->hdmatx != NULL) - { - /* Abort DMA Tx Handle linked to SPI Peripheral */ - if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) - { - hspi->hdmatx->XferAbortCallback = NULL; - hspi->ErrorCode = HAL_SPI_ERROR_ABORT; - } - else - { - abortcplt = 0U; - } - } - } - /* Disable the SPI DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) - { - /* Abort the SPI DMA Rx Stream/Channel */ - if (hspi->hdmarx != NULL) - { - /* Abort DMA Rx Handle linked to SPI Peripheral */ - if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) - { - hspi->hdmarx->XferAbortCallback = NULL; - hspi->ErrorCode = HAL_SPI_ERROR_ABORT; - } - else - { - abortcplt = 0U; - } - } - } - - if (abortcplt == 1U) - { - /* Reset Tx and Rx transfer counters */ - hspi->RxXferCount = 0U; - hspi->TxXferCount = 0U; - - /* Check error during Abort procedure */ - if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) - { - /* return HAL_Error in case of error during Abort procedure */ - errorcode = HAL_ERROR; - } - else - { - /* Reset errorCode */ - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - } - - /* Clear the Error flags in the SR register */ - __HAL_SPI_CLEAR_OVRFLAG(hspi); - __HAL_SPI_CLEAR_FREFLAG(hspi); - - /* Restore hspi->State to Ready */ - hspi->State = HAL_SPI_STATE_READY; - - /* As no DMA to be aborted, call directly user Abort complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->AbortCpltCallback(hspi); -#else - HAL_SPI_AbortCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - - return errorcode; -} - -/** - * @brief Pause the DMA Transfer. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for the specified SPI module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) -{ - /* Process Locked */ - __HAL_LOCK(hspi); - - /* Disable the SPI DMA Tx & Rx requests */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); - - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - - return HAL_OK; -} - -/** - * @brief Resume the DMA Transfer. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for the specified SPI module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) -{ - /* Process Locked */ - __HAL_LOCK(hspi); - - /* Enable the SPI DMA Tx & Rx requests */ - SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); - - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - - return HAL_OK; -} - -/** - * @brief Stop the DMA Transfer. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for the specified SPI module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) -{ - HAL_StatusTypeDef errorcode = HAL_OK; - /* The Lock is not implemented on this API to allow the user application - to call the HAL SPI API under callbacks HAL_SPI_TxCpltCallback() or HAL_SPI_RxCpltCallback() or HAL_SPI_TxRxCpltCallback(): - when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated - and the correspond call back is executed HAL_SPI_TxCpltCallback() or HAL_SPI_RxCpltCallback() or HAL_SPI_TxRxCpltCallback() - */ - - /* Abort the SPI DMA tx Stream/Channel */ - if (hspi->hdmatx != NULL) - { - if (HAL_OK != HAL_DMA_Abort(hspi->hdmatx)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); - errorcode = HAL_ERROR; - } - } - /* Abort the SPI DMA rx Stream/Channel */ - if (hspi->hdmarx != NULL) - { - if (HAL_OK != HAL_DMA_Abort(hspi->hdmarx)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); - errorcode = HAL_ERROR; - } - } - - /* Disable the SPI DMA Tx & Rx requests */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); - hspi->State = HAL_SPI_STATE_READY; - return errorcode; -} - -/** - * @brief Handle SPI interrupt request. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for the specified SPI module. - * @retval None - */ -void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) -{ - uint32_t itsource = hspi->Instance->CR2; - uint32_t itflag = hspi->Instance->SR; - - /* SPI in mode Receiver ----------------------------------------------------*/ - if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) == RESET) && - (SPI_CHECK_FLAG(itflag, SPI_FLAG_RXNE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_RXNE) != RESET)) - { - hspi->RxISR(hspi); - return; - } - - /* SPI in mode Transmitter -------------------------------------------------*/ - if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_TXE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_TXE) != RESET)) - { - hspi->TxISR(hspi); - return; - } - - /* SPI in Error Treatment --------------------------------------------------*/ - if (((SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) || (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET) - || (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET)) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_ERR) != RESET)) - { - /* SPI Overrun error interrupt occurred ----------------------------------*/ - if (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET) - { - if (hspi->State != HAL_SPI_STATE_BUSY_TX) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); - __HAL_SPI_CLEAR_OVRFLAG(hspi); - } - else - { - __HAL_SPI_CLEAR_OVRFLAG(hspi); - return; - } - } - - /* SPI Mode Fault error interrupt occurred -------------------------------*/ - if (SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); - __HAL_SPI_CLEAR_MODFFLAG(hspi); - } - - /* SPI Frame error interrupt occurred ------------------------------------*/ - if (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); - __HAL_SPI_CLEAR_FREFLAG(hspi); - } - - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - { - /* Disable all interrupts */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE | SPI_IT_TXE | SPI_IT_ERR); - - hspi->State = HAL_SPI_STATE_READY; - /* Disable the SPI DMA requests if enabled */ - if ((HAL_IS_BIT_SET(itsource, SPI_CR2_TXDMAEN)) || (HAL_IS_BIT_SET(itsource, SPI_CR2_RXDMAEN))) - { - CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN)); - - /* Abort the SPI DMA Rx channel */ - if (hspi->hdmarx != NULL) - { - /* Set the SPI DMA Abort callback : - will lead to call HAL_SPI_ErrorCallback() at end of DMA abort procedure */ - hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; - if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - } - } - /* Abort the SPI DMA Tx channel */ - if (hspi->hdmatx != NULL) - { - /* Set the SPI DMA Abort callback : - will lead to call HAL_SPI_ErrorCallback() at end of DMA abort procedure */ - hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; - if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - } - } - } - else - { - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - } - return; - } -} - -/** - * @brief Tx Transfer completed callback. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_TxCpltCallback should be implemented in the user file - */ -} - -/** - * @brief Rx Transfer completed callback. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_RxCpltCallback should be implemented in the user file - */ -} - -/** - * @brief Tx and Rx Transfer completed callback. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_TxRxCpltCallback should be implemented in the user file - */ -} - -/** - * @brief Tx Half Transfer completed callback. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_TxHalfCpltCallback should be implemented in the user file - */ -} - -/** - * @brief Rx Half Transfer completed callback. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_RxHalfCpltCallback() should be implemented in the user file - */ -} - -/** - * @brief Tx and Rx Half Transfer callback. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_TxRxHalfCpltCallback() should be implemented in the user file - */ -} - -/** - * @brief SPI error callback. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -__weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_ErrorCallback should be implemented in the user file - */ - /* NOTE : The ErrorCode parameter in the hspi handle is updated by the SPI processes - and user can use HAL_SPI_GetError() API to check the latest error occurred - */ -} - -/** - * @brief SPI Abort Complete callback. - * @param hspi SPI handle. - * @retval None - */ -__weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hspi); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_SPI_AbortCpltCallback can be implemented in the user file. - */ -} - -/** - * @} - */ - -/** @defgroup SPI_Exported_Functions_Group3 Peripheral State and Errors functions - * @brief SPI control functions - * -@verbatim - =============================================================================== - ##### Peripheral State and Errors functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to control the SPI. - (+) HAL_SPI_GetState() API can be helpful to check in run-time the state of the SPI peripheral - (+) HAL_SPI_GetError() check in run-time Errors occurring during communication -@endverbatim - * @{ - */ - -/** - * @brief Return the SPI handle state. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval SPI state - */ -HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi) -{ - /* Return SPI handle state */ - return hspi->State; -} - -/** - * @brief Return the SPI error code. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval SPI error code in bitmap format - */ -uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi) -{ - /* Return SPI ErrorCode */ - return hspi->ErrorCode; -} - -/** - * @} - */ - -/** - * @} - */ - -/** @addtogroup SPI_Private_Functions - * @brief Private functions - * @{ - */ - -/** - * @brief DMA SPI transmit process complete callback. - * @param hdma pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void SPI_DMATransmitCplt(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - uint32_t tickstart; - - /* Init tickstart for timeout management*/ - tickstart = HAL_GetTick(); - - /* DMA Normal Mode */ - if ((hdma->Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC) - { - /* Disable ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); - - /* Disable Tx DMA Request */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); - - /* Check the end of the transaction */ - if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - } - - /* Clear overrun flag in 2 Lines communication mode because received data is not read */ - if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - { - __HAL_SPI_CLEAR_OVRFLAG(hspi); - } - - hspi->TxXferCount = 0U; - hspi->State = HAL_SPI_STATE_READY; - - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - { - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - return; - } - } - /* Call user Tx complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->TxCpltCallback(hspi); -#else - HAL_SPI_TxCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI receive process complete callback. - * @param hdma pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - uint32_t tickstart; -#if (USE_SPI_CRC != 0U) - __IO uint32_t tmpreg = 0U; -#endif /* USE_SPI_CRC */ - - /* Init tickstart for timeout management*/ - tickstart = HAL_GetTick(); - - /* DMA Normal Mode */ - if ((hdma->Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC) - { - /* Disable ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); - -#if (USE_SPI_CRC != 0U) - /* CRC handling */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* Wait until RXNE flag */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) - { - /* Error on the CRC reception */ - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - } - /* Read CRC */ - tmpreg = READ_REG(hspi->Instance->DR); - /* To avoid GCC warning */ - UNUSED(tmpreg); - } -#endif /* USE_SPI_CRC */ - - /* Check if we are in Master RX 2 line mode */ - if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) - { - /* Disable Rx/Tx DMA Request (done by default to handle the case master rx direction 2 lines) */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); - } - else - { - /* Normal case */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); - } - - /* Check the end of the transaction */ - if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) - { - hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - } - - hspi->RxXferCount = 0U; - hspi->State = HAL_SPI_STATE_READY; - -#if (USE_SPI_CRC != 0U) - /* Check if CRC error occurred */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - __HAL_SPI_CLEAR_CRCERRFLAG(hspi); - } -#endif /* USE_SPI_CRC */ - - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - { - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - return; - } - } - /* Call user Rx complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->RxCpltCallback(hspi); -#else - HAL_SPI_RxCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI transmit receive process complete callback. - * @param hdma pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - uint32_t tickstart; -#if (USE_SPI_CRC != 0U) - __IO uint32_t tmpreg = 0U; -#endif /* USE_SPI_CRC */ - - /* Init tickstart for timeout management*/ - tickstart = HAL_GetTick(); - - /* DMA Normal Mode */ - if ((hdma->Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC) - { - /* Disable ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); - -#if (USE_SPI_CRC != 0U) - /* CRC handling */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* Wait the CRC data */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - } - /* Read CRC to Flush DR and RXNE flag */ - tmpreg = READ_REG(hspi->Instance->DR); - /* To avoid GCC warning */ - UNUSED(tmpreg); - } -#endif /* USE_SPI_CRC */ - - /* Check the end of the transaction */ - if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - } - - /* Disable Rx/Tx DMA Request */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); - - hspi->TxXferCount = 0U; - hspi->RxXferCount = 0U; - hspi->State = HAL_SPI_STATE_READY; - -#if (USE_SPI_CRC != 0U) - /* Check if CRC error occurred */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - __HAL_SPI_CLEAR_CRCERRFLAG(hspi); - } -#endif /* USE_SPI_CRC */ - - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - { - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - return; - } - } - /* Call user TxRx complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->TxRxCpltCallback(hspi); -#else - HAL_SPI_TxRxCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI half transmit process complete callback. - * @param hdma pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void SPI_DMAHalfTransmitCplt(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - - /* Call user Tx half complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->TxHalfCpltCallback(hspi); -#else - HAL_SPI_TxHalfCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI half receive process complete callback - * @param hdma pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void SPI_DMAHalfReceiveCplt(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - - /* Call user Rx half complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->RxHalfCpltCallback(hspi); -#else - HAL_SPI_RxHalfCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI half transmit receive process complete callback. - * @param hdma pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - - /* Call user TxRx half complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->TxRxHalfCpltCallback(hspi); -#else - HAL_SPI_TxRxHalfCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI communication error callback. - * @param hdma pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void SPI_DMAError(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - - /* Stop the disable DMA transfer on SPI side */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); - - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); - hspi->State = HAL_SPI_STATE_READY; - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI communication abort callback, when initiated by HAL services on Error - * (To be called at end of DMA Abort procedure following error occurrence). - * @param hdma DMA handle. - * @retval None - */ -static void SPI_DMAAbortOnError(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - hspi->RxXferCount = 0U; - hspi->TxXferCount = 0U; - - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI Tx communication abort callback, when initiated by user - * (To be called at end of DMA Tx Abort procedure following user abort request). - * @note When this callback is executed, User Abort complete call back is called only if no - * Abort still ongoing for Rx DMA Handle. - * @param hdma DMA handle. - * @retval None - */ -static void SPI_DMATxAbortCallback(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - __IO uint32_t count; - - hspi->hdmatx->XferAbortCallback = NULL; - count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); - - /* Disable Tx DMA Request */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); - - /* Wait until TXE flag is set */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - break; - } - count--; - } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); - - /* Check if an Abort process is still ongoing */ - if (hspi->hdmarx != NULL) - { - if (hspi->hdmarx->XferAbortCallback != NULL) - { - return; - } - } - - /* No Abort process still ongoing : All DMA Stream/Channel are aborted, call user Abort Complete callback */ - hspi->RxXferCount = 0U; - hspi->TxXferCount = 0U; - - /* Check no error during Abort procedure */ - if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) - { - /* Reset errorCode */ - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - } - - /* Clear the Error flags in the SR register */ - __HAL_SPI_CLEAR_OVRFLAG(hspi); - __HAL_SPI_CLEAR_FREFLAG(hspi); - - /* Restore hspi->State to Ready */ - hspi->State = HAL_SPI_STATE_READY; - - /* Call user Abort complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->AbortCpltCallback(hspi); -#else - HAL_SPI_AbortCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA SPI Rx communication abort callback, when initiated by user - * (To be called at end of DMA Rx Abort procedure following user abort request). - * @note When this callback is executed, User Abort complete call back is called only if no - * Abort still ongoing for Tx DMA Handle. - * @param hdma DMA handle. - * @retval None - */ -static void SPI_DMARxAbortCallback(DMA_HandleTypeDef *hdma) -{ - SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ - - /* Disable SPI Peripheral */ - __HAL_SPI_DISABLE(hspi); - - hspi->hdmarx->XferAbortCallback = NULL; - - /* Disable Rx DMA Request */ - CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); - - /* Check Busy flag */ - if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - } - - /* Check if an Abort process is still ongoing */ - if (hspi->hdmatx != NULL) - { - if (hspi->hdmatx->XferAbortCallback != NULL) - { - return; - } - } - - /* No Abort process still ongoing : All DMA Stream/Channel are aborted, call user Abort Complete callback */ - hspi->RxXferCount = 0U; - hspi->TxXferCount = 0U; - - /* Check no error during Abort procedure */ - if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) - { - /* Reset errorCode */ - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - } - - /* Clear the Error flags in the SR register */ - __HAL_SPI_CLEAR_OVRFLAG(hspi); - __HAL_SPI_CLEAR_FREFLAG(hspi); - - /* Restore hspi->State to Ready */ - hspi->State = HAL_SPI_STATE_READY; - - /* Call user Abort complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->AbortCpltCallback(hspi); -#else - HAL_SPI_AbortCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ -} - -/** - * @brief Rx 8-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi) -{ - /* Receive data in 8bit mode */ - *hspi->pRxBuffPtr = *((__IO uint8_t *)&hspi->Instance->DR); - hspi->pRxBuffPtr++; - hspi->RxXferCount--; - - /* Check end of the reception */ - if (hspi->RxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - hspi->RxISR = SPI_2linesRxISR_8BITCRC; - return; - } -#endif /* USE_SPI_CRC */ - - /* Disable RXNE and ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); - - if (hspi->TxXferCount == 0U) - { - SPI_CloseRxTx_ISR(hspi); - } - } -} - -#if (USE_SPI_CRC != 0U) -/** - * @brief Rx 8-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) -{ - __IO uint8_t *ptmpreg8; - __IO uint8_t tmpreg8 = 0; - - /* Initialize the 8bit temporary pointer */ - ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; - /* Read 8bit CRC to flush Data Register */ - tmpreg8 = *ptmpreg8; - /* To avoid GCC warning */ - UNUSED(tmpreg8); - - /* Disable RXNE and ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); - - if (hspi->TxXferCount == 0U) - { - SPI_CloseRxTx_ISR(hspi); - } -} -#endif /* USE_SPI_CRC */ - -/** - * @brief Tx 8-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi) -{ - *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); - hspi->pTxBuffPtr++; - hspi->TxXferCount--; - - /* Check the end of the transmission */ - if (hspi->TxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* Set CRC Next Bit to send CRC */ - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - /* Disable TXE interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); - return; - } -#endif /* USE_SPI_CRC */ - - /* Disable TXE interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); - - if (hspi->RxXferCount == 0U) - { - SPI_CloseRxTx_ISR(hspi); - } - } -} - -/** - * @brief Rx 16-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi) -{ - /* Receive data in 16 Bit mode */ - *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); - hspi->pRxBuffPtr += sizeof(uint16_t); - hspi->RxXferCount--; - - if (hspi->RxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - hspi->RxISR = SPI_2linesRxISR_16BITCRC; - return; - } -#endif /* USE_SPI_CRC */ - - /* Disable RXNE interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); - - if (hspi->TxXferCount == 0U) - { - SPI_CloseRxTx_ISR(hspi); - } - } -} - -#if (USE_SPI_CRC != 0U) -/** - * @brief Manage the CRC 16-bit receive for Transmit and Receive in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) -{ - __IO uint32_t tmpreg = 0U; - - /* Read 16bit CRC to flush Data Register */ - tmpreg = READ_REG(hspi->Instance->DR); - /* To avoid GCC warning */ - UNUSED(tmpreg); - - /* Disable RXNE interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); - - SPI_CloseRxTx_ISR(hspi); -} -#endif /* USE_SPI_CRC */ - -/** - * @brief Tx 16-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi) -{ - /* Transmit data in 16 Bit mode */ - hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint16_t); - hspi->TxXferCount--; - - /* Enable CRC Transmission */ - if (hspi->TxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* Set CRC Next Bit to send CRC */ - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - /* Disable TXE interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); - return; - } -#endif /* USE_SPI_CRC */ - - /* Disable TXE interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); - - if (hspi->RxXferCount == 0U) - { - SPI_CloseRxTx_ISR(hspi); - } - } -} - -#if (USE_SPI_CRC != 0U) -/** - * @brief Manage the CRC 8-bit receive in Interrupt context. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) -{ - __IO uint8_t *ptmpreg8; - __IO uint8_t tmpreg8 = 0; - - /* Initialize the 8bit temporary pointer */ - ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; - /* Read 8bit CRC to flush Data Register */ - tmpreg8 = *ptmpreg8; - /* To avoid GCC warning */ - UNUSED(tmpreg8); - - SPI_CloseRx_ISR(hspi); -} -#endif /* USE_SPI_CRC */ - -/** - * @brief Manage the receive 8-bit in Interrupt context. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi) -{ - *hspi->pRxBuffPtr = (*(__IO uint8_t *)&hspi->Instance->DR); - hspi->pRxBuffPtr++; - hspi->RxXferCount--; - -#if (USE_SPI_CRC != 0U) - /* Enable CRC Transmission */ - if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) - { - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - } -#endif /* USE_SPI_CRC */ - - if (hspi->RxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - hspi->RxISR = SPI_RxISR_8BITCRC; - return; - } -#endif /* USE_SPI_CRC */ - SPI_CloseRx_ISR(hspi); - } -} - -#if (USE_SPI_CRC != 0U) -/** - * @brief Manage the CRC 16-bit receive in Interrupt context. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) -{ - __IO uint32_t tmpreg = 0U; - - /* Read 16bit CRC to flush Data Register */ - tmpreg = READ_REG(hspi->Instance->DR); - /* To avoid GCC warning */ - UNUSED(tmpreg); - - /* Disable RXNE and ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); - - SPI_CloseRx_ISR(hspi); -} -#endif /* USE_SPI_CRC */ - -/** - * @brief Manage the 16-bit receive in Interrupt context. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi) -{ - *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); - hspi->pRxBuffPtr += sizeof(uint16_t); - hspi->RxXferCount--; - -#if (USE_SPI_CRC != 0U) - /* Enable CRC Transmission */ - if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) - { - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - } -#endif /* USE_SPI_CRC */ - - if (hspi->RxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - hspi->RxISR = SPI_RxISR_16BITCRC; - return; - } -#endif /* USE_SPI_CRC */ - SPI_CloseRx_ISR(hspi); - } -} - -/** - * @brief Handle the data 8-bit transmit in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi) -{ - *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); - hspi->pTxBuffPtr++; - hspi->TxXferCount--; - - if (hspi->TxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* Enable CRC Transmission */ - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - } -#endif /* USE_SPI_CRC */ - SPI_CloseTx_ISR(hspi); - } -} - -/** - * @brief Handle the data 16-bit transmit in Interrupt mode. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi) -{ - /* Transmit data in 16 Bit mode */ - hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - hspi->pTxBuffPtr += sizeof(uint16_t); - hspi->TxXferCount--; - - if (hspi->TxXferCount == 0U) - { -#if (USE_SPI_CRC != 0U) - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - /* Enable CRC Transmission */ - SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); - } -#endif /* USE_SPI_CRC */ - SPI_CloseTx_ISR(hspi); - } -} - -/** - * @brief Handle SPI Communication Timeout. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param Flag SPI flag to check - * @param State flag state to check - * @param Timeout Timeout duration - * @param Tickstart tick start value - * @retval HAL status - */ -static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, - uint32_t Timeout, uint32_t Tickstart) -{ - __IO uint32_t count; - uint32_t tmp_timeout; - uint32_t tmp_tickstart; - - /* Adjust Timeout value in case of end of transfer */ - tmp_timeout = Timeout - (HAL_GetTick() - Tickstart); - tmp_tickstart = HAL_GetTick(); - - /* Calculate Timeout based on a software loop to avoid blocking issue if Systick is disabled */ - count = tmp_timeout * ((SystemCoreClock * 32U) >> 20U); - - while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) - { - if (Timeout != HAL_MAX_DELAY) - { - if (((HAL_GetTick() - tmp_tickstart) >= tmp_timeout) || (tmp_timeout == 0U)) - { - /* Disable the SPI and reset the CRC: the CRC value should be cleared - on both master and slave sides in order to resynchronize the master - and slave for their respective CRC calculation */ - - /* Disable TXE, RXNE and ERR interrupts for the interrupt process */ - __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); - - if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) - || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) - { - /* Disable SPI peripheral */ - __HAL_SPI_DISABLE(hspi); - } - - /* Reset CRC Calculation */ - if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - { - SPI_RESET_CRC(hspi); - } - - hspi->State = HAL_SPI_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hspi); - - return HAL_TIMEOUT; - } - /* If Systick is disabled or not incremented, deactivate timeout to go in disable loop procedure */ - if (count == 0U) - { - tmp_timeout = 0U; - } - count--; - } - } - - return HAL_OK; -} - -/** - * @brief Handle the check of the RX transaction complete. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @param Timeout Timeout duration - * @param Tickstart tick start value - * @retval HAL status - */ -static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) -{ - if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) - || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) - { - /* Disable SPI peripheral */ - __HAL_SPI_DISABLE(hspi); - } - - /* Erratasheet: BSY bit may stay high at the end of a data transfer in Slave mode */ - if (hspi->Init.Mode == SPI_MODE_MASTER) - { - if (hspi->Init.Direction != SPI_DIRECTION_2LINES_RXONLY) - { - /* Control the BSY flag */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - return HAL_TIMEOUT; - } - } - else - { - /* Wait the RXNE reset */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout, Tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - return HAL_TIMEOUT; - } - } - } - else - { - /* Wait the RXNE reset */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout, Tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - return HAL_TIMEOUT; - } - } - return HAL_OK; -} - -/** - * @brief Handle the check of the RXTX or TX transaction complete. - * @param hspi SPI handle - * @param Timeout Timeout duration - * @param Tickstart tick start value - * @retval HAL status - */ -static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) -{ - /* Timeout in µs */ - __IO uint32_t count = SPI_BSY_FLAG_WORKAROUND_TIMEOUT * (SystemCoreClock / 24U / 1000000U); - /* Erratasheet: BSY bit may stay high at the end of a data transfer in Slave mode */ - if (hspi->Init.Mode == SPI_MODE_MASTER) - { - /* Control the BSY flag */ - if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - return HAL_TIMEOUT; - } - } - else - { - /* Wait BSY flag during 1 Byte time transfer in case of Full-Duplex and Tx transfer - * If Timeout is reached, the transfer is considered as finish. - * User have to calculate the timeout value to fit with the time of 1 byte transfer. - * This time is directly link with the SPI clock from Master device. - */ - do - { - if (count == 0U) - { - break; - } - count--; - } while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_BSY) != RESET); - } - - return HAL_OK; -} - -/** - * @brief Handle the end of the RXTX transaction. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi) -{ - uint32_t tickstart; - __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); - - /* Init tickstart for timeout management */ - tickstart = HAL_GetTick(); - - /* Disable ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); - - /* Wait until TXE flag is set */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - break; - } - count--; - } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); - - /* Check the end of the transaction */ - if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - } - - /* Clear overrun flag in 2 Lines communication mode because received is not read */ - if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - { - __HAL_SPI_CLEAR_OVRFLAG(hspi); - } - -#if (USE_SPI_CRC != 0U) - /* Check if CRC error occurred */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) - { - hspi->State = HAL_SPI_STATE_READY; - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - __HAL_SPI_CLEAR_CRCERRFLAG(hspi); - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - else - { -#endif /* USE_SPI_CRC */ - if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) - { - if (hspi->State == HAL_SPI_STATE_BUSY_RX) - { - hspi->State = HAL_SPI_STATE_READY; - /* Call user Rx complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->RxCpltCallback(hspi); -#else - HAL_SPI_RxCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - else - { - hspi->State = HAL_SPI_STATE_READY; - /* Call user TxRx complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->TxRxCpltCallback(hspi); -#else - HAL_SPI_TxRxCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - } - else - { - hspi->State = HAL_SPI_STATE_READY; - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } -#if (USE_SPI_CRC != 0U) - } -#endif /* USE_SPI_CRC */ -} - -/** - * @brief Handle the end of the RX transaction. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi) -{ - /* Disable RXNE and ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); - - /* Check the end of the transaction */ - if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - } - - /* Clear overrun flag in 2 Lines communication mode because received is not read */ - if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - { - __HAL_SPI_CLEAR_OVRFLAG(hspi); - } - hspi->State = HAL_SPI_STATE_READY; - -#if (USE_SPI_CRC != 0U) - /* Check if CRC error occurred */ - if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); - __HAL_SPI_CLEAR_CRCERRFLAG(hspi); - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - else - { -#endif /* USE_SPI_CRC */ - if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) - { - /* Call user Rx complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->RxCpltCallback(hspi); -#else - HAL_SPI_RxCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - else - { - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } -#if (USE_SPI_CRC != 0U) - } -#endif /* USE_SPI_CRC */ -} - -/** - * @brief Handle the end of the TX transaction. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi) -{ - uint32_t tickstart; - __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); - - /* Init tickstart for timeout management*/ - tickstart = HAL_GetTick(); - - /* Wait until TXE flag is set */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - break; - } - count--; - } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); - - /* Disable TXE and ERR interrupt */ - __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); - - /* Check the end of the transaction */ - if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - } - - /* Clear overrun flag in 2 Lines communication mode because received is not read */ - if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - { - __HAL_SPI_CLEAR_OVRFLAG(hspi); - } - - hspi->State = HAL_SPI_STATE_READY; - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - { - /* Call user error callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->ErrorCallback(hspi); -#else - HAL_SPI_ErrorCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } - else - { - /* Call user Rx complete callback */ -#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) - hspi->TxCpltCallback(hspi); -#else - HAL_SPI_TxCpltCallback(hspi); -#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ - } -} - -/** - * @brief Handle abort a Rx transaction. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi) -{ - __IO uint32_t tmpreg = 0U; - __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); - - /* Wait until TXE flag is set */ - do - { - if (count == 0U) - { - SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); - break; - } - count--; - } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); - - /* Disable SPI Peripheral */ - __HAL_SPI_DISABLE(hspi); - - /* Disable TXEIE, RXNEIE and ERRIE(mode fault event, overrun error, TI frame error) interrupts */ - CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE | SPI_CR2_RXNEIE | SPI_CR2_ERRIE)); - - /* Flush Data Register by a blank read */ - tmpreg = READ_REG(hspi->Instance->DR); - /* To avoid GCC warning */ - UNUSED(tmpreg); - - hspi->State = HAL_SPI_STATE_ABORT; -} - -/** - * @brief Handle abort a Tx or Rx/Tx transaction. - * @param hspi pointer to a SPI_HandleTypeDef structure that contains - * the configuration information for SPI module. - * @retval None - */ -static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi) -{ - /* Disable TXEIE interrupt */ - CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE)); - - /* Disable SPI Peripheral */ - __HAL_SPI_DISABLE(hspi); - - hspi->State = HAL_SPI_STATE_ABORT; -} - -/** - * @} - */ - -#endif /* HAL_SPI_MODULE_ENABLED */ - -/** - * @} - */ - -/** - * @} - */ - diff --git a/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c b/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c deleted file mode 100644 index 36b7317..0000000 --- a/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c +++ /dev/null @@ -1,3751 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_uart.c - * @author MCD Application Team - * @brief UART HAL module driver. - * This file provides firmware functions to manage the following - * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART). - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions - * + Peripheral State and Errors functions - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### How to use this driver ##### - ============================================================================== - [..] - The UART HAL driver can be used as follows: - - (#) Declare a UART_HandleTypeDef handle structure (eg. UART_HandleTypeDef huart). - (#) Initialize the UART low level resources by implementing the HAL_UART_MspInit() API: - (##) Enable the USARTx interface clock. - (##) UART pins configuration: - (+++) Enable the clock for the UART GPIOs. - (+++) Configure the UART TX/RX pins as alternate function pull-up. - (##) NVIC configuration if you need to use interrupt process (HAL_UART_Transmit_IT() - and HAL_UART_Receive_IT() APIs): - (+++) Configure the USARTx interrupt priority. - (+++) Enable the NVIC USART IRQ handle. - (##) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA() - and HAL_UART_Receive_DMA() APIs): - (+++) Declare a DMA handle structure for the Tx/Rx stream. - (+++) Enable the DMAx interface clock. - (+++) Configure the declared DMA handle structure with the required - Tx/Rx parameters. - (+++) Configure the DMA Tx/Rx stream. - (+++) Associate the initialized DMA handle to the UART DMA Tx/Rx handle. - (+++) Configure the priority and enable the NVIC for the transfer complete - interrupt on the DMA Tx/Rx stream. - (+++) Configure the USARTx interrupt priority and enable the NVIC USART IRQ handle - (used for last byte sending completion detection in DMA non circular mode) - - (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware - flow control and Mode(Receiver/Transmitter) in the huart Init structure. - - (#) For the UART asynchronous mode, initialize the UART registers by calling - the HAL_UART_Init() API. - - (#) For the UART Half duplex mode, initialize the UART registers by calling - the HAL_HalfDuplex_Init() API. - - (#) For the LIN mode, initialize the UART registers by calling the HAL_LIN_Init() API. - - (#) For the Multi-Processor mode, initialize the UART registers by calling - the HAL_MultiProcessor_Init() API. - - [..] - (@) The specific UART interrupts (Transmission complete interrupt, - RXNE interrupt and Error Interrupts) will be managed using the macros - __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() inside the transmit - and receive process. - - [..] - (@) These APIs (HAL_UART_Init() and HAL_HalfDuplex_Init()) configure also the - low level Hardware GPIO, CLOCK, CORTEX...etc) by calling the customized - HAL_UART_MspInit() API. - - ##### Callback registration ##### - ================================== - - [..] - The compilation define USE_HAL_UART_REGISTER_CALLBACKS when set to 1 - allows the user to configure dynamically the driver callbacks. - - [..] - Use Function HAL_UART_RegisterCallback() to register a user callback. - Function HAL_UART_RegisterCallback() allows to register following callbacks: - (+) TxHalfCpltCallback : Tx Half Complete Callback. - (+) TxCpltCallback : Tx Complete Callback. - (+) RxHalfCpltCallback : Rx Half Complete Callback. - (+) RxCpltCallback : Rx Complete Callback. - (+) ErrorCallback : Error Callback. - (+) AbortCpltCallback : Abort Complete Callback. - (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. - (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. - (+) MspInitCallback : UART MspInit. - (+) MspDeInitCallback : UART MspDeInit. - This function takes as parameters the HAL peripheral handle, the Callback ID - and a pointer to the user callback function. - - [..] - Use function HAL_UART_UnRegisterCallback() to reset a callback to the default - weak (surcharged) function. - HAL_UART_UnRegisterCallback() takes as parameters the HAL peripheral handle, - and the Callback ID. - This function allows to reset following callbacks: - (+) TxHalfCpltCallback : Tx Half Complete Callback. - (+) TxCpltCallback : Tx Complete Callback. - (+) RxHalfCpltCallback : Rx Half Complete Callback. - (+) RxCpltCallback : Rx Complete Callback. - (+) ErrorCallback : Error Callback. - (+) AbortCpltCallback : Abort Complete Callback. - (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. - (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. - (+) MspInitCallback : UART MspInit. - (+) MspDeInitCallback : UART MspDeInit. - - [..] - For specific callback RxEventCallback, use dedicated registration/reset functions: - respectively HAL_UART_RegisterRxEventCallback() , HAL_UART_UnRegisterRxEventCallback(). - - [..] - By default, after the HAL_UART_Init() and when the state is HAL_UART_STATE_RESET - all callbacks are set to the corresponding weak (surcharged) functions: - examples HAL_UART_TxCpltCallback(), HAL_UART_RxHalfCpltCallback(). - Exception done for MspInit and MspDeInit functions that are respectively - reset to the legacy weak (surcharged) functions in the HAL_UART_Init() - and HAL_UART_DeInit() only when these callbacks are null (not registered beforehand). - If not, MspInit or MspDeInit are not null, the HAL_UART_Init() and HAL_UART_DeInit() - keep and use the user MspInit/MspDeInit callbacks (registered beforehand). - - [..] - Callbacks can be registered/unregistered in HAL_UART_STATE_READY state only. - Exception done MspInit/MspDeInit that can be registered/unregistered - in HAL_UART_STATE_READY or HAL_UART_STATE_RESET state, thus registered (user) - MspInit/DeInit callbacks can be used during the Init/DeInit. - In that case first register the MspInit/MspDeInit user callbacks - using HAL_UART_RegisterCallback() before calling HAL_UART_DeInit() - or HAL_UART_Init() function. - - [..] - When The compilation define USE_HAL_UART_REGISTER_CALLBACKS is set to 0 or - not defined, the callback registration feature is not available - and weak (surcharged) callbacks are used. - - [..] - Three operation modes are available within this driver : - - *** Polling mode IO operation *** - ================================= - [..] - (+) Send an amount of data in blocking mode using HAL_UART_Transmit() - (+) Receive an amount of data in blocking mode using HAL_UART_Receive() - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Send an amount of data in non blocking mode using HAL_UART_Transmit_IT() - (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can - add his own code by customization of function pointer HAL_UART_TxCpltCallback - (+) Receive an amount of data in non blocking mode using HAL_UART_Receive_IT() - (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can - add his own code by customization of function pointer HAL_UART_RxCpltCallback - (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_UART_ErrorCallback - - *** DMA mode IO operation *** - ============================== - [..] - (+) Send an amount of data in non blocking mode (DMA) using HAL_UART_Transmit_DMA() - (+) At transmission end of half transfer HAL_UART_TxHalfCpltCallback is executed and user can - add his own code by customization of function pointer HAL_UART_TxHalfCpltCallback - (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can - add his own code by customization of function pointer HAL_UART_TxCpltCallback - (+) Receive an amount of data in non blocking mode (DMA) using HAL_UART_Receive_DMA() - (+) At reception end of half transfer HAL_UART_RxHalfCpltCallback is executed and user can - add his own code by customization of function pointer HAL_UART_RxHalfCpltCallback - (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can - add his own code by customization of function pointer HAL_UART_RxCpltCallback - (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_UART_ErrorCallback - (+) Pause the DMA Transfer using HAL_UART_DMAPause() - (+) Resume the DMA Transfer using HAL_UART_DMAResume() - (+) Stop the DMA Transfer using HAL_UART_DMAStop() - - - [..] This subsection also provides a set of additional functions providing enhanced reception - services to user. (For example, these functions allow application to handle use cases - where number of data to be received is unknown). - - (#) Compared to standard reception services which only consider number of received - data elements as reception completion criteria, these functions also consider additional events - as triggers for updating reception status to caller : - (+) Detection of inactivity period (RX line has not been active for a given period). - (++) RX inactivity detected by IDLE event, i.e. RX line has been in idle state (normally high state) - for 1 frame time, after last received byte. - - (#) There are two mode of transfer: - (+) Blocking mode: The reception is performed in polling mode, until either expected number of data is received, - or till IDLE event occurs. Reception is handled only during function execution. - When function exits, no data reception could occur. HAL status and number of actually received data elements, - are returned by function after finishing transfer. - (+) Non-Blocking mode: The reception is performed using Interrupts or DMA. - These API's return the HAL status. - The end of the data processing will be indicated through the - dedicated UART IRQ when using Interrupt mode or the DMA IRQ when using DMA mode. - The HAL_UARTEx_RxEventCallback() user callback will be executed during Receive process - The HAL_UART_ErrorCallback()user callback will be executed when a reception error is detected. - - (#) Blocking mode API: - (+) HAL_UARTEx_ReceiveToIdle() - - (#) Non-Blocking mode API with Interrupt: - (+) HAL_UARTEx_ReceiveToIdle_IT() - - (#) Non-Blocking mode API with DMA: - (+) HAL_UARTEx_ReceiveToIdle_DMA() - - - *** UART HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in UART HAL driver. - - (+) __HAL_UART_ENABLE: Enable the UART peripheral - (+) __HAL_UART_DISABLE: Disable the UART peripheral - (+) __HAL_UART_GET_FLAG : Check whether the specified UART flag is set or not - (+) __HAL_UART_CLEAR_FLAG : Clear the specified UART pending flag - (+) __HAL_UART_ENABLE_IT: Enable the specified UART interrupt - (+) __HAL_UART_DISABLE_IT: Disable the specified UART interrupt - (+) __HAL_UART_GET_IT_SOURCE: Check whether the specified UART interrupt has occurred or not - - [..] - (@) You can refer to the UART HAL driver header file for more useful macros - - @endverbatim - [..] - (@) Additional remark: If the parity is enabled, then the MSB bit of the data written - in the data register is transmitted but is changed by the parity bit. - Depending on the frame length defined by the M bit (8-bits or 9-bits), - the possible UART frame formats are as listed in the following table: - +-------------------------------------------------------------+ - | M bit | PCE bit | UART frame | - |---------------------|---------------------------------------| - | 0 | 0 | | SB | 8 bit data | STB | | - |---------|-----------|---------------------------------------| - | 0 | 1 | | SB | 7 bit data | PB | STB | | - |---------|-----------|---------------------------------------| - | 1 | 0 | | SB | 9 bit data | STB | | - |---------|-----------|---------------------------------------| - | 1 | 1 | | SB | 8 bit data | PB | STB | | - +-------------------------------------------------------------+ - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup STM32F4xx_HAL_Driver - * @{ - */ - -/** @defgroup UART UART - * @brief HAL UART module driver - * @{ - */ -#ifdef HAL_UART_MODULE_ENABLED - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/** @addtogroup UART_Private_Constants - * @{ - */ -/** - * @} - */ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/** @addtogroup UART_Private_Functions UART Private Functions - * @{ - */ - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) -void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -static void UART_EndTxTransfer(UART_HandleTypeDef *huart); -static void UART_EndRxTransfer(UART_HandleTypeDef *huart); -static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma); -static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma); -static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma); -static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma); -static void UART_DMAError(DMA_HandleTypeDef *hdma); -static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma); -static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma); -static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma); -static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma); -static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma); -static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart); -static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart); -static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart); -static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, - uint32_t Tickstart, uint32_t Timeout); -static void UART_SetConfig(UART_HandleTypeDef *huart); - -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ -/** @defgroup UART_Exported_Functions UART Exported Functions - * @{ - */ - -/** @defgroup UART_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions - * -@verbatim - =============================================================================== - ##### Initialization and Configuration functions ##### - =============================================================================== - [..] - This subsection provides a set of functions allowing to initialize the USARTx or the UARTy - in asynchronous mode. - (+) For the asynchronous mode only these parameters can be configured: - (++) Baud Rate - (++) Word Length - (++) Stop Bit - (++) Parity: If the parity is enabled, then the MSB bit of the data written - in the data register is transmitted but is changed by the parity bit. - Depending on the frame length defined by the M bit (8-bits or 9-bits), - please refer to Reference manual for possible UART frame formats. - (++) Hardware flow control - (++) Receiver/transmitter modes - (++) Over Sampling Method - [..] - The HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init() and HAL_MultiProcessor_Init() APIs - follow respectively the UART asynchronous, UART Half duplex, LIN and Multi-Processor configuration - procedures (details for the procedures are available in reference manual - (RM0430 for STM32F4X3xx MCUs and RM0402 for STM32F412xx MCUs - RM0383 for STM32F411xC/E MCUs and RM0401 for STM32F410xx MCUs - RM0090 for STM32F4X5xx/STM32F4X7xx/STM32F429xx/STM32F439xx MCUs - RM0390 for STM32F446xx MCUs and RM0386 for STM32F469xx/STM32F479xx MCUs)). - -@endverbatim - * @{ - */ - -/** - * @brief Initializes the UART mode according to the specified parameters in - * the UART_InitTypeDef and create the associated handle. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) -{ - /* Check the UART handle allocation */ - if (huart == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - if (huart->Init.HwFlowCtl != UART_HWCONTROL_NONE) - { - /* The hardware flow control is available only for USART1, USART2, USART3 and USART6. - Except for STM32F446xx devices, that is available for USART1, USART2, USART3, USART6, UART4 and UART5. - */ - assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance)); - assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl)); - } - else - { - assert_param(IS_UART_INSTANCE(huart->Instance)); - } - assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); - assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); - - if (huart->gState == HAL_UART_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - huart->Lock = HAL_UNLOCKED; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - UART_InitCallbacksToDefault(huart); - - if (huart->MspInitCallback == NULL) - { - huart->MspInitCallback = HAL_UART_MspInit; - } - - /* Init the low level hardware */ - huart->MspInitCallback(huart); -#else - /* Init the low level hardware : GPIO, CLOCK */ - HAL_UART_MspInit(huart); -#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ - } - - huart->gState = HAL_UART_STATE_BUSY; - - /* Disable the peripheral */ - __HAL_UART_DISABLE(huart); - - /* Set the UART Communication parameters */ - UART_SetConfig(huart); - - /* In asynchronous mode, the following bits must be kept cleared: - - LINEN and CLKEN bits in the USART_CR2 register, - - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ - CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); - CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); - - /* Enable the peripheral */ - __HAL_UART_ENABLE(huart); - - /* Initialize the UART state */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - - return HAL_OK; -} - -/** - * @brief Initializes the half-duplex mode according to the specified - * parameters in the UART_InitTypeDef and create the associated handle. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart) -{ - /* Check the UART handle allocation */ - if (huart == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_UART_HALFDUPLEX_INSTANCE(huart->Instance)); - assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); - assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); - - if (huart->gState == HAL_UART_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - huart->Lock = HAL_UNLOCKED; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - UART_InitCallbacksToDefault(huart); - - if (huart->MspInitCallback == NULL) - { - huart->MspInitCallback = HAL_UART_MspInit; - } - - /* Init the low level hardware */ - huart->MspInitCallback(huart); -#else - /* Init the low level hardware : GPIO, CLOCK */ - HAL_UART_MspInit(huart); -#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ - } - - huart->gState = HAL_UART_STATE_BUSY; - - /* Disable the peripheral */ - __HAL_UART_DISABLE(huart); - - /* Set the UART Communication parameters */ - UART_SetConfig(huart); - - /* In half-duplex mode, the following bits must be kept cleared: - - LINEN and CLKEN bits in the USART_CR2 register, - - SCEN and IREN bits in the USART_CR3 register.*/ - CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); - CLEAR_BIT(huart->Instance->CR3, (USART_CR3_IREN | USART_CR3_SCEN)); - - /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */ - SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL); - - /* Enable the peripheral */ - __HAL_UART_ENABLE(huart); - - /* Initialize the UART state*/ - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - - return HAL_OK; -} - -/** - * @brief Initializes the LIN mode according to the specified - * parameters in the UART_InitTypeDef and create the associated handle. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param BreakDetectLength Specifies the LIN break detection length. - * This parameter can be one of the following values: - * @arg UART_LINBREAKDETECTLENGTH_10B: 10-bit break detection - * @arg UART_LINBREAKDETECTLENGTH_11B: 11-bit break detection - * @retval HAL status - */ -HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength) -{ - /* Check the UART handle allocation */ - if (huart == NULL) - { - return HAL_ERROR; - } - - /* Check the LIN UART instance */ - assert_param(IS_UART_LIN_INSTANCE(huart->Instance)); - - /* Check the Break detection length parameter */ - assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength)); - assert_param(IS_UART_LIN_WORD_LENGTH(huart->Init.WordLength)); - assert_param(IS_UART_LIN_OVERSAMPLING(huart->Init.OverSampling)); - - if (huart->gState == HAL_UART_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - huart->Lock = HAL_UNLOCKED; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - UART_InitCallbacksToDefault(huart); - - if (huart->MspInitCallback == NULL) - { - huart->MspInitCallback = HAL_UART_MspInit; - } - - /* Init the low level hardware */ - huart->MspInitCallback(huart); -#else - /* Init the low level hardware : GPIO, CLOCK */ - HAL_UART_MspInit(huart); -#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ - } - - huart->gState = HAL_UART_STATE_BUSY; - - /* Disable the peripheral */ - __HAL_UART_DISABLE(huart); - - /* Set the UART Communication parameters */ - UART_SetConfig(huart); - - /* In LIN mode, the following bits must be kept cleared: - - CLKEN bits in the USART_CR2 register, - - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ - CLEAR_BIT(huart->Instance->CR2, (USART_CR2_CLKEN)); - CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN)); - - /* Enable the LIN mode by setting the LINEN bit in the CR2 register */ - SET_BIT(huart->Instance->CR2, USART_CR2_LINEN); - - /* Set the USART LIN Break detection length. */ - CLEAR_BIT(huart->Instance->CR2, USART_CR2_LBDL); - SET_BIT(huart->Instance->CR2, BreakDetectLength); - - /* Enable the peripheral */ - __HAL_UART_ENABLE(huart); - - /* Initialize the UART state*/ - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - - return HAL_OK; -} - -/** - * @brief Initializes the Multi-Processor mode according to the specified - * parameters in the UART_InitTypeDef and create the associated handle. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param Address USART address - * @param WakeUpMethod specifies the USART wake-up method. - * This parameter can be one of the following values: - * @arg UART_WAKEUPMETHOD_IDLELINE: Wake-up by an idle line detection - * @arg UART_WAKEUPMETHOD_ADDRESSMARK: Wake-up by an address mark - * @retval HAL status - */ -HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod) -{ - /* Check the UART handle allocation */ - if (huart == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_UART_INSTANCE(huart->Instance)); - - /* Check the Address & wake up method parameters */ - assert_param(IS_UART_WAKEUPMETHOD(WakeUpMethod)); - assert_param(IS_UART_ADDRESS(Address)); - assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); - assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); - - if (huart->gState == HAL_UART_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - huart->Lock = HAL_UNLOCKED; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - UART_InitCallbacksToDefault(huart); - - if (huart->MspInitCallback == NULL) - { - huart->MspInitCallback = HAL_UART_MspInit; - } - - /* Init the low level hardware */ - huart->MspInitCallback(huart); -#else - /* Init the low level hardware : GPIO, CLOCK */ - HAL_UART_MspInit(huart); -#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ - } - - huart->gState = HAL_UART_STATE_BUSY; - - /* Disable the peripheral */ - __HAL_UART_DISABLE(huart); - - /* Set the UART Communication parameters */ - UART_SetConfig(huart); - - /* In Multi-Processor mode, the following bits must be kept cleared: - - LINEN and CLKEN bits in the USART_CR2 register, - - SCEN, HDSEL and IREN bits in the USART_CR3 register */ - CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); - CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); - - /* Set the USART address node */ - CLEAR_BIT(huart->Instance->CR2, USART_CR2_ADD); - SET_BIT(huart->Instance->CR2, Address); - - /* Set the wake up method by setting the WAKE bit in the CR1 register */ - CLEAR_BIT(huart->Instance->CR1, USART_CR1_WAKE); - SET_BIT(huart->Instance->CR1, WakeUpMethod); - - /* Enable the peripheral */ - __HAL_UART_ENABLE(huart); - - /* Initialize the UART state */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - - return HAL_OK; -} - -/** - * @brief DeInitializes the UART peripheral. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart) -{ - /* Check the UART handle allocation */ - if (huart == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_UART_INSTANCE(huart->Instance)); - - huart->gState = HAL_UART_STATE_BUSY; - - /* Disable the Peripheral */ - __HAL_UART_DISABLE(huart); - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - if (huart->MspDeInitCallback == NULL) - { - huart->MspDeInitCallback = HAL_UART_MspDeInit; - } - /* DeInit the low level hardware */ - huart->MspDeInitCallback(huart); -#else - /* DeInit the low level hardware */ - HAL_UART_MspDeInit(huart); -#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_RESET; - huart->RxState = HAL_UART_STATE_RESET; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* Process Unlock */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @brief UART MSP Init. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_MspInit could be implemented in the user file - */ -} - -/** - * @brief UART MSP DeInit. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_MspDeInit could be implemented in the user file - */ -} - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) -/** - * @brief Register a User UART Callback - * To be used instead of the weak predefined callback - * @param huart uart handle - * @param CallbackID ID of the callback to be registered - * This parameter can be one of the following values: - * @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID - * @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID - * @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID - * @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID - * @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID - * @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID - * @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID - * @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID - * @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID - * @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID - * @param pCallback pointer to the Callback function - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, - pUART_CallbackTypeDef pCallback) -{ - HAL_StatusTypeDef status = HAL_OK; - - if (pCallback == NULL) - { - /* Update the error code */ - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - return HAL_ERROR; - } - /* Process locked */ - __HAL_LOCK(huart); - - if (huart->gState == HAL_UART_STATE_READY) - { - switch (CallbackID) - { - case HAL_UART_TX_HALFCOMPLETE_CB_ID : - huart->TxHalfCpltCallback = pCallback; - break; - - case HAL_UART_TX_COMPLETE_CB_ID : - huart->TxCpltCallback = pCallback; - break; - - case HAL_UART_RX_HALFCOMPLETE_CB_ID : - huart->RxHalfCpltCallback = pCallback; - break; - - case HAL_UART_RX_COMPLETE_CB_ID : - huart->RxCpltCallback = pCallback; - break; - - case HAL_UART_ERROR_CB_ID : - huart->ErrorCallback = pCallback; - break; - - case HAL_UART_ABORT_COMPLETE_CB_ID : - huart->AbortCpltCallback = pCallback; - break; - - case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID : - huart->AbortTransmitCpltCallback = pCallback; - break; - - case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID : - huart->AbortReceiveCpltCallback = pCallback; - break; - - case HAL_UART_MSPINIT_CB_ID : - huart->MspInitCallback = pCallback; - break; - - case HAL_UART_MSPDEINIT_CB_ID : - huart->MspDeInitCallback = pCallback; - break; - - default : - /* Update the error code */ - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (huart->gState == HAL_UART_STATE_RESET) - { - switch (CallbackID) - { - case HAL_UART_MSPINIT_CB_ID : - huart->MspInitCallback = pCallback; - break; - - case HAL_UART_MSPDEINIT_CB_ID : - huart->MspDeInitCallback = pCallback; - break; - - default : - /* Update the error code */ - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Update the error code */ - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - /* Return error status */ - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(huart); - - return status; -} - -/** - * @brief Unregister an UART Callback - * UART callaback is redirected to the weak predefined callback - * @param huart uart handle - * @param CallbackID ID of the callback to be unregistered - * This parameter can be one of the following values: - * @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID - * @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID - * @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID - * @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID - * @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID - * @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID - * @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID - * @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID - * @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID - * @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Process locked */ - __HAL_LOCK(huart); - - if (HAL_UART_STATE_READY == huart->gState) - { - switch (CallbackID) - { - case HAL_UART_TX_HALFCOMPLETE_CB_ID : - huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ - break; - - case HAL_UART_TX_COMPLETE_CB_ID : - huart->TxCpltCallback = HAL_UART_TxCpltCallback; /* Legacy weak TxCpltCallback */ - break; - - case HAL_UART_RX_HALFCOMPLETE_CB_ID : - huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ - break; - - case HAL_UART_RX_COMPLETE_CB_ID : - huart->RxCpltCallback = HAL_UART_RxCpltCallback; /* Legacy weak RxCpltCallback */ - break; - - case HAL_UART_ERROR_CB_ID : - huart->ErrorCallback = HAL_UART_ErrorCallback; /* Legacy weak ErrorCallback */ - break; - - case HAL_UART_ABORT_COMPLETE_CB_ID : - huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ - break; - - case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID : - huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ - break; - - case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID : - huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ - break; - - case HAL_UART_MSPINIT_CB_ID : - huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */ - break; - - case HAL_UART_MSPDEINIT_CB_ID : - huart->MspDeInitCallback = HAL_UART_MspDeInit; /* Legacy weak MspDeInitCallback */ - break; - - default : - /* Update the error code */ - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (HAL_UART_STATE_RESET == huart->gState) - { - switch (CallbackID) - { - case HAL_UART_MSPINIT_CB_ID : - huart->MspInitCallback = HAL_UART_MspInit; - break; - - case HAL_UART_MSPDEINIT_CB_ID : - huart->MspDeInitCallback = HAL_UART_MspDeInit; - break; - - default : - /* Update the error code */ - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Update the error code */ - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - /* Return error status */ - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(huart); - - return status; -} - -/** - * @brief Register a User UART Rx Event Callback - * To be used instead of the weak predefined callback - * @param huart Uart handle - * @param pCallback Pointer to the Rx Event Callback function - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback) -{ - HAL_StatusTypeDef status = HAL_OK; - - if (pCallback == NULL) - { - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - return HAL_ERROR; - } - - /* Process locked */ - __HAL_LOCK(huart); - - if (huart->gState == HAL_UART_STATE_READY) - { - huart->RxEventCallback = pCallback; - } - else - { - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(huart); - - return status; -} - -/** - * @brief UnRegister the UART Rx Event Callback - * UART Rx Event Callback is redirected to the weak HAL_UARTEx_RxEventCallback() predefined callback - * @param huart Uart handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Process locked */ - __HAL_LOCK(huart); - - if (huart->gState == HAL_UART_STATE_READY) - { - huart->RxEventCallback = HAL_UARTEx_RxEventCallback; /* Legacy weak UART Rx Event Callback */ - } - else - { - huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; - - status = HAL_ERROR; - } - - /* Release Lock */ - __HAL_UNLOCK(huart); - return status; -} -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - -/** - * @} - */ - -/** @defgroup UART_Exported_Functions_Group2 IO operation functions - * @brief UART Transmit and Receive functions - * -@verbatim - =============================================================================== - ##### IO operation functions ##### - =============================================================================== - This subsection provides a set of functions allowing to manage the UART asynchronous - and Half duplex data transfers. - - (#) There are two modes of transfer: - (+) Blocking mode: The communication is performed in polling mode. - The HAL status of all data processing is returned by the same function - after finishing transfer. - (+) Non-Blocking mode: The communication is performed using Interrupts - or DMA, these API's return the HAL status. - The end of the data processing will be indicated through the - dedicated UART IRQ when using Interrupt mode or the DMA IRQ when - using DMA mode. - The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks - will be executed respectively at the end of the transmit or receive process - The HAL_UART_ErrorCallback()user callback will be executed when a communication error is detected. - - (#) Blocking mode API's are : - (+) HAL_UART_Transmit() - (+) HAL_UART_Receive() - - (#) Non-Blocking mode API's with Interrupt are : - (+) HAL_UART_Transmit_IT() - (+) HAL_UART_Receive_IT() - (+) HAL_UART_IRQHandler() - - (#) Non-Blocking mode API's with DMA are : - (+) HAL_UART_Transmit_DMA() - (+) HAL_UART_Receive_DMA() - (+) HAL_UART_DMAPause() - (+) HAL_UART_DMAResume() - (+) HAL_UART_DMAStop() - - (#) A set of Transfer Complete Callbacks are provided in Non_Blocking mode: - (+) HAL_UART_TxHalfCpltCallback() - (+) HAL_UART_TxCpltCallback() - (+) HAL_UART_RxHalfCpltCallback() - (+) HAL_UART_RxCpltCallback() - (+) HAL_UART_ErrorCallback() - - (#) Non-Blocking mode transfers could be aborted using Abort API's : - (+) HAL_UART_Abort() - (+) HAL_UART_AbortTransmit() - (+) HAL_UART_AbortReceive() - (+) HAL_UART_Abort_IT() - (+) HAL_UART_AbortTransmit_IT() - (+) HAL_UART_AbortReceive_IT() - - (#) For Abort services based on interrupts (HAL_UART_Abortxxx_IT), a set of Abort Complete Callbacks are provided: - (+) HAL_UART_AbortCpltCallback() - (+) HAL_UART_AbortTransmitCpltCallback() - (+) HAL_UART_AbortReceiveCpltCallback() - - (#) A Rx Event Reception Callback (Rx event notification) is available for Non_Blocking modes of enhanced reception services: - (+) HAL_UARTEx_RxEventCallback() - - (#) In Non-Blocking mode transfers, possible errors are split into 2 categories. - Errors are handled as follows : - (+) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is - to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error in Interrupt mode reception . - Received character is then retrieved and stored in Rx buffer, Error code is set to allow user to identify error type, - and HAL_UART_ErrorCallback() user callback is executed. Transfer is kept ongoing on UART side. - If user wants to abort it, Abort services should be called by user. - (+) Error is considered as Blocking : Transfer could not be completed properly and is aborted. - This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode. - Error code is set to allow user to identify error type, and HAL_UART_ErrorCallback() user callback is executed. - - -@- In the Half duplex communication, it is forbidden to run the transmit - and receive process in parallel, the UART state HAL_UART_STATE_BUSY_TX_RX can't be useful. - -@endverbatim - * @{ - */ - -/** - * @brief Sends an amount of data in blocking mode. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), - * the sent data is handled as a set of u16. In this case, Size must indicate the number - * of u16 provided through pData. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be sent - * @param Timeout Timeout duration - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) -{ - const uint8_t *pdata8bits; - const uint16_t *pdata16bits; - uint32_t tickstart = 0U; - - /* Check that a Tx process is not already ongoing */ - if (huart->gState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_BUSY_TX; - - /* Init tickstart for timeout management */ - tickstart = HAL_GetTick(); - - huart->TxXferSize = Size; - huart->TxXferCount = Size; - - /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */ - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - { - pdata8bits = NULL; - pdata16bits = (const uint16_t *) pData; - } - else - { - pdata8bits = pData; - pdata16bits = NULL; - } - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - while (huart->TxXferCount > 0U) - { - if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) - { - return HAL_TIMEOUT; - } - if (pdata8bits == NULL) - { - huart->Instance->DR = (uint16_t)(*pdata16bits & 0x01FFU); - pdata16bits++; - } - else - { - huart->Instance->DR = (uint8_t)(*pdata8bits & 0xFFU); - pdata8bits++; - } - huart->TxXferCount--; - } - - if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) - { - return HAL_TIMEOUT; - } - - /* At end of Tx process, restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; - - return HAL_OK; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Receives an amount of data in blocking mode. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), - * the received data is handled as a set of u16. In this case, Size must indicate the number - * of u16 available through pData. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be received. - * @param Timeout Timeout duration - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) -{ - uint8_t *pdata8bits; - uint16_t *pdata16bits; - uint32_t tickstart = 0U; - - /* Check that a Rx process is not already ongoing */ - if (huart->RxState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->RxState = HAL_UART_STATE_BUSY_RX; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* Init tickstart for timeout management */ - tickstart = HAL_GetTick(); - - huart->RxXferSize = Size; - huart->RxXferCount = Size; - - /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - { - pdata8bits = NULL; - pdata16bits = (uint16_t *) pData; - } - else - { - pdata8bits = pData; - pdata16bits = NULL; - } - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - /* Check the remain data to be received */ - while (huart->RxXferCount > 0U) - { - if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) - { - return HAL_TIMEOUT; - } - if (pdata8bits == NULL) - { - *pdata16bits = (uint16_t)(huart->Instance->DR & 0x01FF); - pdata16bits++; - } - else - { - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); - } - else - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); - } - pdata8bits++; - } - huart->RxXferCount--; - } - - /* At end of Rx process, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - - return HAL_OK; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Sends an amount of data in non blocking mode. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), - * the sent data is handled as a set of u16. In this case, Size must indicate the number - * of u16 provided through pData. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) -{ - /* Check that a Tx process is not already ongoing */ - if (huart->gState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->pTxBuffPtr = pData; - huart->TxXferSize = Size; - huart->TxXferCount = Size; - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_BUSY_TX; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - /* Enable the UART Transmit data register empty Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_TXE); - - return HAL_OK; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Receives an amount of data in non blocking mode. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), - * the received data is handled as a set of u16. In this case, Size must indicate the number - * of u16 available through pData. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be received. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - /* Check that a Rx process is not already ongoing */ - if (huart->RxState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(huart); - - /* Set Reception type to Standard reception */ - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - return (UART_Start_Receive_IT(huart, pData, Size)); - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Sends an amount of data in DMA mode. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), - * the sent data is handled as a set of u16. In this case, Size must indicate the number - * of u16 provided through pData. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) -{ - const uint32_t *tmp; - - /* Check that a Tx process is not already ongoing */ - if (huart->gState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->pTxBuffPtr = pData; - huart->TxXferSize = Size; - huart->TxXferCount = Size; - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_BUSY_TX; - - /* Set the UART DMA transfer complete callback */ - huart->hdmatx->XferCpltCallback = UART_DMATransmitCplt; - - /* Set the UART DMA Half transfer complete callback */ - huart->hdmatx->XferHalfCpltCallback = UART_DMATxHalfCplt; - - /* Set the DMA error callback */ - huart->hdmatx->XferErrorCallback = UART_DMAError; - - /* Set the DMA abort callback */ - huart->hdmatx->XferAbortCallback = NULL; - - /* Enable the UART transmit DMA stream */ - tmp = (const uint32_t *)&pData; - HAL_DMA_Start_IT(huart->hdmatx, *(const uint32_t *)tmp, (uint32_t)&huart->Instance->DR, Size); - - /* Clear the TC flag in the SR register by writing 0 to it */ - __HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC); - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - /* Enable the DMA transfer for transmit request by setting the DMAT bit - in the UART CR3 register */ - ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAT); - - return HAL_OK; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Receives an amount of data in DMA mode. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), - * the received data is handled as a set of u16. In this case, Size must indicate the number - * of u16 available through pData. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be received. - * @note When the UART parity is enabled (PCE = 1) the received data contains the parity bit. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - /* Check that a Rx process is not already ongoing */ - if (huart->RxState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - /* Process Locked */ - __HAL_LOCK(huart); - - /* Set Reception type to Standard reception */ - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - return (UART_Start_Receive_DMA(huart, pData, Size)); - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Pauses the DMA Transfer. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart) -{ - uint32_t dmarequest = 0x00U; - - /* Process Locked */ - __HAL_LOCK(huart); - - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); - if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) - { - /* Disable the UART DMA Tx request */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - } - - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); - if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) - { - /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* Disable the UART DMA Rx request */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - } - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @brief Resumes the DMA Transfer. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart) -{ - /* Process Locked */ - __HAL_LOCK(huart); - - if (huart->gState == HAL_UART_STATE_BUSY_TX) - { - /* Enable the UART DMA Tx request */ - ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAT); - } - - if (huart->RxState == HAL_UART_STATE_BUSY_RX) - { - /* Clear the Overrun flag before resuming the Rx transfer*/ - __HAL_UART_CLEAR_OREFLAG(huart); - - /* Re-enable PE and ERR (Frame error, noise error, overrun error) interrupts */ - if (huart->Init.Parity != UART_PARITY_NONE) - { - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); - } - ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* Enable the UART DMA Rx request */ - ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); - } - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @brief Stops the DMA Transfer. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart) -{ - uint32_t dmarequest = 0x00U; - /* The Lock is not implemented on this API to allow the user application - to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback(): - when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated - and the correspond call back is executed HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback() - */ - - /* Stop UART DMA Tx request if ongoing */ - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); - if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - - /* Abort the UART DMA Tx stream */ - if (huart->hdmatx != NULL) - { - HAL_DMA_Abort(huart->hdmatx); - } - UART_EndTxTransfer(huart); - } - - /* Stop UART DMA Rx request if ongoing */ - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); - if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* Abort the UART DMA Rx stream */ - if (huart->hdmarx != NULL) - { - HAL_DMA_Abort(huart->hdmarx); - } - UART_EndRxTransfer(huart); - } - - return HAL_OK; -} - -/** - * @brief Receive an amount of data in blocking mode till either the expected number of data is received or an IDLE event occurs. - * @note HAL_OK is returned if reception is completed (expected number of data has been received) - * or if reception is stopped after IDLE event (less than the expected number of data has been received) - * In this case, RxLen output parameter indicates number of data available in reception buffer. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), - * the received data is handled as a set of uint16_t. In this case, Size must indicate the number - * of uint16_t available through pData. - * @param huart UART handle. - * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). - * @param Size Amount of data elements (uint8_t or uint16_t) to be received. - * @param RxLen Number of data elements finally received (could be lower than Size, in case reception ends on IDLE event) - * @param Timeout Timeout duration expressed in ms (covers the whole reception sequence). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, - uint32_t Timeout) -{ - uint8_t *pdata8bits; - uint16_t *pdata16bits; - uint32_t tickstart; - - /* Check that a Rx process is not already ongoing */ - if (huart->RxState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - __HAL_LOCK(huart); - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->RxState = HAL_UART_STATE_BUSY_RX; - huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; - - /* Init tickstart for timeout management */ - tickstart = HAL_GetTick(); - - huart->RxXferSize = Size; - huart->RxXferCount = Size; - - /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - { - pdata8bits = NULL; - pdata16bits = (uint16_t *) pData; - } - else - { - pdata8bits = pData; - pdata16bits = NULL; - } - - __HAL_UNLOCK(huart); - - /* Initialize output number of received elements */ - *RxLen = 0U; - - /* as long as data have to be received */ - while (huart->RxXferCount > 0U) - { - /* Check if IDLE flag is set */ - if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) - { - /* Clear IDLE flag in ISR */ - __HAL_UART_CLEAR_IDLEFLAG(huart); - - /* If Set, but no data ever received, clear flag without exiting loop */ - /* If Set, and data has already been received, this means Idle Event is valid : End reception */ - if (*RxLen > 0U) - { - huart->RxState = HAL_UART_STATE_READY; - - return HAL_OK; - } - } - - /* Check if RXNE flag is set */ - if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE)) - { - if (pdata8bits == NULL) - { - *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); - pdata16bits++; - } - else - { - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); - } - else - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); - } - - pdata8bits++; - } - /* Increment number of received elements */ - *RxLen += 1U; - huart->RxXferCount--; - } - - /* Check for the Timeout */ - if (Timeout != HAL_MAX_DELAY) - { - if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) - { - huart->RxState = HAL_UART_STATE_READY; - - return HAL_TIMEOUT; - } - } - } - - /* Set number of received elements in output parameter : RxLen */ - *RxLen = huart->RxXferSize - huart->RxXferCount; - /* At end of Rx process, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - - return HAL_OK; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Receive an amount of data in interrupt mode till either the expected number of data is received or an IDLE event occurs. - * @note Reception is initiated by this function call. Further progress of reception is achieved thanks - * to UART interrupts raised by RXNE and IDLE events. Callback is called at end of reception indicating - * number of received data elements. - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), - * the received data is handled as a set of uint16_t. In this case, Size must indicate the number - * of uint16_t available through pData. - * @param huart UART handle. - * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). - * @param Size Amount of data elements (uint8_t or uint16_t) to be received. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - HAL_StatusTypeDef status; - - /* Check that a Rx process is not already ongoing */ - if (huart->RxState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - __HAL_LOCK(huart); - - /* Set Reception type to reception till IDLE Event*/ - huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; - - status = UART_Start_Receive_IT(huart, pData, Size); - - /* Check Rx process has been successfully started */ - if (status == HAL_OK) - { - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - __HAL_UART_CLEAR_IDLEFLAG(huart); - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - } - else - { - /* In case of errors already pending when reception is started, - Interrupts may have already been raised and lead to reception abortion. - (Overrun error for instance). - In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ - status = HAL_ERROR; - } - } - - return status; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Receive an amount of data in DMA mode till either the expected number of data is received or an IDLE event occurs. - * @note Reception is initiated by this function call. Further progress of reception is achieved thanks - * to DMA services, transferring automatically received data elements in user reception buffer and - * calling registered callbacks at half/end of reception. UART IDLE events are also used to consider - * reception phase as ended. In all cases, callback execution will indicate number of received data elements. - * @note When the UART parity is enabled (PCE = 1), the received data contain - * the parity bit (MSB position). - * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), - * the received data is handled as a set of uint16_t. In this case, Size must indicate the number - * of uint16_t available through pData. - * @param huart UART handle. - * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). - * @param Size Amount of data elements (uint8_t or uint16_t) to be received. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - HAL_StatusTypeDef status; - - /* Check that a Rx process is not already ongoing */ - if (huart->RxState == HAL_UART_STATE_READY) - { - if ((pData == NULL) || (Size == 0U)) - { - return HAL_ERROR; - } - - __HAL_LOCK(huart); - - /* Set Reception type to reception till IDLE Event*/ - huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; - - status = UART_Start_Receive_DMA(huart, pData, Size); - - /* Check Rx process has been successfully started */ - if (status == HAL_OK) - { - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - __HAL_UART_CLEAR_IDLEFLAG(huart); - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - } - else - { - /* In case of errors already pending when reception is started, - Interrupts may have already been raised and lead to reception abortion. - (Overrun error for instance). - In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ - status = HAL_ERROR; - } - } - - return status; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Abort ongoing transfers (blocking mode). - * @param huart UART handle. - * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable UART Interrupts (Tx and Rx) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) - * - Set handle State to READY - * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart) -{ - /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); - } - - /* Disable the UART DMA Tx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - - /* Abort the UART DMA Tx stream: use blocking DMA Abort API (no callback) */ - if (huart->hdmatx != NULL) - { - /* Set the UART DMA Abort callback to Null. - No call back execution at end of DMA abort procedure */ - huart->hdmatx->XferAbortCallback = NULL; - - if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK) - { - if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT) - { - /* Set error code to DMA */ - huart->ErrorCode = HAL_UART_ERROR_DMA; - - return HAL_TIMEOUT; - } - } - } - } - - /* Disable the UART DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* Abort the UART DMA Rx stream: use blocking DMA Abort API (no callback) */ - if (huart->hdmarx != NULL) - { - /* Set the UART DMA Abort callback to Null. - No call back execution at end of DMA abort procedure */ - huart->hdmarx->XferAbortCallback = NULL; - - if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK) - { - if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT) - { - /* Set error code to DMA */ - huart->ErrorCode = HAL_UART_ERROR_DMA; - - return HAL_TIMEOUT; - } - } - } - } - - /* Reset Tx and Rx transfer counters */ - huart->TxXferCount = 0x00U; - huart->RxXferCount = 0x00U; - - /* Reset ErrorCode */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - - /* Restore huart->RxState and huart->gState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->gState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - return HAL_OK; -} - -/** - * @brief Abort ongoing Transmit transfer (blocking mode). - * @param huart UART handle. - * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable UART Interrupts (Tx) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) - * - Set handle State to READY - * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart) -{ - /* Disable TXEIE and TCIE interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); - - /* Disable the UART DMA Tx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - - /* Abort the UART DMA Tx stream : use blocking DMA Abort API (no callback) */ - if (huart->hdmatx != NULL) - { - /* Set the UART DMA Abort callback to Null. - No call back execution at end of DMA abort procedure */ - huart->hdmatx->XferAbortCallback = NULL; - - if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK) - { - if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT) - { - /* Set error code to DMA */ - huart->ErrorCode = HAL_UART_ERROR_DMA; - - return HAL_TIMEOUT; - } - } - } - } - - /* Reset Tx transfer counter */ - huart->TxXferCount = 0x00U; - - /* Restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; - - return HAL_OK; -} - -/** - * @brief Abort ongoing Receive transfer (blocking mode). - * @param huart UART handle. - * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable UART Interrupts (Rx) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) - * - Set handle State to READY - * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart) -{ - /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); - } - - /* Disable the UART DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* Abort the UART DMA Rx stream : use blocking DMA Abort API (no callback) */ - if (huart->hdmarx != NULL) - { - /* Set the UART DMA Abort callback to Null. - No call back execution at end of DMA abort procedure */ - huart->hdmarx->XferAbortCallback = NULL; - - if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK) - { - if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT) - { - /* Set error code to DMA */ - huart->ErrorCode = HAL_UART_ERROR_DMA; - - return HAL_TIMEOUT; - } - } - } - } - - /* Reset Rx transfer counter */ - huart->RxXferCount = 0x00U; - - /* Restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - return HAL_OK; -} - -/** - * @brief Abort ongoing transfers (Interrupt mode). - * @param huart UART handle. - * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable UART Interrupts (Tx and Rx) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) - * - Set handle State to READY - * - At abort completion, call user abort complete callback - * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be - * considered as completed only when user abort complete callback is executed (not when exiting function). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) -{ - uint32_t AbortCplt = 0x01U; - - /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); - } - - /* If DMA Tx and/or DMA Rx Handles are associated to UART Handle, DMA Abort complete callbacks should be initialised - before any call to DMA Abort functions */ - /* DMA Tx Handle is valid */ - if (huart->hdmatx != NULL) - { - /* Set DMA Abort Complete callback if UART DMA Tx request if enabled. - Otherwise, set it to NULL */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) - { - huart->hdmatx->XferAbortCallback = UART_DMATxAbortCallback; - } - else - { - huart->hdmatx->XferAbortCallback = NULL; - } - } - /* DMA Rx Handle is valid */ - if (huart->hdmarx != NULL) - { - /* Set DMA Abort Complete callback if UART DMA Rx request if enabled. - Otherwise, set it to NULL */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - { - huart->hdmarx->XferAbortCallback = UART_DMARxAbortCallback; - } - else - { - huart->hdmarx->XferAbortCallback = NULL; - } - } - - /* Disable the UART DMA Tx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) - { - /* Disable DMA Tx at UART level */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - - /* Abort the UART DMA Tx stream : use non blocking DMA Abort API (callback) */ - if (huart->hdmatx != NULL) - { - /* UART Tx DMA Abort callback has already been initialised : - will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ - - /* Abort DMA TX */ - if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) - { - huart->hdmatx->XferAbortCallback = NULL; - } - else - { - AbortCplt = 0x00U; - } - } - } - - /* Disable the UART DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* Abort the UART DMA Rx stream : use non blocking DMA Abort API (callback) */ - if (huart->hdmarx != NULL) - { - /* UART Rx DMA Abort callback has already been initialised : - will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ - - /* Abort DMA RX */ - if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) - { - huart->hdmarx->XferAbortCallback = NULL; - AbortCplt = 0x01U; - } - else - { - AbortCplt = 0x00U; - } - } - } - - /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ - if (AbortCplt == 0x01U) - { - /* Reset Tx and Rx transfer counters */ - huart->TxXferCount = 0x00U; - huart->RxXferCount = 0x00U; - - /* Reset ErrorCode */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - - /* Restore huart->gState and huart->RxState to Ready */ - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* As no DMA to be aborted, call directly user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort complete callback */ - huart->AbortCpltCallback(huart); -#else - /* Call legacy weak Abort complete callback */ - HAL_UART_AbortCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - - return HAL_OK; -} - -/** - * @brief Abort ongoing Transmit transfer (Interrupt mode). - * @param huart UART handle. - * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable UART Interrupts (Tx) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) - * - Set handle State to READY - * - At abort completion, call user abort complete callback - * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be - * considered as completed only when user abort complete callback is executed (not when exiting function). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart) -{ - /* Disable TXEIE and TCIE interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); - - /* Disable the UART DMA Tx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - - /* Abort the UART DMA Tx stream : use blocking DMA Abort API (no callback) */ - if (huart->hdmatx != NULL) - { - /* Set the UART DMA Abort callback : - will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ - huart->hdmatx->XferAbortCallback = UART_DMATxOnlyAbortCallback; - - /* Abort DMA TX */ - if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) - { - /* Call Directly huart->hdmatx->XferAbortCallback function in case of error */ - huart->hdmatx->XferAbortCallback(huart->hdmatx); - } - } - else - { - /* Reset Tx transfer counter */ - huart->TxXferCount = 0x00U; - - /* Restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; - - /* As no DMA to be aborted, call directly user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort Transmit Complete Callback */ - huart->AbortTransmitCpltCallback(huart); -#else - /* Call legacy weak Abort Transmit Complete Callback */ - HAL_UART_AbortTransmitCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - } - else - { - /* Reset Tx transfer counter */ - huart->TxXferCount = 0x00U; - - /* Restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; - - /* As no DMA to be aborted, call directly user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort Transmit Complete Callback */ - huart->AbortTransmitCpltCallback(huart); -#else - /* Call legacy weak Abort Transmit Complete Callback */ - HAL_UART_AbortTransmitCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - - return HAL_OK; -} - -/** - * @brief Abort ongoing Receive transfer (Interrupt mode). - * @param huart UART handle. - * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. - * This procedure performs following operations : - * - Disable UART Interrupts (Rx) - * - Disable the DMA transfer in the peripheral register (if enabled) - * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) - * - Set handle State to READY - * - At abort completion, call user abort complete callback - * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be - * considered as completed only when user abort complete callback is executed (not when exiting function). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart) -{ - /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); - } - - /* Disable the UART DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* Abort the UART DMA Rx stream : use blocking DMA Abort API (no callback) */ - if (huart->hdmarx != NULL) - { - /* Set the UART DMA Abort callback : - will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ - huart->hdmarx->XferAbortCallback = UART_DMARxOnlyAbortCallback; - - /* Abort DMA RX */ - if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) - { - /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */ - huart->hdmarx->XferAbortCallback(huart->hdmarx); - } - } - else - { - /* Reset Rx transfer counter */ - huart->RxXferCount = 0x00U; - - /* Restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* As no DMA to be aborted, call directly user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort Receive Complete Callback */ - huart->AbortReceiveCpltCallback(huart); -#else - /* Call legacy weak Abort Receive Complete Callback */ - HAL_UART_AbortReceiveCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - } - else - { - /* Reset Rx transfer counter */ - huart->RxXferCount = 0x00U; - - /* Restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* As no DMA to be aborted, call directly user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort Receive Complete Callback */ - huart->AbortReceiveCpltCallback(huart); -#else - /* Call legacy weak Abort Receive Complete Callback */ - HAL_UART_AbortReceiveCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - - return HAL_OK; -} - -/** - * @brief This function handles UART interrupt request. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) -{ - uint32_t isrflags = READ_REG(huart->Instance->SR); - uint32_t cr1its = READ_REG(huart->Instance->CR1); - uint32_t cr3its = READ_REG(huart->Instance->CR3); - uint32_t errorflags = 0x00U; - uint32_t dmarequest = 0x00U; - - /* If no error occurs */ - errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE)); - if (errorflags == RESET) - { - /* UART in mode Receiver -------------------------------------------------*/ - if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) - { - UART_Receive_IT(huart); - return; - } - } - - /* If some errors occur */ - if ((errorflags != RESET) && (((cr3its & USART_CR3_EIE) != RESET) - || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET))) - { - /* UART parity error interrupt occurred ----------------------------------*/ - if (((isrflags & USART_SR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) - { - huart->ErrorCode |= HAL_UART_ERROR_PE; - } - - /* UART noise error interrupt occurred -----------------------------------*/ - if (((isrflags & USART_SR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) - { - huart->ErrorCode |= HAL_UART_ERROR_NE; - } - - /* UART frame error interrupt occurred -----------------------------------*/ - if (((isrflags & USART_SR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) - { - huart->ErrorCode |= HAL_UART_ERROR_FE; - } - - /* UART Over-Run interrupt occurred --------------------------------------*/ - if (((isrflags & USART_SR_ORE) != RESET) && (((cr1its & USART_CR1_RXNEIE) != RESET) - || ((cr3its & USART_CR3_EIE) != RESET))) - { - huart->ErrorCode |= HAL_UART_ERROR_ORE; - } - - /* Call UART Error Call back function if need be --------------------------*/ - if (huart->ErrorCode != HAL_UART_ERROR_NONE) - { - /* UART in mode Receiver -----------------------------------------------*/ - if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) - { - UART_Receive_IT(huart); - } - - /* If Overrun error occurs, or if any error occurs in DMA mode reception, - consider error as blocking */ - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); - if (((huart->ErrorCode & HAL_UART_ERROR_ORE) != RESET) || dmarequest) - { - /* Blocking error : transfer is aborted - Set the UART state ready to be able to start again the process, - Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ - UART_EndRxTransfer(huart); - - /* Disable the UART DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* Abort the UART DMA Rx stream */ - if (huart->hdmarx != NULL) - { - /* Set the UART DMA Abort callback : - will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */ - huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError; - if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) - { - /* Call Directly XferAbortCallback function in case of error */ - huart->hdmarx->XferAbortCallback(huart->hdmarx); - } - } - else - { - /* Call user error callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - } - else - { - /* Call user error callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - } - else - { - /* Non Blocking error : transfer could go on. - Error is notified to user through user error callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - - huart->ErrorCode = HAL_UART_ERROR_NONE; - } - } - return; - } /* End if some error occurs */ - - /* Check current reception Mode : - If Reception till IDLE event has been selected : */ - if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - && ((isrflags & USART_SR_IDLE) != 0U) - && ((cr1its & USART_SR_IDLE) != 0U)) - { - __HAL_UART_CLEAR_IDLEFLAG(huart); - - /* Check if DMA mode is enabled in UART */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - { - /* DMA mode enabled */ - /* Check received length : If all expected data are received, do nothing, - (DMA cplt callback will be called). - Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ - uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx); - if ((nb_remaining_rx_data > 0U) - && (nb_remaining_rx_data < huart->RxXferSize)) - { - /* Reception is not complete */ - huart->RxXferCount = nb_remaining_rx_data; - - /* In Normal mode, end DMA xfer and HAL UART Rx process*/ - if (huart->hdmarx->Init.Mode != DMA_CIRCULAR) - { - /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* Disable the DMA transfer for the receiver request by resetting the DMAR bit - in the UART CR3 register */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* At end of Rx process, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - - /* Last bytes received, so no need as the abort is immediate */ - (void)HAL_DMA_Abort(huart->hdmarx); - } -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx Event callback*/ - huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - return; - } - else - { - /* DMA mode not enabled */ - /* Check received length : If all expected data are received, do nothing. - Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ - uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount; - if ((huart->RxXferCount > 0U) - && (nb_rx_data > 0U)) - { - /* Disable the UART Parity Error Interrupt and RXNE interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - - /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* Rx process is completed, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx complete callback*/ - huart->RxEventCallback(huart, nb_rx_data); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, nb_rx_data); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - return; - } - } - - /* UART in mode Transmitter ------------------------------------------------*/ - if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) - { - UART_Transmit_IT(huart); - return; - } - - /* UART in mode Transmitter end --------------------------------------------*/ - if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET)) - { - UART_EndTransmit_IT(huart); - return; - } -} - -/** - * @brief Tx Transfer completed callbacks. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_TxCpltCallback could be implemented in the user file - */ -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_TxHalfCpltCallback could be implemented in the user file - */ -} - -/** - * @brief Rx Transfer completed callbacks. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_RxCpltCallback could be implemented in the user file - */ -} - -/** - * @brief Rx Half Transfer completed callbacks. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_RxHalfCpltCallback could be implemented in the user file - */ -} - -/** - * @brief UART error callbacks. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_ErrorCallback could be implemented in the user file - */ -} - -/** - * @brief UART Abort Complete callback. - * @param huart UART handle. - * @retval None - */ -__weak void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_UART_AbortCpltCallback can be implemented in the user file. - */ -} - -/** - * @brief UART Abort Complete callback. - * @param huart UART handle. - * @retval None - */ -__weak void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_UART_AbortTransmitCpltCallback can be implemented in the user file. - */ -} - -/** - * @brief UART Abort Receive Complete callback. - * @param huart UART handle. - * @retval None - */ -__weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_UART_AbortReceiveCpltCallback can be implemented in the user file. - */ -} - -/** - * @brief Reception Event Callback (Rx event notification called after use of advanced reception service). - * @param huart UART handle - * @param Size Number of data available in application reception buffer (indicates a position in - * reception buffer until which, data are available) - * @retval None - */ -__weak void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - UNUSED(Size); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_UARTEx_RxEventCallback can be implemented in the user file. - */ -} - -/** - * @} - */ - -/** @defgroup UART_Exported_Functions_Group3 Peripheral Control functions - * @brief UART control functions - * -@verbatim - ============================================================================== - ##### Peripheral Control functions ##### - ============================================================================== - [..] - This subsection provides a set of functions allowing to control the UART: - (+) HAL_LIN_SendBreak() API can be helpful to transmit the break character. - (+) HAL_MultiProcessor_EnterMuteMode() API can be helpful to enter the UART in mute mode. - (+) HAL_MultiProcessor_ExitMuteMode() API can be helpful to exit the UART mute mode by software. - (+) HAL_HalfDuplex_EnableTransmitter() API to enable the UART transmitter and disables the UART receiver in Half Duplex mode - (+) HAL_HalfDuplex_EnableReceiver() API to enable the UART receiver and disables the UART transmitter in Half Duplex mode - -@endverbatim - * @{ - */ - -/** - * @brief Transmits break characters. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart) -{ - /* Check the parameters */ - assert_param(IS_UART_INSTANCE(huart->Instance)); - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->gState = HAL_UART_STATE_BUSY; - - /* Send break characters */ - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_SBK); - - huart->gState = HAL_UART_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @brief Enters the UART in mute mode. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart) -{ - /* Check the parameters */ - assert_param(IS_UART_INSTANCE(huart->Instance)); - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->gState = HAL_UART_STATE_BUSY; - - /* Enable the USART mute mode by setting the RWU bit in the CR1 register */ - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RWU); - - huart->gState = HAL_UART_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @brief Exits the UART mute mode: wake up software. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart) -{ - /* Check the parameters */ - assert_param(IS_UART_INSTANCE(huart->Instance)); - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->gState = HAL_UART_STATE_BUSY; - - /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RWU); - - huart->gState = HAL_UART_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @brief Enables the UART transmitter and disables the UART receiver. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart) -{ - uint32_t tmpreg = 0x00U; - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->gState = HAL_UART_STATE_BUSY; - - /*-------------------------- USART CR1 Configuration -----------------------*/ - tmpreg = huart->Instance->CR1; - - /* Clear TE and RE bits */ - tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE)); - - /* Enable the USART's transmit interface by setting the TE bit in the USART CR1 register */ - tmpreg |= (uint32_t)USART_CR1_TE; - - /* Write to USART CR1 */ - WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg); - - huart->gState = HAL_UART_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @brief Enables the UART receiver and disables the UART transmitter. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart) -{ - uint32_t tmpreg = 0x00U; - - /* Process Locked */ - __HAL_LOCK(huart); - - huart->gState = HAL_UART_STATE_BUSY; - - /*-------------------------- USART CR1 Configuration -----------------------*/ - tmpreg = huart->Instance->CR1; - - /* Clear TE and RE bits */ - tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE)); - - /* Enable the USART's receive interface by setting the RE bit in the USART CR1 register */ - tmpreg |= (uint32_t)USART_CR1_RE; - - /* Write to USART CR1 */ - WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg); - - huart->gState = HAL_UART_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Errors functions - * @brief UART State and Errors functions - * -@verbatim - ============================================================================== - ##### Peripheral State and Errors functions ##### - ============================================================================== - [..] - This subsection provides a set of functions allowing to return the State of - UART communication process, return Peripheral Errors occurred during communication - process - (+) HAL_UART_GetState() API can be helpful to check in run-time the state of the UART peripheral. - (+) HAL_UART_GetError() check in run-time errors that could be occurred during communication. - -@endverbatim - * @{ - */ - -/** - * @brief Returns the UART state. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL state - */ -HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart) -{ - uint32_t temp1 = 0x00U, temp2 = 0x00U; - temp1 = huart->gState; - temp2 = huart->RxState; - - return (HAL_UART_StateTypeDef)(temp1 | temp2); -} - -/** - * @brief Return the UART error code - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART. - * @retval UART Error Code - */ -uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart) -{ - return huart->ErrorCode; -} - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup UART_Private_Functions UART Private Functions - * @{ - */ - -/** - * @brief Initialize the callbacks to their default values. - * @param huart UART handle. - * @retval none - */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) -void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart) -{ - /* Init the UART Callback settings */ - huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ - huart->TxCpltCallback = HAL_UART_TxCpltCallback; /* Legacy weak TxCpltCallback */ - huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ - huart->RxCpltCallback = HAL_UART_RxCpltCallback; /* Legacy weak RxCpltCallback */ - huart->ErrorCallback = HAL_UART_ErrorCallback; /* Legacy weak ErrorCallback */ - huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ - huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ - huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ - huart->RxEventCallback = HAL_UARTEx_RxEventCallback; /* Legacy weak RxEventCallback */ - -} -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - -/** - * @brief DMA UART transmit process complete callback. - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - /* DMA Normal mode*/ - if ((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U) - { - huart->TxXferCount = 0x00U; - - /* Disable the DMA transfer for transmit request by setting the DMAT bit - in the UART CR3 register */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - - /* Enable the UART Transmit Complete Interrupt */ - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); - - } - /* DMA Circular mode */ - else - { -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Tx complete callback*/ - huart->TxCpltCallback(huart); -#else - /*Call legacy weak Tx complete callback*/ - HAL_UART_TxCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } -} - -/** - * @brief DMA UART transmit process half complete callback - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Tx complete callback*/ - huart->TxHalfCpltCallback(huart); -#else - /*Call legacy weak Tx complete callback*/ - HAL_UART_TxHalfCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA UART receive process complete callback. - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - /* DMA Normal mode*/ - if ((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U) - { - huart->RxXferCount = 0U; - - /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* Disable the DMA transfer for the receiver request by setting the DMAR bit - in the UART CR3 register */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - /* At end of Rx process, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - - /* If Reception till IDLE event has been selected, Disable IDLE Interrupt */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - } - } - - /* Check current reception Mode : - If Reception till IDLE event has been selected : use Rx Event callback */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx Event callback*/ - huart->RxEventCallback(huart, huart->RxXferSize); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - else - { - /* In other cases : use Rx Complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx complete callback*/ - huart->RxCpltCallback(huart); -#else - /*Call legacy weak Rx complete callback*/ - HAL_UART_RxCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } -} - -/** - * @brief DMA UART receive process half complete callback - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - /* Check current reception Mode : - If Reception till IDLE event has been selected : use Rx Event callback */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx Event callback*/ - huart->RxEventCallback(huart, huart->RxXferSize / 2U); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize / 2U); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - else - { - /* In other cases : use Rx Half Complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx Half complete callback*/ - huart->RxHalfCpltCallback(huart); -#else - /*Call legacy weak Rx Half complete callback*/ - HAL_UART_RxHalfCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } -} - -/** - * @brief DMA UART communication error callback. - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMAError(DMA_HandleTypeDef *hdma) -{ - uint32_t dmarequest = 0x00U; - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - /* Stop UART DMA Tx request if ongoing */ - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); - if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) - { - huart->TxXferCount = 0x00U; - UART_EndTxTransfer(huart); - } - - /* Stop UART DMA Rx request if ongoing */ - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); - if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) - { - huart->RxXferCount = 0x00U; - UART_EndRxTransfer(huart); - } - - huart->ErrorCode |= HAL_UART_ERROR_DMA; -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - -/** - * @brief This function handles UART Communication Timeout. It waits - * until a flag is no longer in the specified status. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @param Flag specifies the UART flag to check. - * @param Status The actual Flag status (SET or RESET). - * @param Tickstart Tick start value - * @param Timeout Timeout duration - * @retval HAL status - */ -static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, - uint32_t Tickstart, uint32_t Timeout) -{ - /* Wait until flag is set */ - while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) - { - /* Check for the Timeout */ - if (Timeout != HAL_MAX_DELAY) - { - if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) - { - /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - return HAL_TIMEOUT; - } - } - } - return HAL_OK; -} - -/** - * @brief Start Receive operation in interrupt mode. - * @note This function could be called by all HAL UART API providing reception in Interrupt mode. - * @note When calling this function, parameters validity is considered as already checked, - * i.e. Rx State, buffer address, ... - * UART Handle is assumed as Locked. - * @param huart UART handle. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be received. - * @retval HAL status - */ -HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - huart->pRxBuffPtr = pData; - huart->RxXferSize = Size; - huart->RxXferCount = Size; - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->RxState = HAL_UART_STATE_BUSY_RX; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - if (huart->Init.Parity != UART_PARITY_NONE) - { - /* Enable the UART Parity Error Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_PE); - } - - /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ - __HAL_UART_ENABLE_IT(huart, UART_IT_ERR); - - /* Enable the UART Data Register not empty Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE); - - return HAL_OK; -} - -/** - * @brief Start Receive operation in DMA mode. - * @note This function could be called by all HAL UART API providing reception in DMA mode. - * @note When calling this function, parameters validity is considered as already checked, - * i.e. Rx State, buffer address, ... - * UART Handle is assumed as Locked. - * @param huart UART handle. - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be received. - * @retval HAL status - */ -HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - uint32_t *tmp; - - huart->pRxBuffPtr = pData; - huart->RxXferSize = Size; - - huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->RxState = HAL_UART_STATE_BUSY_RX; - - /* Set the UART DMA transfer complete callback */ - huart->hdmarx->XferCpltCallback = UART_DMAReceiveCplt; - - /* Set the UART DMA Half transfer complete callback */ - huart->hdmarx->XferHalfCpltCallback = UART_DMARxHalfCplt; - - /* Set the DMA error callback */ - huart->hdmarx->XferErrorCallback = UART_DMAError; - - /* Set the DMA abort callback */ - huart->hdmarx->XferAbortCallback = NULL; - - /* Enable the DMA stream */ - tmp = (uint32_t *)&pData; - HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->DR, *(uint32_t *)tmp, Size); - - /* Clear the Overrun flag just before enabling the DMA Rx request: can be mandatory for the second transfer */ - __HAL_UART_CLEAR_OREFLAG(huart); - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - if (huart->Init.Parity != UART_PARITY_NONE) - { - /* Enable the UART Parity Error Interrupt */ - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); - } - - /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ - ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* Enable the DMA transfer for the receiver request by setting the DMAR bit - in the UART CR3 register */ - ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); - - return HAL_OK; -} - -/** - * @brief End ongoing Tx transfer on UART peripheral (following error detection or Transmit completion). - * @param huart UART handle. - * @retval None - */ -static void UART_EndTxTransfer(UART_HandleTypeDef *huart) -{ - /* Disable TXEIE and TCIE interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); - - /* At end of Tx process, restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; -} - -/** - * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). - * @param huart UART handle. - * @retval None - */ -static void UART_EndRxTransfer(UART_HandleTypeDef *huart) -{ - /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - } - - /* At end of Rx process, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; -} - -/** - * @brief DMA UART communication abort callback, when initiated by HAL services on Error - * (To be called at end of DMA Abort procedure following error occurrence). - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - huart->RxXferCount = 0x00U; - huart->TxXferCount = 0x00U; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA UART Tx communication abort callback, when initiated by user - * (To be called at end of DMA Tx Abort procedure following user abort request). - * @note When this callback is executed, User Abort complete call back is called only if no - * Abort still ongoing for Rx DMA Handle. - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - huart->hdmatx->XferAbortCallback = NULL; - - /* Check if an Abort process is still ongoing */ - if (huart->hdmarx != NULL) - { - if (huart->hdmarx->XferAbortCallback != NULL) - { - return; - } - } - - /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ - huart->TxXferCount = 0x00U; - huart->RxXferCount = 0x00U; - - /* Reset ErrorCode */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - - /* Restore huart->gState and huart->RxState to Ready */ - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* Call user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort complete callback */ - huart->AbortCpltCallback(huart); -#else - /* Call legacy weak Abort complete callback */ - HAL_UART_AbortCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA UART Rx communication abort callback, when initiated by user - * (To be called at end of DMA Rx Abort procedure following user abort request). - * @note When this callback is executed, User Abort complete call back is called only if no - * Abort still ongoing for Tx DMA Handle. - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - huart->hdmarx->XferAbortCallback = NULL; - - /* Check if an Abort process is still ongoing */ - if (huart->hdmatx != NULL) - { - if (huart->hdmatx->XferAbortCallback != NULL) - { - return; - } - } - - /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ - huart->TxXferCount = 0x00U; - huart->RxXferCount = 0x00U; - - /* Reset ErrorCode */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - - /* Restore huart->gState and huart->RxState to Ready */ - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* Call user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort complete callback */ - huart->AbortCpltCallback(huart); -#else - /* Call legacy weak Abort complete callback */ - HAL_UART_AbortCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA UART Tx communication abort callback, when initiated by user by a call to - * HAL_UART_AbortTransmit_IT API (Abort only Tx transfer) - * (This callback is executed at end of DMA Tx Abort procedure following user abort request, - * and leads to user Tx Abort Complete callback execution). - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - huart->TxXferCount = 0x00U; - - /* Restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; - - /* Call user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort Transmit Complete Callback */ - huart->AbortTransmitCpltCallback(huart); -#else - /* Call legacy weak Abort Transmit Complete Callback */ - HAL_UART_AbortTransmitCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - -/** - * @brief DMA UART Rx communication abort callback, when initiated by user by a call to - * HAL_UART_AbortReceive_IT API (Abort only Rx transfer) - * (This callback is executed at end of DMA Rx Abort procedure following user abort request, - * and leads to user Rx Abort Complete callback execution). - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma) -{ - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - huart->RxXferCount = 0x00U; - - /* Restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* Call user Abort complete callback */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort Receive Complete Callback */ - huart->AbortReceiveCpltCallback(huart); -#else - /* Call legacy weak Abort Receive Complete Callback */ - HAL_UART_AbortReceiveCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - -/** - * @brief Sends an amount of data in non blocking mode. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart) -{ - const uint16_t *tmp; - - /* Check that a Tx process is ongoing */ - if (huart->gState == HAL_UART_STATE_BUSY_TX) - { - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - { - tmp = (const uint16_t *) huart->pTxBuffPtr; - huart->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF); - huart->pTxBuffPtr += 2U; - } - else - { - huart->Instance->DR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0x00FF); - } - - if (--huart->TxXferCount == 0U) - { - /* Disable the UART Transmit Data Register Empty Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_TXE); - - /* Enable the UART Transmit Complete Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_TC); - } - return HAL_OK; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Wraps up transmission in non blocking mode. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart) -{ - /* Disable the UART Transmit Complete Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_TC); - - /* Tx process is ended, restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Tx complete callback*/ - huart->TxCpltCallback(huart); -#else - /*Call legacy weak Tx complete callback*/ - HAL_UART_TxCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - - return HAL_OK; -} - -/** - * @brief Receives an amount of data in non blocking mode - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart) -{ - uint8_t *pdata8bits; - uint16_t *pdata16bits; - - /* Check that a Rx process is ongoing */ - if (huart->RxState == HAL_UART_STATE_BUSY_RX) - { - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - { - pdata8bits = NULL; - pdata16bits = (uint16_t *) huart->pRxBuffPtr; - *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); - huart->pRxBuffPtr += 2U; - } - else - { - pdata8bits = (uint8_t *) huart->pRxBuffPtr; - pdata16bits = NULL; - - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); - } - else - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); - } - huart->pRxBuffPtr += 1U; - } - - if (--huart->RxXferCount == 0U) - { - /* Disable the UART Data Register not empty Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE); - - /* Disable the UART Parity Error Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_PE); - - /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ - __HAL_UART_DISABLE_IT(huart, UART_IT_ERR); - - /* Rx process is completed, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - - /* Check current reception Mode : - If Reception till IDLE event has been selected : */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - { - /* Set reception type to Standard */ - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - - /* Disable IDLE interrupt */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - - /* Check if IDLE flag is set */ - if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) - { - /* Clear IDLE flag in ISR */ - __HAL_UART_CLEAR_IDLEFLAG(huart); - } - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx Event callback*/ - huart->RxEventCallback(huart, huart->RxXferSize); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - else - { - /* Standard reception API called */ -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx complete callback*/ - huart->RxCpltCallback(huart); -#else - /*Call legacy weak Rx complete callback*/ - HAL_UART_RxCpltCallback(huart); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - - return HAL_OK; - } - return HAL_OK; - } - else - { - return HAL_BUSY; - } -} - -/** - * @brief Configures the UART peripheral. - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -static void UART_SetConfig(UART_HandleTypeDef *huart) -{ - uint32_t tmpreg; - uint32_t pclk; - - /* Check the parameters */ - assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate)); - assert_param(IS_UART_STOPBITS(huart->Init.StopBits)); - assert_param(IS_UART_PARITY(huart->Init.Parity)); - assert_param(IS_UART_MODE(huart->Init.Mode)); - - /*-------------------------- USART CR2 Configuration -----------------------*/ - /* Configure the UART Stop Bits: Set STOP[13:12] bits - according to huart->Init.StopBits value */ - MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits); - - /*-------------------------- USART CR1 Configuration -----------------------*/ - /* Configure the UART Word Length, Parity and mode: - Set the M bits according to huart->Init.WordLength value - Set PCE and PS bits according to huart->Init.Parity value - Set TE and RE bits according to huart->Init.Mode value - Set OVER8 bit according to huart->Init.OverSampling value */ - - tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling; - MODIFY_REG(huart->Instance->CR1, - (uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8), - tmpreg); - - /*-------------------------- USART CR3 Configuration -----------------------*/ - /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */ - MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE), huart->Init.HwFlowCtl); - - -#if defined(USART6) && defined(UART9) && defined(UART10) - if ((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9) || (huart->Instance == UART10)) - { - pclk = HAL_RCC_GetPCLK2Freq(); - } -#elif defined(USART6) - if ((huart->Instance == USART1) || (huart->Instance == USART6)) - { - pclk = HAL_RCC_GetPCLK2Freq(); - } -#else - if (huart->Instance == USART1) - { - pclk = HAL_RCC_GetPCLK2Freq(); - } -#endif /* USART6 */ - else - { - pclk = HAL_RCC_GetPCLK1Freq(); - } - /*-------------------------- USART BRR Configuration ---------------------*/ - if (huart->Init.OverSampling == UART_OVERSAMPLING_8) - { - huart->Instance->BRR = UART_BRR_SAMPLING8(pclk, huart->Init.BaudRate); - } - else - { - huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); - } -} - -/** - * @} - */ - -#endif /* HAL_UART_MODULE_ENABLED */ -/** - * @} - */ - -/** - * @} - */ - diff --git a/MDK-ARM/EventRecorderStub.scvd b/MDK-ARM/EventRecorderStub.scvd deleted file mode 100644 index 2956b29..0000000 --- a/MDK-ARM/EventRecorderStub.scvd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/MDK-ARM/RTE/_TEST2/RTE_Components.h b/MDK-ARM/RTE/_remote_dido_unit/RTE_Components.h similarity index 80% rename from MDK-ARM/RTE/_TEST2/RTE_Components.h rename to MDK-ARM/RTE/_remote_dido_unit/RTE_Components.h index 5d1cac6..089864e 100644 --- a/MDK-ARM/RTE/_TEST2/RTE_Components.h +++ b/MDK-ARM/RTE/_remote_dido_unit/RTE_Components.h @@ -3,8 +3,8 @@ * Auto generated Run-Time-Environment Configuration File * *** Do not modify ! *** * - * Project: 'TEST2' - * Target: 'TEST2' + * Project: 'remote_dido_unit' + * Target: 'remote_dido_unit' */ #ifndef RTE_COMPONENTS_H diff --git a/MDK-ARM/RTE/_semi-finished_product_testing/RTE_Components.h b/MDK-ARM/RTE/_semi-finished_product_testing/RTE_Components.h deleted file mode 100644 index 3ea7478..0000000 --- a/MDK-ARM/RTE/_semi-finished_product_testing/RTE_Components.h +++ /dev/null @@ -1,21 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'semi-finished_product_testing' - * Target: 'semi-finished_product_testing' - */ - -#ifndef RTE_COMPONENTS_H -#define RTE_COMPONENTS_H - - -/* - * Define the Device Header File: - */ -#define CMSIS_device_header "stm32f4xx.h" - - - -#endif /* RTE_COMPONENTS_H */ diff --git a/MDK-ARM/semi-finished_product_testing.uvoptx b/MDK-ARM/remote_dido_unit.uvoptx similarity index 92% rename from MDK-ARM/semi-finished_product_testing.uvoptx rename to MDK-ARM/remote_dido_unit.uvoptx index d6a9acd..2c637cd 100644 --- a/MDK-ARM/semi-finished_product_testing.uvoptx +++ b/MDK-ARM/remote_dido_unit.uvoptx @@ -22,7 +22,7 @@ - semi-finished_product_testing + remote_dido_unit 0x4 ARM-ADS @@ -173,7 +173,7 @@ 1 - 1 + 0 0 2 10000000 @@ -183,7 +183,7 @@ Application/MDK-ARM - 0 + 1 0 0 0 @@ -203,7 +203,7 @@ Application/User/Core - 0 + 1 0 0 0 @@ -250,30 +250,6 @@ 0 0 0 - ../Core/Src/dma.c - dma.c - 0 - 0 - - - 2 - 6 - 1 - 0 - 0 - 0 - ../Core/Src/spi.c - spi.c - 0 - 0 - - - 2 - 7 - 1 - 0 - 0 - 0 ../Core/Src/tim.c tim.c 0 @@ -281,19 +257,7 @@ 2 - 8 - 1 - 0 - 0 - 0 - ../Core/Src/usart.c - usart.c - 0 - 0 - - - 2 - 9 + 6 1 0 0 @@ -305,7 +269,7 @@ 2 - 10 + 7 1 0 0 @@ -317,7 +281,7 @@ 2 - 11 + 8 1 0 0 @@ -337,7 +301,7 @@ 0 3 - 12 + 9 1 0 0 @@ -357,7 +321,7 @@ 0 4 - 13 + 10 1 0 0 @@ -377,7 +341,7 @@ 0 5 - 14 + 11 1 0 0 @@ -397,7 +361,7 @@ 0 6 - 15 + 12 1 0 0 @@ -409,7 +373,7 @@ 6 - 16 + 13 1 0 0 @@ -421,7 +385,7 @@ 6 - 17 + 14 1 0 0 @@ -433,7 +397,7 @@ 6 - 18 + 15 1 0 0 @@ -445,7 +409,7 @@ 6 - 19 + 16 1 0 0 @@ -457,7 +421,7 @@ 6 - 20 + 17 1 0 0 @@ -469,7 +433,7 @@ 6 - 21 + 18 1 0 0 @@ -481,7 +445,7 @@ 6 - 22 + 19 1 0 0 @@ -493,7 +457,7 @@ 6 - 23 + 20 1 0 0 @@ -505,7 +469,7 @@ 6 - 24 + 21 1 0 0 @@ -517,7 +481,7 @@ 6 - 25 + 22 1 0 0 @@ -529,7 +493,7 @@ 6 - 26 + 23 1 0 0 @@ -541,7 +505,7 @@ 6 - 27 + 24 1 0 0 @@ -553,7 +517,7 @@ 6 - 28 + 25 1 0 0 @@ -565,19 +529,7 @@ 6 - 29 - 1 - 0 - 0 - 0 - ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c - stm32f4xx_hal_spi.c - 0 - 0 - - - 6 - 30 + 26 1 0 0 @@ -589,7 +541,7 @@ 6 - 31 + 27 1 0 0 @@ -599,18 +551,6 @@ 0 0 - - 6 - 32 - 1 - 0 - 0 - 0 - ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c - stm32f4xx_hal_uart.c - 0 - 0 - @@ -621,7 +561,7 @@ 0 7 - 33 + 28 1 0 0 @@ -641,7 +581,7 @@ 0 8 - 34 + 29 1 0 0 @@ -653,7 +593,7 @@ 8 - 35 + 30 1 0 0 @@ -665,7 +605,7 @@ 8 - 36 + 31 1 0 0 @@ -677,7 +617,7 @@ 8 - 37 + 32 1 0 0 @@ -689,7 +629,7 @@ 8 - 38 + 33 1 0 0 @@ -701,7 +641,7 @@ 8 - 39 + 34 1 0 0 @@ -713,7 +653,7 @@ 8 - 40 + 35 1 0 0 @@ -725,7 +665,7 @@ 8 - 41 + 36 1 0 0 @@ -737,7 +677,7 @@ 8 - 42 + 37 1 0 0 @@ -749,7 +689,7 @@ 8 - 43 + 38 1 0 0 @@ -769,7 +709,7 @@ 0 9 - 44 + 39 1 0 0 @@ -781,7 +721,7 @@ 9 - 45 + 40 1 0 0 @@ -793,7 +733,7 @@ 9 - 46 + 41 1 0 0 @@ -805,7 +745,7 @@ 9 - 47 + 42 1 0 0 @@ -817,7 +757,7 @@ 9 - 48 + 43 1 0 0 @@ -829,7 +769,7 @@ 9 - 49 + 44 1 0 0 @@ -841,7 +781,7 @@ 9 - 50 + 45 1 0 0 @@ -853,7 +793,7 @@ 9 - 51 + 46 1 0 0 @@ -865,7 +805,7 @@ 9 - 52 + 47 1 0 0 @@ -877,7 +817,7 @@ 9 - 53 + 48 1 0 0 @@ -889,7 +829,7 @@ 9 - 54 + 49 1 0 0 @@ -901,7 +841,7 @@ 9 - 55 + 50 1 0 0 @@ -913,7 +853,7 @@ 9 - 56 + 51 1 0 0 @@ -925,7 +865,7 @@ 9 - 57 + 52 1 0 0 @@ -937,7 +877,7 @@ 9 - 58 + 53 1 0 0 @@ -949,7 +889,7 @@ 9 - 59 + 54 1 0 0 @@ -961,7 +901,7 @@ 9 - 60 + 55 1 0 0 @@ -973,7 +913,7 @@ 9 - 61 + 56 1 0 0 @@ -985,7 +925,7 @@ 9 - 62 + 57 1 0 0 @@ -997,7 +937,7 @@ 9 - 63 + 58 1 0 0 @@ -1009,7 +949,7 @@ 9 - 64 + 59 1 0 0 @@ -1021,7 +961,7 @@ 9 - 65 + 60 1 0 0 @@ -1033,7 +973,7 @@ 9 - 66 + 61 1 0 0 @@ -1045,7 +985,7 @@ 9 - 67 + 62 1 0 0 @@ -1057,7 +997,7 @@ 9 - 68 + 63 1 0 0 @@ -1069,7 +1009,7 @@ 9 - 69 + 64 1 0 0 @@ -1081,7 +1021,7 @@ 9 - 70 + 65 1 0 0 @@ -1093,7 +1033,7 @@ 9 - 71 + 66 1 0 0 @@ -1105,7 +1045,7 @@ 9 - 72 + 67 1 0 0 @@ -1117,7 +1057,7 @@ 9 - 73 + 68 1 0 0 @@ -1129,7 +1069,7 @@ 9 - 74 + 69 1 0 0 @@ -1141,7 +1081,7 @@ 9 - 75 + 70 1 0 0 @@ -1153,7 +1093,7 @@ 9 - 76 + 71 1 0 0 @@ -1165,7 +1105,7 @@ 9 - 77 + 72 1 0 0 @@ -1177,7 +1117,7 @@ 9 - 78 + 73 1 0 0 @@ -1189,7 +1129,7 @@ 9 - 79 + 74 1 0 0 @@ -1201,7 +1141,7 @@ 9 - 80 + 75 1 0 0 @@ -1213,7 +1153,7 @@ 9 - 81 + 76 1 0 0 @@ -1225,7 +1165,7 @@ 9 - 82 + 77 1 0 0 @@ -1237,7 +1177,7 @@ 9 - 83 + 78 1 0 0 @@ -1249,7 +1189,7 @@ 9 - 84 + 79 1 0 0 @@ -1261,7 +1201,7 @@ 9 - 85 + 80 1 0 0 @@ -1273,7 +1213,7 @@ 9 - 86 + 81 1 0 0 @@ -1285,7 +1225,7 @@ 9 - 87 + 82 1 0 0 @@ -1297,7 +1237,7 @@ 9 - 88 + 83 1 0 0 @@ -1309,7 +1249,7 @@ 9 - 89 + 84 1 0 0 @@ -1321,7 +1261,7 @@ 9 - 90 + 85 1 0 0 @@ -1333,7 +1273,7 @@ 9 - 91 + 86 1 0 0 @@ -1345,7 +1285,7 @@ 9 - 92 + 87 1 0 0 @@ -1357,7 +1297,7 @@ 9 - 93 + 88 1 0 0 @@ -1369,7 +1309,7 @@ 9 - 94 + 89 1 0 0 @@ -1381,7 +1321,7 @@ 9 - 95 + 90 1 0 0 @@ -1393,7 +1333,7 @@ 9 - 96 + 91 1 0 0 @@ -1405,7 +1345,7 @@ 9 - 97 + 92 1 0 0 @@ -1417,7 +1357,7 @@ 9 - 98 + 93 1 0 0 @@ -1429,7 +1369,7 @@ 9 - 99 + 94 1 0 0 @@ -1441,7 +1381,7 @@ 9 - 100 + 95 1 0 0 @@ -1453,7 +1393,7 @@ 9 - 101 + 96 1 0 0 @@ -1465,7 +1405,7 @@ 9 - 102 + 97 1 0 0 @@ -1477,7 +1417,7 @@ 9 - 103 + 98 1 0 0 @@ -1489,7 +1429,7 @@ 9 - 104 + 99 1 0 0 @@ -1501,7 +1441,7 @@ 9 - 105 + 100 1 0 0 @@ -1513,7 +1453,7 @@ 9 - 106 + 101 1 0 0 @@ -1525,7 +1465,7 @@ 9 - 107 + 102 1 0 0 @@ -1537,7 +1477,7 @@ 9 - 108 + 103 1 0 0 @@ -1549,7 +1489,7 @@ 9 - 109 + 104 1 0 0 @@ -1561,7 +1501,7 @@ 9 - 110 + 105 1 0 0 @@ -1573,7 +1513,7 @@ 9 - 111 + 106 1 0 0 @@ -1585,7 +1525,7 @@ 9 - 112 + 107 1 0 0 @@ -1597,7 +1537,7 @@ 9 - 113 + 108 1 0 0 @@ -1609,7 +1549,7 @@ 9 - 114 + 109 1 0 0 @@ -1621,7 +1561,7 @@ 9 - 115 + 110 1 0 0 @@ -1633,7 +1573,7 @@ 9 - 116 + 111 1 0 0 @@ -1645,7 +1585,7 @@ 9 - 117 + 112 1 0 0 @@ -1657,7 +1597,7 @@ 9 - 118 + 113 1 0 0 @@ -1669,7 +1609,7 @@ 9 - 119 + 114 1 0 0 @@ -1681,7 +1621,7 @@ 9 - 120 + 115 1 0 0 @@ -1693,7 +1633,7 @@ 9 - 121 + 116 1 0 0 @@ -1705,7 +1645,7 @@ 9 - 122 + 117 1 0 0 @@ -1717,7 +1657,7 @@ 9 - 123 + 118 1 0 0 @@ -1729,7 +1669,7 @@ 9 - 124 + 119 1 0 0 @@ -1742,46 +1682,14 @@ - User/board - 0 + User/application + 1 0 0 0 10 - 125 - 1 - 0 - 0 - 0 - ..\User\board\src\leds.c - leds.c - 0 - 0 - - - - - User/application - 0 - 0 - 0 - 0 - - 11 - 126 - 1 - 0 - 0 - 0 - ..\User\application\src\ble_mx_02.c - ble_mx_02.c - 0 - 0 - - - 11 - 127 + 120 1 0 0 @@ -1792,32 +1700,8 @@ 0 - 11 - 128 - 1 - 0 - 0 - 0 - ..\User\application\src\tcpclient.c - tcpclient.c - 0 - 0 - - - 11 - 129 - 1 - 0 - 0 - 0 - ..\User\application\src\tcpserverc.c - tcpserverc.c - 0 - 0 - - - 11 - 130 + 10 + 121 1 0 0 @@ -1827,47 +1711,15 @@ 0 0 - - - - User/driver - 0 - 0 - 0 - 0 - 12 - 131 + 10 + 122 1 0 0 0 - ..\User\driver\ad7124.c - ad7124.c - 0 - 0 - - - 12 - 132 - 1 - 0 - 0 - 0 - ..\User\driver\dac161s997.c - dac161s997.c - 0 - 0 - - - 12 - 133 - 1 - 0 - 0 - 0 - ..\User\driver\ht1200m.c - ht1200m.c + ..\User\application\src\tcpserverc.c + tcpserverc.c 0 0 @@ -1875,13 +1727,13 @@ User/system - 0 + 1 0 0 0 - 13 - 134 + 11 + 123 1 0 0 @@ -1891,15 +1743,23 @@ 0 0 + + + + User/board + 1 + 0 + 0 + 0 - 13 - 135 + 12 + 124 1 0 0 0 - ..\User\system\user_spi.c - user_spi.c + ..\User\board\src\leds.c + leds.c 0 0 diff --git a/MDK-ARM/semi-finished_product_testing.uvprojx b/MDK-ARM/remote_dido_unit.uvprojx similarity index 93% rename from MDK-ARM/semi-finished_product_testing.uvprojx rename to MDK-ARM/remote_dido_unit.uvprojx index 6e67e4a..eb3cd7c 100644 --- a/MDK-ARM/semi-finished_product_testing.uvprojx +++ b/MDK-ARM/remote_dido_unit.uvprojx @@ -7,7 +7,7 @@ - semi-finished_product_testing + remote_dido_unit 0x4 ARM-ADS 5060960::V5.06 update 7 (build 960)::.\ARMCC @@ -18,7 +18,7 @@ STMicroelectronics Keil.STM32F4xx_DFP.2.12.0 http://www.keil.com/pack - IRAM(0x20000000-0x2001BFFF) IRAM2(0x2001C000-0x2001FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ + IRAM(0x20000000-0x2001BFFF) IRAM2(0x2001C000-0x2001FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ @@ -48,8 +48,8 @@ 0 1 - semi-finished_product_testing\ - semi-finished_product_testing + remote_dido_unit\ + remote_dido_unit 1 0 0 @@ -138,7 +138,7 @@ 1 BIN\UL2V8M.DLL - + "" () @@ -339,7 +339,7 @@ USE_HAL_DRIVER,STM32F407xx - ../Core/Inc;../LWIP/App;../LWIP/Target;../Middlewares/Third_Party/LwIP/src/include;../Middlewares/Third_Party/LwIP/system;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;../Drivers/BSP/Components/lan8742;../Middlewares/Third_Party/LwIP/src/include/netif/ppp;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Middlewares/Third_Party/LwIP/src/include/lwip;../Middlewares/Third_Party/LwIP/src/include/lwip/apps;../Middlewares/Third_Party/LwIP/src/include/lwip/priv;../Middlewares/Third_Party/LwIP/src/include/lwip/prot;../Middlewares/Third_Party/LwIP/src/include/netif;../Middlewares/Third_Party/LwIP/src/include/compat/posix;../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa;../Middlewares/Third_Party/LwIP/src/include/compat/posix/net;../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys;../Middlewares/Third_Party/LwIP/src/include/compat/stdc;../Middlewares/Third_Party/LwIP/system/arch;../Drivers/CMSIS/Include;..\User\application\inc;..\User\board\inc;..\User\driver;..\User\system + ../Core/Inc;../LWIP/App;../LWIP/Target;../Middlewares/Third_Party/LwIP/src/include;../Middlewares/Third_Party/LwIP/system;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;../Drivers/BSP/Components/lan8742;../Middlewares/Third_Party/LwIP/src/include/netif/ppp;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Middlewares/Third_Party/LwIP/src/include/lwip;../Middlewares/Third_Party/LwIP/src/include/lwip/apps;../Middlewares/Third_Party/LwIP/src/include/lwip/priv;../Middlewares/Third_Party/LwIP/src/include/lwip/prot;../Middlewares/Third_Party/LwIP/src/include/netif;../Middlewares/Third_Party/LwIP/src/include/compat/posix;../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa;../Middlewares/Third_Party/LwIP/src/include/compat/posix/net;../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys;../Middlewares/Third_Party/LwIP/src/include/compat/stdc;../Middlewares/Third_Party/LwIP/system/arch;../Drivers/CMSIS/Include;../User/application/inc;../User/system;../User/board/inc @@ -408,26 +408,11 @@ 1 ../Core/Src/freertos.c - - dma.c - 1 - ../Core/Src/dma.c - - - spi.c - 1 - ../Core/Src/spi.c - tim.c 1 ../Core/Src/tim.c - - usart.c - 1 - ../Core/Src/usart.c - stm32f4xx_it.c 1 @@ -548,11 +533,6 @@ 1 ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c - - stm32f4xx_hal_spi.c - 1 - ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c - stm32f4xx_hal_tim.c 1 @@ -563,11 +543,6 @@ 1 ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c - - stm32f4xx_hal_uart.c - 1 - ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c - @@ -1045,64 +1020,24 @@ - - User/board - - - leds.c - 1 - ..\User\board\src\leds.c - - - User/application - - ble_mx_02.c - 1 - ..\User\application\src\ble_mx_02.c - communication_protocol.c 1 ..\User\application\src\communication_protocol.c - tcpclient.c + user_lib.c 1 - ..\User\application\src\tcpclient.c + ..\User\application\src\user_lib.c tcpserverc.c 1 ..\User\application\src\tcpserverc.c - - user_lib.c - 1 - ..\User\application\src\user_lib.c - - - - - User/driver - - - ad7124.c - 1 - ..\User\driver\ad7124.c - - - dac161s997.c - 1 - ..\User\driver\dac161s997.c - - - ht1200m.c - 1 - ..\User\driver\ht1200m.c - @@ -1113,10 +1048,15 @@ 1 ..\User\system\user_gpio.c + + + + User/board + - user_spi.c + leds.c 1 - ..\User\system\user_spi.c + ..\User\board\src\leds.c @@ -1133,7 +1073,7 @@ - + @@ -1143,7 +1083,7 @@ - semi-finished_product_testing + remote_dido_unit 1 diff --git a/MDK-ARM/TEST2/TEST2.sct b/MDK-ARM/remote_dido_unit/remote_dido_unit.sct similarity index 100% rename from MDK-ARM/TEST2/TEST2.sct rename to MDK-ARM/remote_dido_unit/remote_dido_unit.sct diff --git a/MDK-ARM/semi-finished_product_testing/semi-finished_product_testing.sct b/MDK-ARM/semi-finished_product_testing/semi-finished_product_testing.sct deleted file mode 100644 index a335d3e..0000000 --- a/MDK-ARM/semi-finished_product_testing/semi-finished_product_testing.sct +++ /dev/null @@ -1,19 +0,0 @@ -; ************************************************************* -; *** Scatter-Loading Description File generated by uVision *** -; ************************************************************* - -LR_IROM1 0x08000000 0x00100000 { ; load region size_region - ER_IROM1 0x08000000 0x00100000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - RW_IRAM1 0x20000000 0x0001C000 { ; RW data - .ANY (+RW +ZI) - } - RW_IRAM2 0x2001C000 0x00004000 { - .ANY (+RW +ZI) - } -} - diff --git a/User/application/src/communication_protocol.c b/User/application/src/communication_protocol.c index 838067f..51accfe 100644 --- a/User/application/src/communication_protocol.c +++ b/User/application/src/communication_protocol.c @@ -1,9 +1,8 @@ #include "communication_protocol.h" #include "user_lib.h" -#include "ad7124.h" -extern float current_buff[2]; -extern ad7124_analog_t ad7124_analog[AD7124_CHANNEL_EN_MAX]; + + /** * @brief 处理通信异常 * @@ -25,25 +24,4 @@ void communication_exception(uint8_t *tx_data, const uint8_t *const rx_data, com tx_data[6] = FRAME_TAIL; // 帧尾 } -void communication_get_ai(communication_ai_t *ai_data, uint8_t *tx_data, const uint8_t *const rx_data) -{ - float32_u analog_data; - uint8_t tx_data_len = COM_AI_DATA_SIZE; - analog_data.f = S2B_FLOAT32(ad7124_analog[ai_data->channel].current); - tx_data[0] = FRAME_HEAD; // 帧头 - tx_data[1] = COM_OK; // 状态 - tx_data[2] = rx_data[2]; // 设备号 - tx_data[3] = rx_data[3]; // 命令号 - tx_data[4] = 4; // 数据长度 - tx_data[5] = analog_data.c; // 数据 - tx_data[6] = analog_data.c >> 8; // 数据 - tx_data[7] = analog_data.c >> 16; // 数据 - tx_data[8] = analog_data.c >> 24; // 数据 - tx_data[9] = xor_compute(tx_data + 1, tx_data_len - 3); // 异或校验 - tx_data[10] = FRAME_TAIL; // 帧尾 -} -void communication_set_ao(communication_ao_t *ao_data) -{ - current_buff[ao_data->channel] = B2S_FLOAT32(ao_data->data.f); -} diff --git a/User/application/src/tcpserverc.c b/User/application/src/tcpserverc.c index 930ad35..c6bfcb5 100644 --- a/User/application/src/tcpserverc.c +++ b/User/application/src/tcpserverc.c @@ -8,123 +8,24 @@ #include "lwip/pbuf.h" #include #include -#include "usart.h" + #include "main.h" -#include "ht1200m.h" + #include "user_lib.h" #include "communication_protocol.h" #include "user_gpio.h" -struct tcp_pcb *server_pcb_hart1 = NULL; -struct tcp_pcb *server_pcb_hart2 = NULL; -struct tcp_pcb *server_pcb_ble1 = NULL; -struct tcp_pcb *server_pcb_ble2 = NULL; + struct tcp_pcb *server_pcb_control = NULL; communication_di_t *user_communication_di = NULL; communication_do_t *user_communication_do = NULL; -communication_ai_t *user_communication_ai = NULL; -communication_ao_t *user_communication_ao = NULL; -extern uint8_t tcp_echo_flags_hart1; -extern uint8_t tcp_echo_flags_hart2; -extern uint8_t tcp_echo_flags_ble1; -extern uint8_t tcp_echo_flags_ble2; + extern uint8_t tcp_echo_flags_control; /*接收回调函数*/ -static err_t tcpecho_recv_hart1(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) -{ // 对应接收数据连接的控制块 接收到的数据 - if (p != NULL) - { - /* 更新窗口*/ - tcp_echo_flags_hart1 = 1; - tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - server_pcb_hart1 = tpcb; // 直接赋值 - memcpy(hart1_uart5.tx_data, (int *)p->payload, p->tot_len); - if (huart5.gState == HAL_UART_STATE_READY) - { - HART1_RTS_SEND; - dma_usart_send(&huart5, hart1_uart5.tx_data, p->tot_len); - } - pbuf_free(p); - } - else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 - { - return tcp_close(tpcb); - } - return ERR_OK; -} -static err_t tcpecho_recv_hart2(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) -{ // 对应接收数据连接的控制块 接收到的数据 - if (p != NULL) - { - /* 更新窗口*/ - tcp_echo_flags_hart2 = 1; - tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - server_pcb_hart2 = tpcb; // 直接赋值 - memcpy(hart2_uart2.tx_data, (int *)p->payload, p->tot_len); - if (huart2.gState == HAL_UART_STATE_READY) - { - HART2_RTS_SEND; - dma_usart_send(&huart2, hart2_uart2.tx_data, p->tot_len); - } - - pbuf_free(p); - } - else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 - { - return tcp_close(tpcb); - } - return ERR_OK; -} - -static err_t tcpecho_recv_ble1(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) -{ // 对应接收数据连接的控制块 接收到的数据 - if (p != NULL) - { - /* 更新窗口*/ - tcp_echo_flags_ble1 = 1; - tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - server_pcb_ble1 = tpcb; // 直接赋值 - - memcpy(ble1_uart6.tx_data, (int *)p->payload, p->tot_len); - if (huart6.gState == HAL_UART_STATE_READY) - { - dma_usart_send(&huart6, ble1_uart6.tx_data, p->tot_len); - } - - pbuf_free(p); - } - else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 - { - return tcp_close(tpcb); - } - return ERR_OK; -} - -static err_t tcpecho_recv_ble2(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) -{ // 对应接收数据连接的控制块 接收到的数据 - if (p != NULL) - { - /* 更新窗口*/ - tcp_echo_flags_ble2 = 1; - tcp_recved(tpcb, p->tot_len); // 读取数据的控制块 得到所有数据的长度 - server_pcb_ble2 = tpcb; // 直接赋值 - memcpy(ble2_uart3.tx_data, (int *)p->payload, p->tot_len); - if (huart3.gState == HAL_UART_STATE_READY) - { - dma_usart_send(&huart3, ble2_uart3.tx_data, p->tot_len); - } - pbuf_free(p); - } - else if (err == ERR_OK) // 检测到对方主动关闭连接时,也会调用recv函数,此时p为空 - { - return tcp_close(tpcb); - } - return ERR_OK; -} static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { @@ -158,24 +59,8 @@ static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf * } else { - memcpy(communication_data.data, tcp_rx_data + 5, tcp_rx_data[4]); - if (tcp_rx_data[3] == 0x00) // 读模拟量指令 - { - /*读操作,从寄存器读取数据,组包返回*/ - tx_data_len = COM_AI_DATA_SIZE; - user_communication_ai = &communication_data.ai_data; - communication_get_ai(user_communication_ai, tcp_tx_data, tcp_rx_data); - tcp_write(tpcb, tcp_tx_data, tx_data_len, 1); - } - else if (tcp_rx_data[3] == 0x01) // 写模拟量指令 - { - /*写操作,将数据写入寄存器,组包返回*/ - tcp_echo_flags_control = 1; - user_communication_ao = &communication_data.ao_data; - communication_set_ao(user_communication_ao); - tcp_write(tpcb, tcp_rx_data, rx_data_len, 1); - } - else if (tcp_rx_data[3] == 0x02) // 读数字量指令 + memcpy(communication_data.data, tcp_rx_data + 5, tcp_rx_data[4]); + if (tcp_rx_data[3] == 0x02) // 读数字量指令 { /*读操作,从寄存器读取数据,组包返回*/ @@ -213,33 +98,6 @@ static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf * return ERR_OK; } -static err_t tcpecho_accept_hart1(void *arg, struct tcp_pcb *newpcb, err_t err) // 由于这个函数是*tcp_accept_fn类型的 - // 形参的数量和类型必须一致 -{ - tcp_recv(newpcb, tcpecho_recv_hart1); // 当收到数据时,回调用户自己写的tcpecho_recv - - return ERR_OK; -} - -static err_t tcpecho_accept_hart2(void *arg, struct tcp_pcb *newpcb, err_t err) // 由于这个函数是*tcp_accept_fn类型的 -{ - tcp_recv(newpcb, tcpecho_recv_hart2); // 当收到数据时,回调用户自己写的tcpecho_recv - - return ERR_OK; -} - -static err_t tcpecho_accept_ble1(void *arg, struct tcp_pcb *newpcb, err_t err) // 由于这个函数是*tcp_accept_fn类型的 -{ - tcp_recv(newpcb, tcpecho_recv_ble1); // 当收到数据时,回调用户自己写的tcpecho_recv - - return ERR_OK; -} -static err_t tcpecho_accept_ble2(void *arg, struct tcp_pcb *newpcb, err_t err) // 由于这个函数是*tcp_accept_fn类型的 -{ - tcp_recv(newpcb, tcpecho_recv_ble2); // 当收到数据时,回调用户自己写的tcpecho_recv - - return ERR_OK; -} static err_t tcpecho_accept_control(void *arg, struct tcp_pcb *newpcb, err_t err) // 由于这个函数是*tcp_accept_fn类型的 { tcp_recv(newpcb, tcpecho_recv_control); // 当收到数据时,回调用户自己写的tcpecho_recv @@ -248,59 +106,8 @@ static err_t tcpecho_accept_control(void *arg, struct tcp_pcb *newpcb, err_t err } void tcp_echo_init(void) { - struct tcp_pcb *server_hart1 = NULL; - struct tcp_pcb *server_hart2 = NULL; - struct tcp_pcb *server_ble1 = NULL; - struct tcp_pcb *server_ble2 = NULL; struct tcp_pcb *server_control = NULL; - /* 创建一路HART */ - server_hart1 = tcp_new(); - - /* 绑定TCP控制块 */ - tcp_bind(server_hart1, IP_ADDR_ANY, TCP_PORT_HART1); - - /* 进入监听状态 */ - server_hart1 = tcp_listen(server_hart1); - - /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ - tcp_accept(server_hart1, tcpecho_accept_hart1); // 侦听到连接后,回调用户编写的tcpecho_accept - - /* 创建二路HART */ - server_hart2 = tcp_new(); - - /* 绑定TCP控制块 */ - tcp_bind(server_hart2, IP_ADDR_ANY, TCP_PORT_HART2); - - /* 进入监听状态 */ - server_hart2 = tcp_listen(server_hart2); - - /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ - tcp_accept(server_hart2, tcpecho_accept_hart2); // 侦听到连接后,回调用户编写的tcpecho_accept - - /* 创建一路蓝牙 */ - server_ble1 = tcp_new(); - - /* 绑定TCP控制块 */ - tcp_bind(server_ble1, IP_ADDR_ANY, TCP_PORT_BLE1); - - /* 进入监听状态 */ - server_ble1 = tcp_listen(server_ble1); - - /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ - tcp_accept(server_ble1, tcpecho_accept_ble1); // 侦听到连接后,回调用户编写的tcpecho_accept - - /* 创建二路蓝牙 */ - server_ble2 = tcp_new(); - - /* 绑定TCP控制块 */ - tcp_bind(server_ble2, IP_ADDR_ANY, TCP_PORT_BLE2); - - /* 进入监听状态 */ - server_ble2 = tcp_listen(server_ble2); - - /* 处理连接 注册函数,侦听到连接时被注册的函数被回调 */ - tcp_accept(server_ble2, tcpecho_accept_ble2); // 侦听到连接后,回调用户编写的tcpecho_accept /* 创建控制块 */ server_control = tcp_new(); @@ -315,24 +122,4 @@ void tcp_echo_init(void) tcp_accept(server_control, tcpecho_accept_control); // 侦听到连接后,回调用户编写的tcpecho_accept } -void user_send_data_hart1(uint8_t *data, uint16_t len) -{ - tcp_write(server_pcb_hart1, data, len, 1); -} -void user_send_data_hart2(uint8_t *data, uint16_t len) -{ - - tcp_write(server_pcb_hart2, data, len, 1); -} - -void user_send_data_ble1(uint8_t *data, uint16_t len) -{ - - tcp_write(server_pcb_ble1, data, len, 1); -} -void user_send_data_ble2(uint8_t *data, uint16_t len) -{ - - tcp_write(server_pcb_ble2, data, len, 1); -} diff --git a/User/board/inc/leds.h b/User/board/inc/leds.h index fc0724b..1d57714 100644 --- a/User/board/inc/leds.h +++ b/User/board/inc/leds.h @@ -11,12 +11,9 @@ typedef enum { - LEDS2_RED, - LEDS2_GREEN, - LEDS2_YELLOW, - LEDS3_RED, - LEDS3_GREEN, - LEDS3_YELLOW, + LEDS_RED, + LEDS_GREEN, + LEDS_YELLOW, LEDS_MAX, } leds_e; @@ -26,5 +23,4 @@ extern void leds_on_all(void); extern void leds_off_all(void); extern unsigned char tim_led_state; -// extern void lan8720_reset(void); #endif diff --git a/User/board/src/leds.c b/User/board/src/leds.c index de277fb..df25756 100644 --- a/User/board/src/leds.c +++ b/User/board/src/leds.c @@ -13,23 +13,14 @@ void leds_on(leds_e io) { switch (io) { - case LEDS2_RED: - HAL_GPIO_WritePin(LED2_R_GPIO_Port, LED2_R_Pin, GPIO_PIN_RESET); + case LEDS_RED: + HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET); break; - case LEDS2_GREEN: - HAL_GPIO_WritePin(LED2_G_GPIO_Port, LED2_G_Pin, GPIO_PIN_RESET); + case LEDS_GREEN: + HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET); break; - case LEDS2_YELLOW: - HAL_GPIO_WritePin(LED2_Y_GPIO_Port, LED2_Y_Pin, GPIO_PIN_RESET); - break; - case LEDS3_RED: - HAL_GPIO_WritePin(LED3_R_GPIO_Port, LED3_R_Pin, GPIO_PIN_RESET); - break; - case LEDS3_GREEN: - HAL_GPIO_WritePin(LED3_G_GPIO_Port, LED3_G_Pin, GPIO_PIN_RESET); - break; - case LEDS3_YELLOW: - HAL_GPIO_WritePin(LED3_Y_GPIO_Port, LED3_Y_Pin, GPIO_PIN_RESET); + case LEDS_YELLOW: + HAL_GPIO_WritePin(LED_Y_GPIO_Port, LED_Y_Pin, GPIO_PIN_RESET); break; default: break; @@ -47,23 +38,14 @@ void leds_off(leds_e io) { switch (io) { - case LEDS2_RED: - HAL_GPIO_WritePin(LED2_R_GPIO_Port, LED2_R_Pin, GPIO_PIN_SET); + case LEDS_RED: + HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET); break; - case LEDS2_GREEN: - HAL_GPIO_WritePin(LED2_G_GPIO_Port, LED2_G_Pin, GPIO_PIN_SET); + case LEDS_GREEN: + HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_SET); break; - case LEDS2_YELLOW: - HAL_GPIO_WritePin(LED2_Y_GPIO_Port, LED2_Y_Pin, GPIO_PIN_SET); - break; - case LEDS3_RED: - HAL_GPIO_WritePin(LED3_R_GPIO_Port, LED3_R_Pin, GPIO_PIN_SET); - break; - case LEDS3_GREEN: - HAL_GPIO_WritePin(LED3_G_GPIO_Port, LED3_G_Pin, GPIO_PIN_SET); - break; - case LEDS3_YELLOW: - HAL_GPIO_WritePin(LED3_Y_GPIO_Port, LED3_Y_Pin, GPIO_PIN_SET); + case LEDS_YELLOW: + HAL_GPIO_WritePin(LED_Y_GPIO_Port, LED_Y_Pin, GPIO_PIN_SET); break; default: break; @@ -80,12 +62,9 @@ void leds_off(leds_e io) */ void leds_on_all(void) { - HAL_GPIO_WritePin(LED2_R_GPIO_Port, LED2_R_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LED2_G_GPIO_Port, LED2_G_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LED2_Y_GPIO_Port, LED2_Y_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LED3_R_GPIO_Port, LED3_R_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LED3_G_GPIO_Port, LED3_G_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(LED3_Y_GPIO_Port, LED3_Y_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(LED_Y_GPIO_Port, LED_Y_Pin, GPIO_PIN_RESET); } /** @@ -95,18 +74,9 @@ void leds_on_all(void) */ void leds_off_all(void) { - HAL_GPIO_WritePin(LED2_R_GPIO_Port, LED2_R_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(LED2_G_GPIO_Port, LED2_G_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(LED2_Y_GPIO_Port, LED2_Y_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(LED3_R_GPIO_Port, LED3_R_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(LED3_G_GPIO_Port, LED3_G_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(LED3_Y_GPIO_Port, LED3_Y_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LED_Y_GPIO_Port, LED_Y_Pin, GPIO_PIN_SET); } -// void lan8720_reset(void) -// { -// LL_GPIO_ResetOutputPin(ETH_RESET_GPIO_Port, ETH_RESET_Pin); -// HAL_Delay(55); -// LL_GPIO_SetOutputPin(ETH_RESET_GPIO_Port, ETH_RESET_Pin); -// HAL_Delay(55); -// } + diff --git a/remote_dido_unit.ioc b/remote_dido_unit.ioc new file mode 100644 index 0000000..c407358 --- /dev/null +++ b/remote_dido_unit.ioc @@ -0,0 +1,440 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +ETH.IPParameters=MediaInterface +ETH.MediaInterface=HAL_ETH_RMII_MODE +FREERTOS.FootprintOK=true +FREERTOS.IPParameters=Tasks01,configMAX_TASK_NAME_LEN,configENABLE_FPU,configMAX_PRIORITIES,FootprintOK +FREERTOS.Tasks01=lwip_task,2,512,start_tcp_task,Default,NULL,Dynamic,NULL,NULL;gpio_di_do_task,0,128,start_gpio_di_do_task,Default,NULL,Dynamic,NULL,NULL;leds_task,-3,128,start_leds_task,Default,NULL,Dynamic,NULL,NULL +FREERTOS.configENABLE_FPU=1 +FREERTOS.configMAX_PRIORITIES=32 +FREERTOS.configMAX_TASK_NAME_LEN=24 +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +LWIP.BSP.number=1 +LWIP.CMSIS_VERSION-Enabled=1 +LWIP.GATEWAY_ADDRESS=192.168.001.029 +LWIP.IPParameters=LWIP_DHCP,IP_ADDRESS,NETMASK_ADDRESS,GATEWAY_ADDRESS,LWIP_UDP,CMSIS_VERSION-Enabled +LWIP.IP_ADDRESS=192.168.001.100 +LWIP.LWIP_DHCP=0 +LWIP.LWIP_UDP=0 +LWIP.NETMASK_ADDRESS=255.255.255.000 +LWIP.Version=v2.1.2_Cube +LWIP0.BSP.STBoard=false +LWIP0.BSP.api=BSP_COMPONENT_DRIVER +LWIP0.BSP.component=LAN8742 +LWIP0.BSP.condition= +LWIP0.BSP.instance=LAN8742 +LWIP0.BSP.ip= +LWIP0.BSP.mode= +LWIP0.BSP.name=Driver_PHY +LWIP0.BSP.semaphore=S_LAN8742 +LWIP0.BSP.solution=LAN8742 +Mcu.CPN=STM32F407VGT6 +Mcu.Family=STM32F4 +Mcu.IP0=ETH +Mcu.IP1=FREERTOS +Mcu.IP2=LWIP +Mcu.IP3=NVIC +Mcu.IP4=RCC +Mcu.IP5=SYS +Mcu.IP6=TIM2 +Mcu.IP7=TIM3 +Mcu.IPNb=8 +Mcu.Name=STM32F407V(E-G)Tx +Mcu.Package=LQFP100 +Mcu.Pin0=PE2 +Mcu.Pin1=PE3 +Mcu.Pin10=PA2 +Mcu.Pin11=PA7 +Mcu.Pin12=PC4 +Mcu.Pin13=PC5 +Mcu.Pin14=PB1 +Mcu.Pin15=PB2 +Mcu.Pin16=PE7 +Mcu.Pin17=PB10 +Mcu.Pin18=PB11 +Mcu.Pin19=PB12 +Mcu.Pin2=PE4 +Mcu.Pin20=PB13 +Mcu.Pin21=PD10 +Mcu.Pin22=PD11 +Mcu.Pin23=PD12 +Mcu.Pin24=PD13 +Mcu.Pin25=PD14 +Mcu.Pin26=PD15 +Mcu.Pin27=PC9 +Mcu.Pin28=PA8 +Mcu.Pin29=PA11 +Mcu.Pin3=PE5 +Mcu.Pin30=PA12 +Mcu.Pin31=PA13 +Mcu.Pin32=PA14 +Mcu.Pin33=PA15 +Mcu.Pin34=PC12 +Mcu.Pin35=PD0 +Mcu.Pin36=PD1 +Mcu.Pin37=PD2 +Mcu.Pin38=PD3 +Mcu.Pin39=PD4 +Mcu.Pin4=PE6 +Mcu.Pin40=PD5 +Mcu.Pin41=PD6 +Mcu.Pin42=PD7 +Mcu.Pin43=PB3 +Mcu.Pin44=PB4 +Mcu.Pin45=PB5 +Mcu.Pin46=PB6 +Mcu.Pin47=PB7 +Mcu.Pin48=PE0 +Mcu.Pin49=PE1 +Mcu.Pin5=PH0-OSC_IN +Mcu.Pin50=VP_FREERTOS_VS_CMSIS_V1 +Mcu.Pin51=VP_LWIP_VS_Enabled +Mcu.Pin52=VP_SYS_VS_tim1 +Mcu.Pin53=VP_TIM2_VS_ClockSourceINT +Mcu.Pin54=VP_TIM3_VS_ClockSourceINT +Mcu.Pin6=PH1-OSC_OUT +Mcu.Pin7=PC0 +Mcu.Pin8=PC1 +Mcu.Pin9=PA1 +Mcu.PinsNb=55 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F407VGTx +MxCube.Version=6.8.0 +MxDb.Version=DB.6.0.80 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.ETH_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false +NVIC.TIM1_UP_TIM10_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TIM3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.TimeBase=TIM1_UP_TIM10_IRQn +NVIC.TimeBaseIP=TIM1 +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +PA1.Mode=RMII +PA1.Signal=ETH_REF_CLK +PA11.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PA11.GPIO_Label=DO_CH9 +PA11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PA11.Locked=true +PA11.PinState=GPIO_PIN_SET +PA11.Signal=GPIO_Output +PA12.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PA12.GPIO_Label=DO_CH10 +PA12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PA12.Locked=true +PA12.PinState=GPIO_PIN_SET +PA12.Signal=GPIO_Output +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA15.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PA15.GPIO_Label=DO_CH11 +PA15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PA15.Locked=true +PA15.PinState=GPIO_PIN_SET +PA15.Signal=GPIO_Output +PA2.Mode=RMII +PA2.Signal=ETH_MDIO +PA7.Mode=RMII +PA7.Signal=ETH_CRS_DV +PA8.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PA8.GPIO_Label=DO_CH8 +PA8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PA8.Locked=true +PA8.PinState=GPIO_PIN_SET +PA8.Signal=GPIO_Output +PB1.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PB1.GPIO_Label=LED_R +PB1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB1.Locked=true +PB1.PinState=GPIO_PIN_SET +PB1.Signal=GPIO_Output +PB10.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PB10.GPIO_Label=DO_EN +PB10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB10.Locked=true +PB10.PinState=GPIO_PIN_SET +PB10.Signal=GPIO_Output +PB11.Mode=RMII +PB11.Signal=ETH_TX_EN +PB12.Mode=RMII +PB12.Signal=ETH_TXD0 +PB13.Mode=RMII +PB13.Signal=ETH_TXD1 +PB2.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PB2.GPIO_Label=LED_G +PB2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB2.Locked=true +PB2.PinState=GPIO_PIN_SET +PB2.Signal=GPIO_Output +PB3.GPIOParameters=GPIO_PuPd,GPIO_Label +PB3.GPIO_Label=DI_CH5 +PB3.GPIO_PuPd=GPIO_PULLUP +PB3.Locked=true +PB3.Signal=GPIO_Input +PB4.GPIOParameters=GPIO_PuPd,GPIO_Label +PB4.GPIO_Label=DI_CH6 +PB4.GPIO_PuPd=GPIO_PULLUP +PB4.Locked=true +PB4.Signal=GPIO_Input +PB5.GPIOParameters=GPIO_PuPd,GPIO_Label +PB5.GPIO_Label=DI_CH7 +PB5.GPIO_PuPd=GPIO_PULLUP +PB5.Locked=true +PB5.Signal=GPIO_Input +PB6.GPIOParameters=GPIO_PuPd,GPIO_Label +PB6.GPIO_Label=DI_CH8 +PB6.GPIO_PuPd=GPIO_PULLUP +PB6.Locked=true +PB6.Signal=GPIO_Input +PB7.GPIOParameters=GPIO_PuPd,GPIO_Label +PB7.GPIO_Label=DI_CH9 +PB7.GPIO_PuPd=GPIO_PULLUP +PB7.Locked=true +PB7.Signal=GPIO_Input +PC0.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PC0.GPIO_Label=ETH_RESET +PC0.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM +PC0.Locked=true +PC0.PinState=GPIO_PIN_SET +PC0.Signal=GPIO_Output +PC1.Mode=RMII +PC1.Signal=ETH_MDC +PC12.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PC12.GPIO_Label=DO_CH12 +PC12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC12.Locked=true +PC12.PinState=GPIO_PIN_SET +PC12.Signal=GPIO_Output +PC4.Mode=RMII +PC4.Signal=ETH_RXD0 +PC5.Mode=RMII +PC5.Signal=ETH_RXD1 +PC9.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PC9.GPIO_Label=DO_CH7 +PC9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC9.Locked=true +PC9.PinState=GPIO_PIN_SET +PC9.Signal=GPIO_Output +PD0.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD0.GPIO_Label=DO_CH13 +PD0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD0.Locked=true +PD0.PinState=GPIO_PIN_SET +PD0.Signal=GPIO_Output +PD1.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD1.GPIO_Label=DO_CH14 +PD1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD1.Locked=true +PD1.PinState=GPIO_PIN_SET +PD1.Signal=GPIO_Output +PD10.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD10.GPIO_Label=DO_CH1 +PD10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD10.Locked=true +PD10.PinState=GPIO_PIN_SET +PD10.Signal=GPIO_Output +PD11.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD11.GPIO_Label=DO_CH2 +PD11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD11.Locked=true +PD11.PinState=GPIO_PIN_SET +PD11.Signal=GPIO_Output +PD12.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD12.GPIO_Label=DO_CH3 +PD12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD12.Locked=true +PD12.PinState=GPIO_PIN_SET +PD12.Signal=GPIO_Output +PD13.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD13.GPIO_Label=DO_CH4 +PD13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD13.Locked=true +PD13.PinState=GPIO_PIN_SET +PD13.Signal=GPIO_Output +PD14.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD14.GPIO_Label=DO_CH5 +PD14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD14.Locked=true +PD14.PinState=GPIO_PIN_SET +PD14.Signal=GPIO_Output +PD15.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD15.GPIO_Label=DO_CH6 +PD15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD15.Locked=true +PD15.PinState=GPIO_PIN_SET +PD15.Signal=GPIO_Output +PD2.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD2.GPIO_Label=DO_CH15 +PD2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD2.Locked=true +PD2.PinState=GPIO_PIN_SET +PD2.Signal=GPIO_Output +PD3.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PD3.GPIO_Label=DO_CH16 +PD3.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD3.Locked=true +PD3.PinState=GPIO_PIN_SET +PD3.Signal=GPIO_Output +PD4.GPIOParameters=GPIO_PuPd,GPIO_Label +PD4.GPIO_Label=DI_CH1 +PD4.GPIO_PuPd=GPIO_PULLUP +PD4.Locked=true +PD4.Signal=GPIO_Input +PD5.GPIOParameters=GPIO_PuPd,GPIO_Label +PD5.GPIO_Label=DI_CH2 +PD5.GPIO_PuPd=GPIO_PULLUP +PD5.Locked=true +PD5.Signal=GPIO_Input +PD6.GPIOParameters=GPIO_PuPd,GPIO_Label +PD6.GPIO_Label=DI_CH3 +PD6.GPIO_PuPd=GPIO_PULLUP +PD6.Locked=true +PD6.Signal=GPIO_Input +PD7.GPIOParameters=GPIO_PuPd,GPIO_Label +PD7.GPIO_Label=DI_CH4 +PD7.GPIO_PuPd=GPIO_PULLUP +PD7.Locked=true +PD7.Signal=GPIO_Input +PE0.GPIOParameters=GPIO_PuPd,GPIO_Label +PE0.GPIO_Label=DI_CH10 +PE0.GPIO_PuPd=GPIO_PULLUP +PE0.Locked=true +PE0.Signal=GPIO_Input +PE1.GPIOParameters=GPIO_PuPd,GPIO_Label +PE1.GPIO_Label=DI_CH11 +PE1.GPIO_PuPd=GPIO_PULLUP +PE1.Locked=true +PE1.Signal=GPIO_Input +PE2.GPIOParameters=GPIO_PuPd,GPIO_Label +PE2.GPIO_Label=DI_CH12 +PE2.GPIO_PuPd=GPIO_PULLUP +PE2.Locked=true +PE2.Signal=GPIO_Input +PE3.GPIOParameters=GPIO_PuPd,GPIO_Label +PE3.GPIO_Label=DI_CH13 +PE3.GPIO_PuPd=GPIO_PULLUP +PE3.Locked=true +PE3.Signal=GPIO_Input +PE4.GPIOParameters=GPIO_PuPd,GPIO_Label +PE4.GPIO_Label=DI_CH14 +PE4.GPIO_PuPd=GPIO_PULLUP +PE4.Locked=true +PE4.Signal=GPIO_Input +PE5.GPIOParameters=GPIO_PuPd,GPIO_Label +PE5.GPIO_Label=DI_CH15 +PE5.GPIO_PuPd=GPIO_PULLUP +PE5.Locked=true +PE5.Signal=GPIO_Input +PE6.GPIOParameters=GPIO_PuPd,GPIO_Label +PE6.GPIO_Label=DI_CH16 +PE6.GPIO_PuPd=GPIO_PULLUP +PE6.Locked=true +PE6.Signal=GPIO_Input +PE7.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PE7.GPIO_Label=LED_Y +PE7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PE7.Locked=true +PE7.PinState=GPIO_PIN_SET +PE7.Signal=GPIO_Output +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F407VGTx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.27.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=remote_dido_unit.ioc +ProjectManager.ProjectName=remote_dido_unit +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5.32 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_LWIP_Init-LWIP-false-HAL-false,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM2_Init-TIM2-false-HAL-true +RCC.48MHZClocksFreq_Value=55296000 +RCC.AHBFreq_Value=110592000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=27648000 +RCC.APB1TimFreq_Value=55296000 +RCC.APB2CLKDivider=RCC_HCLK_DIV4 +RCC.APB2Freq_Value=27648000 +RCC.APB2TimFreq_Value=55296000 +RCC.CortexFreq_Value=110592000 +RCC.EthernetFreq_Value=110592000 +RCC.FCLKCortexFreq_Value=110592000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=110592000 +RCC.HSE_VALUE=11059200 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=106168320 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=110592000 +RCC.PLLCLKFreq_Value=110592000 +RCC.PLLM=10 +RCC.PLLN=200 +RCC.PLLQCLKFreq_Value=55296000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=5529600 +RCC.SYSCLKFreq_VALUE=110592000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=212336640 +RCC.VCOInputFreq_Value=1105920 +RCC.VCOOutputFreq_Value=221184000 +RCC.VcooutputI2S=106168320 +TIM2.IPParameters=Period +TIM2.Period=119 +TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM3.IPParameters=Prescaler,Period,AutoReloadPreload +TIM3.Period=999 +TIM3.Prescaler=55295 +VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1 +VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1 +VP_LWIP_VS_Enabled.Mode=Enabled +VP_LWIP_VS_Enabled.Signal=LWIP_VS_Enabled +VP_SYS_VS_tim1.Mode=TIM1 +VP_SYS_VS_tim1.Signal=SYS_VS_tim1 +VP_TIM2_VS_ClockSourceINT.Mode=Internal +VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +VP_TIM3_VS_ClockSourceINT.Mode=Internal +VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT +board=custom +rtos.0.ip=FREERTOS diff --git a/semi-finished_product_testing.ioc b/semi-finished_product_testing.ioc deleted file mode 100644 index e0472f5..0000000 --- a/semi-finished_product_testing.ioc +++ /dev/null @@ -1,646 +0,0 @@ -#MicroXplorer Configuration settings - do not modify -CAD.formats= -CAD.pinconfig= -CAD.provider= -Dma.Request0=USART6_RX -Dma.Request1=USART6_TX -Dma.Request2=UART4_RX -Dma.Request3=UART4_TX -Dma.Request4=USART3_RX -Dma.Request5=USART3_TX -Dma.Request6=UART5_TX -Dma.Request7=UART5_RX -Dma.Request8=USART2_RX -Dma.Request9=USART2_TX -Dma.RequestsNb=10 -Dma.UART4_RX.2.Direction=DMA_PERIPH_TO_MEMORY -Dma.UART4_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.UART4_RX.2.Instance=DMA1_Stream2 -Dma.UART4_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.UART4_RX.2.MemInc=DMA_MINC_ENABLE -Dma.UART4_RX.2.Mode=DMA_NORMAL -Dma.UART4_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.UART4_RX.2.PeriphInc=DMA_PINC_DISABLE -Dma.UART4_RX.2.Priority=DMA_PRIORITY_VERY_HIGH -Dma.UART4_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.UART4_TX.3.Direction=DMA_MEMORY_TO_PERIPH -Dma.UART4_TX.3.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.UART4_TX.3.Instance=DMA1_Stream4 -Dma.UART4_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.UART4_TX.3.MemInc=DMA_MINC_ENABLE -Dma.UART4_TX.3.Mode=DMA_NORMAL -Dma.UART4_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.UART4_TX.3.PeriphInc=DMA_PINC_DISABLE -Dma.UART4_TX.3.Priority=DMA_PRIORITY_VERY_HIGH -Dma.UART4_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.UART5_RX.7.Direction=DMA_PERIPH_TO_MEMORY -Dma.UART5_RX.7.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.UART5_RX.7.Instance=DMA1_Stream0 -Dma.UART5_RX.7.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.UART5_RX.7.MemInc=DMA_MINC_ENABLE -Dma.UART5_RX.7.Mode=DMA_NORMAL -Dma.UART5_RX.7.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.UART5_RX.7.PeriphInc=DMA_PINC_DISABLE -Dma.UART5_RX.7.Priority=DMA_PRIORITY_VERY_HIGH -Dma.UART5_RX.7.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.UART5_TX.6.Direction=DMA_MEMORY_TO_PERIPH -Dma.UART5_TX.6.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.UART5_TX.6.Instance=DMA1_Stream7 -Dma.UART5_TX.6.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.UART5_TX.6.MemInc=DMA_MINC_ENABLE -Dma.UART5_TX.6.Mode=DMA_NORMAL -Dma.UART5_TX.6.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.UART5_TX.6.PeriphInc=DMA_PINC_DISABLE -Dma.UART5_TX.6.Priority=DMA_PRIORITY_VERY_HIGH -Dma.UART5_TX.6.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART2_RX.8.Direction=DMA_PERIPH_TO_MEMORY -Dma.USART2_RX.8.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART2_RX.8.Instance=DMA1_Stream5 -Dma.USART2_RX.8.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART2_RX.8.MemInc=DMA_MINC_ENABLE -Dma.USART2_RX.8.Mode=DMA_NORMAL -Dma.USART2_RX.8.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART2_RX.8.PeriphInc=DMA_PINC_DISABLE -Dma.USART2_RX.8.Priority=DMA_PRIORITY_VERY_HIGH -Dma.USART2_RX.8.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART2_TX.9.Direction=DMA_MEMORY_TO_PERIPH -Dma.USART2_TX.9.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART2_TX.9.Instance=DMA1_Stream6 -Dma.USART2_TX.9.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART2_TX.9.MemInc=DMA_MINC_ENABLE -Dma.USART2_TX.9.Mode=DMA_NORMAL -Dma.USART2_TX.9.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART2_TX.9.PeriphInc=DMA_PINC_DISABLE -Dma.USART2_TX.9.Priority=DMA_PRIORITY_VERY_HIGH -Dma.USART2_TX.9.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART3_RX.4.Direction=DMA_PERIPH_TO_MEMORY -Dma.USART3_RX.4.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART3_RX.4.Instance=DMA1_Stream1 -Dma.USART3_RX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART3_RX.4.MemInc=DMA_MINC_ENABLE -Dma.USART3_RX.4.Mode=DMA_NORMAL -Dma.USART3_RX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART3_RX.4.PeriphInc=DMA_PINC_DISABLE -Dma.USART3_RX.4.Priority=DMA_PRIORITY_LOW -Dma.USART3_RX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART3_TX.5.Direction=DMA_MEMORY_TO_PERIPH -Dma.USART3_TX.5.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART3_TX.5.Instance=DMA1_Stream3 -Dma.USART3_TX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART3_TX.5.MemInc=DMA_MINC_ENABLE -Dma.USART3_TX.5.Mode=DMA_NORMAL -Dma.USART3_TX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART3_TX.5.PeriphInc=DMA_PINC_DISABLE -Dma.USART3_TX.5.Priority=DMA_PRIORITY_LOW -Dma.USART3_TX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART6_RX.0.Direction=DMA_PERIPH_TO_MEMORY -Dma.USART6_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART6_RX.0.Instance=DMA2_Stream1 -Dma.USART6_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART6_RX.0.MemInc=DMA_MINC_ENABLE -Dma.USART6_RX.0.Mode=DMA_NORMAL -Dma.USART6_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART6_RX.0.PeriphInc=DMA_PINC_DISABLE -Dma.USART6_RX.0.Priority=DMA_PRIORITY_LOW -Dma.USART6_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART6_TX.1.Direction=DMA_MEMORY_TO_PERIPH -Dma.USART6_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART6_TX.1.Instance=DMA2_Stream6 -Dma.USART6_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART6_TX.1.MemInc=DMA_MINC_ENABLE -Dma.USART6_TX.1.Mode=DMA_NORMAL -Dma.USART6_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART6_TX.1.PeriphInc=DMA_PINC_DISABLE -Dma.USART6_TX.1.Priority=DMA_PRIORITY_LOW -Dma.USART6_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -ETH.IPParameters=MediaInterface -ETH.MediaInterface=HAL_ETH_RMII_MODE -FREERTOS.FootprintOK=true -FREERTOS.IPParameters=Tasks01,configMAX_TASK_NAME_LEN,configENABLE_FPU,configMAX_PRIORITIES,FootprintOK -FREERTOS.Tasks01=lwip_task,2,512,start_tcp_task,Default,NULL,Dynamic,NULL,NULL;led_task,-2,128,start_led_toggle_task,Default,NULL,Dynamic,NULL,NULL;dac_task,0,512,start_dac_task,Default,NULL,Dynamic,NULL,NULL;adc_task,-1,128,start_adc_task,Default,NULL,Dynamic,NULL,NULL;gpio_di_do_task,0,128,start_gpio_di_do_task,Default,NULL,Dynamic,NULL,NULL -FREERTOS.configENABLE_FPU=1 -FREERTOS.configMAX_PRIORITIES=32 -FREERTOS.configMAX_TASK_NAME_LEN=24 -File.Version=6 -GPIO.groupedBy=Group By Peripherals -KeepUserPlacement=false -LWIP.BSP.number=1 -LWIP.CMSIS_VERSION-Enabled=1 -LWIP.GATEWAY_ADDRESS=192.168.001.029 -LWIP.IPParameters=LWIP_DHCP,IP_ADDRESS,NETMASK_ADDRESS,GATEWAY_ADDRESS,LWIP_UDP,CMSIS_VERSION-Enabled -LWIP.IP_ADDRESS=192.168.001.100 -LWIP.LWIP_DHCP=0 -LWIP.LWIP_UDP=0 -LWIP.NETMASK_ADDRESS=255.255.255.000 -LWIP.Version=v2.1.2_Cube -LWIP0.BSP.STBoard=false -LWIP0.BSP.api=BSP_COMPONENT_DRIVER -LWIP0.BSP.component=LAN8742 -LWIP0.BSP.condition= -LWIP0.BSP.instance=LAN8742 -LWIP0.BSP.ip= -LWIP0.BSP.mode= -LWIP0.BSP.name=Driver_PHY -LWIP0.BSP.semaphore=S_LAN8742 -LWIP0.BSP.solution=LAN8742 -Mcu.CPN=STM32F407VGT6 -Mcu.Family=STM32F4 -Mcu.IP0=DMA -Mcu.IP1=ETH -Mcu.IP10=UART4 -Mcu.IP11=UART5 -Mcu.IP12=USART2 -Mcu.IP13=USART3 -Mcu.IP14=USART6 -Mcu.IP2=FREERTOS -Mcu.IP3=LWIP -Mcu.IP4=NVIC -Mcu.IP5=RCC -Mcu.IP6=SPI1 -Mcu.IP7=SYS -Mcu.IP8=TIM2 -Mcu.IP9=TIM3 -Mcu.IPNb=15 -Mcu.Name=STM32F407V(E-G)Tx -Mcu.Package=LQFP100 -Mcu.Pin0=PE2 -Mcu.Pin1=PE3 -Mcu.Pin10=PC5 -Mcu.Pin11=PB1 -Mcu.Pin12=PB2 -Mcu.Pin13=PE7 -Mcu.Pin14=PE12 -Mcu.Pin15=PE13 -Mcu.Pin16=PE14 -Mcu.Pin17=PB11 -Mcu.Pin18=PB12 -Mcu.Pin19=PB13 -Mcu.Pin2=PH0-OSC_IN -Mcu.Pin20=PD8 -Mcu.Pin21=PD9 -Mcu.Pin22=PD11 -Mcu.Pin23=PD12 -Mcu.Pin24=PD13 -Mcu.Pin25=PD14 -Mcu.Pin26=PD15 -Mcu.Pin27=PC6 -Mcu.Pin28=PC7 -Mcu.Pin29=PC8 -Mcu.Pin3=PH1-OSC_OUT -Mcu.Pin30=PC9 -Mcu.Pin31=PA8 -Mcu.Pin32=PA11 -Mcu.Pin33=PA12 -Mcu.Pin34=PA13 -Mcu.Pin35=PA14 -Mcu.Pin36=PA15 -Mcu.Pin37=PC10 -Mcu.Pin38=PC11 -Mcu.Pin39=PC12 -Mcu.Pin4=PC0 -Mcu.Pin40=PD0 -Mcu.Pin41=PD1 -Mcu.Pin42=PD2 -Mcu.Pin43=PD3 -Mcu.Pin44=PD4 -Mcu.Pin45=PD5 -Mcu.Pin46=PD6 -Mcu.Pin47=PD7 -Mcu.Pin48=PB3 -Mcu.Pin49=PB4 -Mcu.Pin5=PC1 -Mcu.Pin50=PB5 -Mcu.Pin51=PB6 -Mcu.Pin52=PB7 -Mcu.Pin53=PE0 -Mcu.Pin54=PE1 -Mcu.Pin55=VP_FREERTOS_VS_CMSIS_V1 -Mcu.Pin56=VP_LWIP_VS_Enabled -Mcu.Pin57=VP_SYS_VS_tim1 -Mcu.Pin58=VP_TIM2_VS_ClockSourceINT -Mcu.Pin59=VP_TIM3_VS_ClockSourceINT -Mcu.Pin6=PA1 -Mcu.Pin7=PA2 -Mcu.Pin8=PA7 -Mcu.Pin9=PC4 -Mcu.PinsNb=60 -Mcu.ThirdPartyNb=0 -Mcu.UserConstants= -Mcu.UserName=STM32F407VGTx -MxCube.Version=6.8.0 -MxDb.Version=DB.6.0.80 -NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream4_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream7_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA2_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA2_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.ETH_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.EXTI1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.EXTI3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.ForceEnableDMAVector=true -NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false -NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 -NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false -NVIC.SavedPendsvIrqHandlerGenerated=true -NVIC.SavedSvcallIrqHandlerGenerated=true -NVIC.SavedSystickIrqHandlerGenerated=true -NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false -NVIC.TIM1_UP_TIM10_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true -NVIC.TIM3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.TimeBase=TIM1_UP_TIM10_IRQn -NVIC.TimeBaseIP=TIM1 -NVIC.UART4_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.UART5_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.USART2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.USART3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.USART6_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -PA1.Mode=RMII -PA1.Signal=ETH_REF_CLK -PA11.GPIOParameters=GPIO_PuPd,GPIO_Label -PA11.GPIO_Label=DI_CH3 -PA11.GPIO_PuPd=GPIO_PULLUP -PA11.Locked=true -PA11.Signal=GPIO_Input -PA12.GPIOParameters=GPIO_PuPd,GPIO_Label -PA12.GPIO_Label=DI_CH4 -PA12.GPIO_PuPd=GPIO_PULLUP -PA12.Locked=true -PA12.Signal=GPIO_Input -PA13.Mode=Serial_Wire -PA13.Signal=SYS_JTMS-SWDIO -PA14.Mode=Serial_Wire -PA14.Signal=SYS_JTCK-SWCLK -PA15.GPIOParameters=GPIO_Speed,GPIO_Label -PA15.GPIO_Label=HART_CLK -PA15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PA15.Locked=true -PA15.Signal=S_TIM2_CH1_ETR -PA2.Mode=RMII -PA2.Signal=ETH_MDIO -PA7.Mode=RMII -PA7.Signal=ETH_CRS_DV -PA8.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PA8.GPIO_Label=HART1_RST -PA8.GPIO_PuPd=GPIO_PULLUP -PA8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PA8.Locked=true -PA8.PinState=GPIO_PIN_SET -PA8.Signal=GPIO_Output -PB1.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PB1.GPIO_Label=LED3_R -PB1.GPIO_PuPd=GPIO_PULLUP -PB1.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM -PB1.Locked=true -PB1.PinState=GPIO_PIN_SET -PB1.Signal=GPIO_Output -PB11.Mode=RMII -PB11.Signal=ETH_TX_EN -PB12.Mode=RMII -PB12.Signal=ETH_TXD0 -PB13.Mode=RMII -PB13.Signal=ETH_TXD1 -PB2.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP -PB2.GPIO_Label=LED3_G -PB2.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP -PB2.GPIO_PuPd=GPIO_PULLUP -PB2.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM -PB2.Locked=true -PB2.PinState=GPIO_PIN_SET -PB2.Signal=GPIO_Output -PB3.Locked=true -PB3.Mode=Full_Duplex_Master -PB3.Signal=SPI1_SCK -PB4.Locked=true -PB4.Mode=Full_Duplex_Master -PB4.Signal=SPI1_MISO -PB5.Locked=true -PB5.Mode=Full_Duplex_Master -PB5.Signal=SPI1_MOSI -PB6.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PB6.GPIO_Label=DAC1_CS -PB6.GPIO_PuPd=GPIO_PULLUP -PB6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PB6.Locked=true -PB6.PinState=GPIO_PIN_SET -PB6.Signal=GPIO_Output -PB7.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP -PB7.GPIO_Label=DAC2_CS -PB7.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP -PB7.GPIO_PuPd=GPIO_PULLUP -PB7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PB7.Locked=true -PB7.PinState=GPIO_PIN_SET -PB7.Signal=GPIO_Output -PC0.GPIOParameters=GPIO_Speed,PinState,GPIO_Label -PC0.GPIO_Label=ETH_RESET -PC0.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM -PC0.Locked=true -PC0.PinState=GPIO_PIN_SET -PC0.Signal=GPIO_Output -PC1.Mode=RMII -PC1.Signal=ETH_MDC -PC10.GPIOParameters=GPIO_Label -PC10.GPIO_Label=LCD_TX -PC10.Locked=true -PC10.Mode=Asynchronous -PC10.Signal=UART4_TX -PC11.GPIOParameters=GPIO_Label -PC11.GPIO_Label=LCD_RX -PC11.Mode=Asynchronous -PC11.Signal=UART4_RX -PC12.GPIOParameters=GPIO_Label -PC12.GPIO_Label=HART1_TX -PC12.Mode=Asynchronous -PC12.Signal=UART5_TX -PC4.Mode=RMII -PC4.Signal=ETH_RXD0 -PC5.Mode=RMII -PC5.Signal=ETH_RXD1 -PC6.GPIOParameters=GPIO_Label -PC6.GPIO_Label=BLE1_TX -PC6.Mode=Asynchronous -PC6.Signal=USART6_TX -PC7.GPIOParameters=GPIO_Label -PC7.GPIO_Label=BLE1_RX -PC7.Mode=Asynchronous -PC7.Signal=USART6_RX -PC8.GPIOParameters=GPIO_PuPd,GPIO_Label -PC8.GPIO_Label=DI_CH1 -PC8.GPIO_PuPd=GPIO_PULLUP -PC8.Locked=true -PC8.Signal=GPIO_Input -PC9.GPIOParameters=GPIO_PuPd,GPIO_Label -PC9.GPIO_Label=DI_CH2 -PC9.GPIO_PuPd=GPIO_PULLUP -PC9.Locked=true -PC9.Signal=GPIO_Input -PD0.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PD0.GPIO_Label=HART1_RTS -PD0.GPIO_PuPd=GPIO_PULLUP -PD0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD0.Locked=true -PD0.PinState=GPIO_PIN_SET -PD0.Signal=GPIO_Output -PD1.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI -PD1.GPIO_Label=HART1_OCD -PD1.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING -PD1.GPIO_PuPd=GPIO_PULLUP -PD1.Locked=true -PD1.Signal=GPXTI1 -PD11.GPIOParameters=GPIO_Speed,PinState,GPIO_Label,GPIO_ModeDefaultOutputPP -PD11.GPIO_Label=DO_CH4 -PD11.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP -PD11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD11.Locked=true -PD11.PinState=GPIO_PIN_SET -PD11.Signal=GPIO_Output -PD12.GPIOParameters=GPIO_Speed,PinState,GPIO_Label -PD12.GPIO_Label=DO_CH3 -PD12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD12.Locked=true -PD12.PinState=GPIO_PIN_SET -PD12.Signal=GPIO_Output -PD13.GPIOParameters=GPIO_Speed,PinState,GPIO_Label -PD13.GPIO_Label=DO_CH1 -PD13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD13.Locked=true -PD13.PinState=GPIO_PIN_SET -PD13.Signal=GPIO_Output -PD14.GPIOParameters=GPIO_Speed,PinState,GPIO_Label -PD14.GPIO_Label=DO_CH2 -PD14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD14.Locked=true -PD14.PinState=GPIO_PIN_SET -PD14.Signal=GPIO_Output -PD15.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PD15.GPIO_Label=DO_EN -PD15.GPIO_PuPd=GPIO_PULLUP -PD15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD15.Locked=true -PD15.PinState=GPIO_PIN_SET -PD15.Signal=GPIO_Output -PD2.GPIOParameters=GPIO_Label -PD2.GPIO_Label=HART1_RX -PD2.Mode=Asynchronous -PD2.Signal=UART5_RX -PD3.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI -PD3.GPIO_Label=HART2_OCD -PD3.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING -PD3.GPIO_PuPd=GPIO_PULLUP -PD3.Locked=true -PD3.Signal=GPXTI3 -PD4.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PD4.GPIO_Label=HART2_RTS -PD4.GPIO_PuPd=GPIO_PULLUP -PD4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD4.Locked=true -PD4.PinState=GPIO_PIN_SET -PD4.Signal=GPIO_Output -PD5.GPIOParameters=GPIO_Label -PD5.GPIO_Label=HART2_TX -PD5.Mode=Asynchronous -PD5.Signal=USART2_TX -PD6.GPIOParameters=GPIO_Label -PD6.GPIO_Label=HART2_RX -PD6.Locked=true -PD6.Mode=Asynchronous -PD6.Signal=USART2_RX -PD7.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label -PD7.GPIO_Label=HART2_RST -PD7.GPIO_PuPd=GPIO_PULLUP -PD7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PD7.Locked=true -PD7.Signal=GPIO_Output -PD8.GPIOParameters=GPIO_Label -PD8.GPIO_Label=BLE2_TX -PD8.Locked=true -PD8.Mode=Asynchronous -PD8.Signal=USART3_TX -PD9.GPIOParameters=GPIO_Label -PD9.GPIO_Label=BLE2_RX -PD9.Locked=true -PD9.Mode=Asynchronous -PD9.Signal=USART3_RX -PE0.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PE0.GPIO_Label=ADC_CS -PE0.GPIO_PuPd=GPIO_PULLUP -PE0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PE0.Locked=true -PE0.PinState=GPIO_PIN_SET -PE0.Signal=GPIO_Output -PE1.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP -PE1.GPIO_Label=AD7124_SYNC -PE1.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP -PE1.GPIO_PuPd=GPIO_PULLDOWN -PE1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH -PE1.Locked=true -PE1.PinState=GPIO_PIN_SET -PE1.Signal=GPIO_Output -PE12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP -PE12.GPIO_Label=LED2_R -PE12.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP -PE12.GPIO_PuPd=GPIO_PULLUP -PE12.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM -PE12.Locked=true -PE12.PinState=GPIO_PIN_SET -PE12.Signal=GPIO_Output -PE13.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PE13.GPIO_Label=LED2_G -PE13.GPIO_PuPd=GPIO_PULLUP -PE13.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM -PE13.Locked=true -PE13.PinState=GPIO_PIN_SET -PE13.Signal=GPIO_Output -PE14.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP -PE14.GPIO_Label=LED2_Y -PE14.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP -PE14.GPIO_PuPd=GPIO_PULLUP -PE14.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM -PE14.Locked=true -PE14.PinState=GPIO_PIN_SET -PE14.Signal=GPIO_Output -PE2.GPIOParameters=GPIO_PuPd,GPIO_Label -PE2.GPIO_Label=DI_CH5 -PE2.GPIO_PuPd=GPIO_PULLUP -PE2.Locked=true -PE2.Signal=GPIO_Input -PE3.GPIOParameters=GPIO_PuPd,GPIO_Label -PE3.GPIO_Label=DI_CH6 -PE3.GPIO_PuPd=GPIO_PULLUP -PE3.Locked=true -PE3.Signal=GPIO_Input -PE7.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label -PE7.GPIO_Label=LED3_Y -PE7.GPIO_PuPd=GPIO_PULLUP -PE7.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM -PE7.Locked=true -PE7.PinState=GPIO_PIN_SET -PE7.Signal=GPIO_Output -PH0-OSC_IN.Mode=HSE-External-Oscillator -PH0-OSC_IN.Signal=RCC_OSC_IN -PH1-OSC_OUT.Mode=HSE-External-Oscillator -PH1-OSC_OUT.Signal=RCC_OSC_OUT -PinOutPanel.RotationAngle=0 -ProjectManager.AskForMigrate=true -ProjectManager.BackupPrevious=false -ProjectManager.CompilerOptimize=6 -ProjectManager.ComputerToolchain=false -ProjectManager.CoupleFile=true -ProjectManager.CustomerFirmwarePackage= -ProjectManager.DefaultFWLocation=true -ProjectManager.DeletePrevious=true -ProjectManager.DeviceId=STM32F407VGTx -ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.27.1 -ProjectManager.FreePins=false -ProjectManager.HalAssertFull=false -ProjectManager.HeapSize=0x200 -ProjectManager.KeepUserCode=true -ProjectManager.LastFirmware=true -ProjectManager.LibraryCopy=1 -ProjectManager.MainLocation=Core/Src -ProjectManager.NoMain=false -ProjectManager.PreviousToolchain= -ProjectManager.ProjectBuild=false -ProjectManager.ProjectFileName=semi-finished_product_testing.ioc -ProjectManager.ProjectName=semi-finished_product_testing -ProjectManager.ProjectStructure= -ProjectManager.RegisterCallBack= -ProjectManager.StackSize=0x400 -ProjectManager.TargetToolchain=MDK-ARM V5.32 -ProjectManager.ToolChainLocation= -ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_LWIP_Init-LWIP-false-HAL-false,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_USART6_UART_Init-USART6-false-HAL-true,8-MX_UART4_Init-UART4-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true,10-MX_UART5_Init-UART5-false-HAL-true,11-MX_USART2_UART_Init-USART2-false-HAL-true,12-MX_USART3_UART_Init-USART3-false-HAL-true -RCC.48MHZClocksFreq_Value=55296000 -RCC.AHBFreq_Value=110592000 -RCC.APB1CLKDivider=RCC_HCLK_DIV4 -RCC.APB1Freq_Value=27648000 -RCC.APB1TimFreq_Value=55296000 -RCC.APB2CLKDivider=RCC_HCLK_DIV4 -RCC.APB2Freq_Value=27648000 -RCC.APB2TimFreq_Value=55296000 -RCC.CortexFreq_Value=110592000 -RCC.EthernetFreq_Value=110592000 -RCC.FCLKCortexFreq_Value=110592000 -RCC.FamilyName=M -RCC.HCLKFreq_Value=110592000 -RCC.HSE_VALUE=11059200 -RCC.HSI_VALUE=16000000 -RCC.I2SClocksFreq_Value=106168320 -RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S -RCC.LSE_VALUE=32768 -RCC.LSI_VALUE=32000 -RCC.MCO2PinFreq_Value=110592000 -RCC.PLLCLKFreq_Value=110592000 -RCC.PLLM=10 -RCC.PLLN=200 -RCC.PLLQCLKFreq_Value=55296000 -RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE -RCC.RTCFreq_Value=32000 -RCC.RTCHSEDivFreq_Value=5529600 -RCC.SYSCLKFreq_VALUE=110592000 -RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK -RCC.VCOI2SOutputFreq_Value=212336640 -RCC.VCOInputFreq_Value=1105920 -RCC.VCOOutputFreq_Value=221184000 -RCC.VcooutputI2S=106168320 -SH.GPXTI1.0=GPIO_EXTI1 -SH.GPXTI1.ConfNb=1 -SH.GPXTI3.0=GPIO_EXTI3 -SH.GPXTI3.ConfNb=1 -SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1 -SH.S_TIM2_CH1_ETR.ConfNb=1 -SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256 -SPI1.CLKPhase=SPI_PHASE_2EDGE -SPI1.CLKPolarity=SPI_POLARITY_HIGH -SPI1.CalculateBaudRate=108.0 KBits/s -SPI1.Direction=SPI_DIRECTION_2LINES -SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase -SPI1.Mode=SPI_MODE_MASTER -SPI1.VirtualType=VM_MASTER -TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 -TIM2.IPParameters=Channel-PWM Generation1 CH1,Period,Pulse-PWM Generation1 CH1 -TIM2.Period=119 -TIM2.Pulse-PWM\ Generation1\ CH1=60 -TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE -TIM3.IPParameters=Prescaler,Period,AutoReloadPreload -TIM3.Period=999 -TIM3.Prescaler=55295 -UART4.IPParameters=VirtualMode -UART4.VirtualMode=Asynchronous -UART5.BaudRate=1200 -UART5.IPParameters=VirtualMode,BaudRate,WordLength,Parity -UART5.Parity=PARITY_ODD -UART5.VirtualMode=Asynchronous -UART5.WordLength=WORDLENGTH_9B -USART2.BaudRate=1200 -USART2.IPParameters=VirtualMode,BaudRate,WordLength,Parity -USART2.Parity=PARITY_ODD -USART2.VirtualMode=VM_ASYNC -USART2.WordLength=WORDLENGTH_9B -USART3.IPParameters=VirtualMode -USART3.VirtualMode=VM_ASYNC -USART6.IPParameters=VirtualMode -USART6.VirtualMode=VM_ASYNC -VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1 -VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1 -VP_LWIP_VS_Enabled.Mode=Enabled -VP_LWIP_VS_Enabled.Signal=LWIP_VS_Enabled -VP_SYS_VS_tim1.Mode=TIM1 -VP_SYS_VS_tim1.Signal=SYS_VS_tim1 -VP_TIM2_VS_ClockSourceINT.Mode=Internal -VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT -VP_TIM3_VS_ClockSourceINT.Mode=Internal -VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT -board=custom -rtos.0.ip=FREERTOS