update
parent
663339945c
commit
7bbdb8a3c5
|
@ -22,7 +22,7 @@
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.433736509" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" value="0" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.433736509" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" value="0" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.276377927" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" value="0" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.276377927" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" value="0" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1980681105" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="genericBoard" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1980681105" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="genericBoard" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1465740073" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.3 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32 || STM32F107VCTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../USB_DEVICE/Target | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include | ../Core/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc | ../USB_DEVICE/App | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 || || || USE_HAL_DRIVER | STM32F107xC || || Drivers | Core/Startup | Middlewares | Core | USB_DEVICE || || || ${workspace_loc:/${ProjName}/STM32F107VCTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || " valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1465740073" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.3 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32 || STM32F107VCTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../USB_DEVICE/Target | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include | ../Core/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc | ../USB_DEVICE/App | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 || || || USE_HAL_DRIVER | STM32F107xC || || Drivers | Core/Startup | Middlewares | Core | USB_DEVICE || || || ${workspace_loc:/${ProjName}/STM32F107VCTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || " valueType="string"/>
|
||||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1735301810" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1735301810" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
||||||
<builder buildPath="${workspace_loc:/NaviKit_stm32}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.510228817" managedBuildOn="true" name="Gnu Make Builder.Debug" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
<builder buildPath="${workspace_loc:/NaviKit_stm32}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.510228817" managedBuildOn="true" name="Gnu Make Builder.Debug" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.451303658" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.451303658" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
||||||
|
@ -41,6 +41,7 @@
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/>
|
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/>
|
||||||
<listOptionValue builtIn="false" value="../USB_DEVICE/Target"/>
|
<listOptionValue builtIn="false" value="../USB_DEVICE/Target"/>
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc"/>
|
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc"/>
|
||||||
|
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2"/>
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3"/>
|
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
||||||
|
@ -49,7 +50,6 @@
|
||||||
<listOptionValue builtIn="false" value="../USB_DEVICE/App"/>
|
<listOptionValue builtIn="false" value="../USB_DEVICE/App"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS"/>
|
|
||||||
</option>
|
</option>
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1357480259" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1357480259" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
||||||
</tool>
|
</tool>
|
||||||
|
@ -126,6 +126,7 @@
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/>
|
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/>
|
||||||
<listOptionValue builtIn="false" value="../USB_DEVICE/Target"/>
|
<listOptionValue builtIn="false" value="../USB_DEVICE/Target"/>
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc"/>
|
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc"/>
|
||||||
|
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2"/>
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3"/>
|
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
||||||
|
@ -134,7 +135,6 @@
|
||||||
<listOptionValue builtIn="false" value="../USB_DEVICE/App"/>
|
<listOptionValue builtIn="false" value="../USB_DEVICE/App"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
||||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS"/>
|
|
||||||
</option>
|
</option>
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.77383630" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.77383630" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
||||||
</tool>
|
</tool>
|
||||||
|
|
66
.mxproject
66
.mxproject
File diff suppressed because one or more lines are too long
|
@ -58,19 +58,28 @@
|
||||||
#define configUSE_TICK_HOOK 0
|
#define configUSE_TICK_HOOK 0
|
||||||
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
||||||
#define configTICK_RATE_HZ ((TickType_t)1000)
|
#define configTICK_RATE_HZ ((TickType_t)1000)
|
||||||
#define configMAX_PRIORITIES ( 7 )
|
#define configMAX_PRIORITIES ( 56 )
|
||||||
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
|
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
|
||||||
#define configTOTAL_HEAP_SIZE ((size_t)4096)
|
#define configTOTAL_HEAP_SIZE ((size_t)4096)
|
||||||
#define configMAX_TASK_NAME_LEN ( 16 )
|
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||||
|
#define configUSE_TRACE_FACILITY 1
|
||||||
#define configUSE_16_BIT_TICKS 0
|
#define configUSE_16_BIT_TICKS 0
|
||||||
#define configUSE_MUTEXES 1
|
#define configUSE_MUTEXES 1
|
||||||
#define configQUEUE_REGISTRY_SIZE 8
|
#define configQUEUE_REGISTRY_SIZE 8
|
||||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
#define configUSE_RECURSIVE_MUTEXES 1
|
||||||
|
#define configUSE_COUNTING_SEMAPHORES 1
|
||||||
|
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
|
||||||
|
|
||||||
/* Co-routine definitions. */
|
/* Co-routine definitions. */
|
||||||
#define configUSE_CO_ROUTINES 0
|
#define configUSE_CO_ROUTINES 0
|
||||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||||
|
|
||||||
|
/* Software timer definitions. */
|
||||||
|
#define configUSE_TIMERS 1
|
||||||
|
#define configTIMER_TASK_PRIORITY ( 2 )
|
||||||
|
#define configTIMER_QUEUE_LENGTH 10
|
||||||
|
#define configTIMER_TASK_STACK_DEPTH 256
|
||||||
|
|
||||||
/* Set the following definitions to 1 to include the API function, or zero
|
/* Set the following definitions to 1 to include the API function, or zero
|
||||||
to exclude the API function. */
|
to exclude the API function. */
|
||||||
#define INCLUDE_vTaskPrioritySet 1
|
#define INCLUDE_vTaskPrioritySet 1
|
||||||
|
@ -78,9 +87,19 @@ to exclude the API function. */
|
||||||
#define INCLUDE_vTaskDelete 1
|
#define INCLUDE_vTaskDelete 1
|
||||||
#define INCLUDE_vTaskCleanUpResources 0
|
#define INCLUDE_vTaskCleanUpResources 0
|
||||||
#define INCLUDE_vTaskSuspend 1
|
#define INCLUDE_vTaskSuspend 1
|
||||||
#define INCLUDE_vTaskDelayUntil 0
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
#define INCLUDE_vTaskDelay 1
|
#define INCLUDE_vTaskDelay 1
|
||||||
#define INCLUDE_xTaskGetSchedulerState 1
|
#define INCLUDE_xTaskGetSchedulerState 1
|
||||||
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
#define INCLUDE_xQueueGetMutexHolder 1
|
||||||
|
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
||||||
|
#define INCLUDE_eTaskGetState 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
|
||||||
|
* by the application thus the correct define need to be enabled below
|
||||||
|
*/
|
||||||
|
#define USE_FreeRTOS_HEAP_4
|
||||||
|
|
||||||
/* Cortex-M specific definitions. */
|
/* Cortex-M specific definitions. */
|
||||||
#ifdef __NVIC_PRIO_BITS
|
#ifdef __NVIC_PRIO_BITS
|
||||||
|
|
|
@ -88,6 +88,8 @@ void Error_Handler(void);
|
||||||
#define USB2_VBUS_CTL_5_GPIO_Port GPIOD
|
#define USB2_VBUS_CTL_5_GPIO_Port GPIOD
|
||||||
#define USB2_VBUS_CTL_6_Pin GPIO_PIN_7
|
#define USB2_VBUS_CTL_6_Pin GPIO_PIN_7
|
||||||
#define USB2_VBUS_CTL_6_GPIO_Port GPIOD
|
#define USB2_VBUS_CTL_6_GPIO_Port GPIOD
|
||||||
|
#define BUZZ_CTL_Pin GPIO_PIN_6
|
||||||
|
#define BUZZ_CTL_GPIO_Port GPIOB
|
||||||
#define CHRG_STATUS_Pin GPIO_PIN_7
|
#define CHRG_STATUS_Pin GPIO_PIN_7
|
||||||
#define CHRG_STATUS_GPIO_Port GPIOB
|
#define CHRG_STATUS_GPIO_Port GPIOB
|
||||||
#define COULOMB_SCL_Pin GPIO_PIN_8
|
#define COULOMB_SCL_Pin GPIO_PIN_8
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
/*#define HAL_SPI_MODULE_ENABLED */
|
/*#define HAL_SPI_MODULE_ENABLED */
|
||||||
/*#define HAL_SRAM_MODULE_ENABLED */
|
/*#define HAL_SRAM_MODULE_ENABLED */
|
||||||
#define HAL_TIM_MODULE_ENABLED
|
#define HAL_TIM_MODULE_ENABLED
|
||||||
/*#define HAL_UART_MODULE_ENABLED */
|
#define HAL_UART_MODULE_ENABLED
|
||||||
/*#define HAL_USART_MODULE_ENABLED */
|
/*#define HAL_USART_MODULE_ENABLED */
|
||||||
#define HAL_WWDG_MODULE_ENABLED
|
#define HAL_WWDG_MODULE_ENABLED
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* File Name : USART.h
|
||||||
|
* Description : This file provides code for the configuration
|
||||||
|
* of the USART instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2020 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* 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;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
|
void MX_UART4_Init(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /*__ usart_H */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -48,34 +48,24 @@
|
||||||
/* USER CODE BEGIN Variables */
|
/* USER CODE BEGIN Variables */
|
||||||
|
|
||||||
/* USER CODE END Variables */
|
/* USER CODE END Variables */
|
||||||
osThreadId defaultTaskHandle;
|
/* Definitions for defaultTask */
|
||||||
|
osThreadId_t defaultTaskHandle;
|
||||||
|
const osThreadAttr_t defaultTask_attributes = {
|
||||||
|
.name = "defaultTask",
|
||||||
|
.priority = (osPriority_t) osPriorityNormal,
|
||||||
|
.stack_size = 128 * 4
|
||||||
|
};
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
/* USER CODE BEGIN FunctionPrototypes */
|
/* USER CODE BEGIN FunctionPrototypes */
|
||||||
|
|
||||||
/* USER CODE END FunctionPrototypes */
|
/* USER CODE END FunctionPrototypes */
|
||||||
|
|
||||||
void StartDefaultTask(void const * argument);
|
void StartDefaultTask(void *argument);
|
||||||
|
|
||||||
extern void MX_USB_DEVICE_Init(void);
|
extern void MX_USB_DEVICE_Init(void);
|
||||||
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
||||||
|
|
||||||
/* GetIdleTaskMemory prototype (linked to static allocation support) */
|
|
||||||
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );
|
|
||||||
|
|
||||||
/* USER CODE BEGIN GET_IDLE_TASK_MEMORY */
|
|
||||||
static StaticTask_t xIdleTaskTCBBuffer;
|
|
||||||
static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];
|
|
||||||
|
|
||||||
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
|
|
||||||
{
|
|
||||||
*ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;
|
|
||||||
*ppxIdleTaskStackBuffer = &xIdleStack[0];
|
|
||||||
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
|
|
||||||
/* place for user code */
|
|
||||||
}
|
|
||||||
/* USER CODE END GET_IDLE_TASK_MEMORY */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief FreeRTOS initialization
|
* @brief FreeRTOS initialization
|
||||||
* @param None
|
* @param None
|
||||||
|
@ -103,9 +93,8 @@ void MX_FREERTOS_Init(void) {
|
||||||
/* USER CODE END RTOS_QUEUES */
|
/* USER CODE END RTOS_QUEUES */
|
||||||
|
|
||||||
/* Create the thread(s) */
|
/* Create the thread(s) */
|
||||||
/* definition and creation of defaultTask */
|
/* creation of defaultTask */
|
||||||
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
|
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
|
||||||
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_THREADS */
|
/* USER CODE BEGIN RTOS_THREADS */
|
||||||
/* add threads, ... */
|
/* add threads, ... */
|
||||||
|
@ -120,7 +109,7 @@ void MX_FREERTOS_Init(void) {
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
/* USER CODE END Header_StartDefaultTask */
|
/* USER CODE END Header_StartDefaultTask */
|
||||||
void StartDefaultTask(void const * argument)
|
void StartDefaultTask(void *argument)
|
||||||
{
|
{
|
||||||
/* init code for USB_DEVICE */
|
/* init code for USB_DEVICE */
|
||||||
MX_USB_DEVICE_Init();
|
MX_USB_DEVICE_Init();
|
||||||
|
|
|
@ -45,6 +45,7 @@ void MX_GPIO_Init(void)
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
@ -59,6 +60,9 @@ void MX_GPIO_Init(void)
|
||||||
HAL_GPIO_WritePin(GPIOD, USB2_VBUS_CTL_1_Pin|USB2_VBUS_CTL_2_Pin|USB2_VBUS_CTL_3_Pin|USB2_VBUS_CTL_4_Pin
|
HAL_GPIO_WritePin(GPIOD, USB2_VBUS_CTL_1_Pin|USB2_VBUS_CTL_2_Pin|USB2_VBUS_CTL_3_Pin|USB2_VBUS_CTL_4_Pin
|
||||||
|USB2_VBUS_CTL_5_Pin|USB2_VBUS_CTL_6_Pin, GPIO_PIN_RESET);
|
|USB2_VBUS_CTL_5_Pin|USB2_VBUS_CTL_6_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(BUZZ_CTL_GPIO_Port, BUZZ_CTL_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pins : PEPin PEPin */
|
/*Configure GPIO pins : PEPin PEPin */
|
||||||
GPIO_InitStruct.Pin = POWER_BUTTON_Pin|COULOMB_ALCC_Pin;
|
GPIO_InitStruct.Pin = POWER_BUTTON_Pin|COULOMB_ALCC_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
@ -90,6 +94,13 @@ void MX_GPIO_Init(void)
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = BUZZ_CTL_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(BUZZ_CTL_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pin : PtPin */
|
/*Configure GPIO pin : PtPin */
|
||||||
GPIO_InitStruct.Pin = CHRG_STATUS_Pin;
|
GPIO_InitStruct.Pin = CHRG_STATUS_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "cmsis_os.h"
|
#include "cmsis_os.h"
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
#include "iwdg.h"
|
#include "iwdg.h"
|
||||||
|
#include "usart.h"
|
||||||
#include "usb_device.h"
|
#include "usb_device.h"
|
||||||
#include "wwdg.h"
|
#include "wwdg.h"
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
|
@ -74,7 +75,6 @@ int main(void)
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
|
||||||
/* MCU Configuration--------------------------------------------------------*/
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
@ -96,18 +96,18 @@ int main(void)
|
||||||
MX_I2C1_Init();
|
MX_I2C1_Init();
|
||||||
MX_IWDG_Init();
|
MX_IWDG_Init();
|
||||||
MX_WWDG_Init();
|
MX_WWDG_Init();
|
||||||
|
MX_UART4_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
/* Call init function for freertos objects (in freertos.c) */
|
/* Init scheduler */
|
||||||
|
osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */
|
||||||
MX_FREERTOS_Init();
|
MX_FREERTOS_Init();
|
||||||
|
|
||||||
/* Start scheduler */
|
/* Start scheduler */
|
||||||
osKernelStart();
|
osKernelStart();
|
||||||
|
|
||||||
/* We should never get here as control is now taken by the scheduler */
|
/* We should never get here as control is now taken by the scheduler */
|
||||||
|
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
while (1)
|
while (1)
|
||||||
|
@ -176,7 +176,7 @@ void SystemClock_Config(void)
|
||||||
|
|
||||||
/* USER CODE END 4 */
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Period elapsed callback in non blocking mode
|
* @brief Period elapsed callback in non blocking mode
|
||||||
* @note This function is called when TIM7 interrupt took place, inside
|
* @note This function is called when TIM7 interrupt took place, inside
|
||||||
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
|
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* File Name : USART.c
|
||||||
|
* Description : This file provides code for the configuration
|
||||||
|
* of the USART instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2020 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usart.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart4;
|
||||||
|
|
||||||
|
/* UART4 init function */
|
||||||
|
void MX_UART4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = GPIO_PIN_10;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_11;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN UART4_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END UART4_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, GPIO_PIN_10|GPIO_PIN_11);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN UART4_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END UART4_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -0,0 +1,852 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_hal_uart.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of UART HAL module.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2016 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under BSD 3-Clause license,
|
||||||
|
* the "License"; You may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at:
|
||||||
|
* opensource.org/licenses/BSD-3-Clause
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __STM32F1xx_HAL_UART_H
|
||||||
|
#define __STM32F1xx_HAL_UART_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_hal_def.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_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) / (16 * (huart->Init.BaudRate)))
|
||||||
|
- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
|
||||||
|
|
||||||
|
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. This feature is only available
|
||||||
|
on STM32F100xx family, so OverSampling parameter should always be set to 16. */
|
||||||
|
} 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 not 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 not 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 UART handle Structure definition
|
||||||
|
*/
|
||||||
|
typedef struct __UART_HandleTypeDef
|
||||||
|
{
|
||||||
|
USART_TypeDef *Instance; /*!< UART registers base address */
|
||||||
|
|
||||||
|
UART_InitTypeDef Init; /*!< UART communication parameters */
|
||||||
|
|
||||||
|
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 */
|
||||||
|
|
||||||
|
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 (* 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 */
|
||||||
|
|
||||||
|
#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
|
||||||
|
#if defined(USART_CR1_OVER8)
|
||||||
|
#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8)
|
||||||
|
#endif /* 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))
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 has occurred 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{ \
|
||||||
|
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{ \
|
||||||
|
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{ \
|
||||||
|
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{ \
|
||||||
|
CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\
|
||||||
|
(__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \
|
||||||
|
} while(0U)
|
||||||
|
#if defined(USART_CR3_ONEBIT)
|
||||||
|
|
||||||
|
/** @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))
|
||||||
|
#endif /* UART_ONE_BIT_SAMPLE_Feature */
|
||||||
|
|
||||||
|
/** @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);
|
||||||
|
#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, 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, 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, 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);
|
||||||
|
/* 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);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @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))
|
||||||
|
#if defined(USART_CR1_OVER8)
|
||||||
|
#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \
|
||||||
|
((SAMPLING) == UART_OVERSAMPLING_8))
|
||||||
|
#endif /* USART_CR1_OVER8 */
|
||||||
|
#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) <= 4500000U)
|
||||||
|
#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU)
|
||||||
|
|
||||||
|
#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(4U*(_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_) (((_PCLK_)*25U)/(2U*(_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
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __STM32F1xx_HAL_UART_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,837 @@
|
||||||
|
/* --------------------------------------------------------------------------
|
||||||
|
* Portions Copyright © 2017 STMicroelectronics International N.V. All rights reserved.
|
||||||
|
* Portions Copyright (c) 2013-2017 ARM Limited. All rights reserved.
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* Project: CMSIS-RTOS API
|
||||||
|
* Title: cmsis_os.h header file
|
||||||
|
*
|
||||||
|
* Version 0.02
|
||||||
|
* Initial Proposal Phase
|
||||||
|
* Version 0.03
|
||||||
|
* osKernelStart added, optional feature: main started as thread
|
||||||
|
* osSemaphores have standard behavior
|
||||||
|
* osTimerCreate does not start the timer, added osTimerStart
|
||||||
|
* osThreadPass is renamed to osThreadYield
|
||||||
|
* Version 1.01
|
||||||
|
* Support for C++ interface
|
||||||
|
* - const attribute removed from the osXxxxDef_t typedefs
|
||||||
|
* - const attribute added to the osXxxxDef macros
|
||||||
|
* Added: osTimerDelete, osMutexDelete, osSemaphoreDelete
|
||||||
|
* Added: osKernelInitialize
|
||||||
|
* Version 1.02
|
||||||
|
* Control functions for short timeouts in microsecond resolution:
|
||||||
|
* Added: osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec
|
||||||
|
* Removed: osSignalGet
|
||||||
|
* Version 2.0.0
|
||||||
|
* OS objects creation without macros (dynamic creation and resource allocation):
|
||||||
|
* - added: osXxxxNew functions which replace osXxxxCreate
|
||||||
|
* - added: osXxxxAttr_t structures
|
||||||
|
* - deprecated: osXxxxCreate functions, osXxxxDef_t structures
|
||||||
|
* - deprecated: osXxxxDef and osXxxx macros
|
||||||
|
* osStatus codes simplified and renamed to osStatus_t
|
||||||
|
* osEvent return structure deprecated
|
||||||
|
* Kernel:
|
||||||
|
* - added: osKernelInfo_t and osKernelGetInfo
|
||||||
|
* - added: osKernelState_t and osKernelGetState (replaces osKernelRunning)
|
||||||
|
* - added: osKernelLock, osKernelUnlock
|
||||||
|
* - added: osKernelSuspend, osKernelResume
|
||||||
|
* - added: osKernelGetTickCount, osKernelGetTickFreq
|
||||||
|
* - renamed osKernelSysTick to osKernelGetSysTimerCount
|
||||||
|
* - replaced osKernelSysTickFrequency with osKernelGetSysTimerFreq
|
||||||
|
* - deprecated osKernelSysTickMicroSec
|
||||||
|
* Thread:
|
||||||
|
* - extended number of thread priorities
|
||||||
|
* - renamed osPrioriry to osPrioriry_t
|
||||||
|
* - replaced osThreadCreate with osThreadNew
|
||||||
|
* - added: osThreadGetName
|
||||||
|
* - added: osThreadState_t and osThreadGetState
|
||||||
|
* - added: osThreadGetStackSize, osThreadGetStackSpace
|
||||||
|
* - added: osThreadSuspend, osThreadResume
|
||||||
|
* - added: osThreadJoin, osThreadDetach, osThreadExit
|
||||||
|
* - added: osThreadGetCount, osThreadEnumerate
|
||||||
|
* - added: Thread Flags (moved from Signals)
|
||||||
|
* Signals:
|
||||||
|
* - renamed osSignals to osThreadFlags (moved to Thread Flags)
|
||||||
|
* - changed return value of Set/Clear/Wait functions
|
||||||
|
* - Clear function limited to current running thread
|
||||||
|
* - extended Wait function (options)
|
||||||
|
* - added: osThreadFlagsGet
|
||||||
|
* Event Flags:
|
||||||
|
* - added new independent object for handling Event Flags
|
||||||
|
* Delay and Wait functions:
|
||||||
|
* - added: osDelayUntil
|
||||||
|
* - deprecated: osWait
|
||||||
|
* Timer:
|
||||||
|
* - replaced osTimerCreate with osTimerNew
|
||||||
|
* - added: osTimerGetName, osTimerIsRunning
|
||||||
|
* Mutex:
|
||||||
|
* - extended: attributes (Recursive, Priority Inherit, Robust)
|
||||||
|
* - replaced osMutexCreate with osMutexNew
|
||||||
|
* - renamed osMutexWait to osMutexAcquire
|
||||||
|
* - added: osMutexGetName, osMutexGetOwner
|
||||||
|
* Semaphore:
|
||||||
|
* - extended: maximum and initial token count
|
||||||
|
* - replaced osSemaphoreCreate with osSemaphoreNew
|
||||||
|
* - renamed osSemaphoreWait to osSemaphoreAcquire (changed return value)
|
||||||
|
* - added: osSemaphoreGetName, osSemaphoreGetCount
|
||||||
|
* Memory Pool:
|
||||||
|
* - using osMemoryPool prefix instead of osPool
|
||||||
|
* - replaced osPoolCreate with osMemoryPoolNew
|
||||||
|
* - extended osMemoryPoolAlloc (timeout)
|
||||||
|
* - added: osMemoryPoolGetName
|
||||||
|
* - added: osMemoryPoolGetCapacity, osMemoryPoolGetBlockSize
|
||||||
|
* - added: osMemoryPoolGetCount, osMemoryPoolGetSpace
|
||||||
|
* - added: osMemoryPoolDelete
|
||||||
|
* - deprecated: osPoolCAlloc
|
||||||
|
* Message Queue:
|
||||||
|
* - extended: fixed size message instead of a single 32-bit value
|
||||||
|
* - using osMessageQueue prefix instead of osMessage
|
||||||
|
* - replaced osMessageCreate with osMessageQueueNew
|
||||||
|
* - updated: osMessageQueuePut, osMessageQueueGet
|
||||||
|
* - added: osMessageQueueGetName
|
||||||
|
* - added: osMessageQueueGetCapacity, osMessageQueueGetMsgSize
|
||||||
|
* - added: osMessageQueueGetCount, osMessageQueueGetSpace
|
||||||
|
* - added: osMessageQueueReset, osMessageQueueDelete
|
||||||
|
* Mail Queue:
|
||||||
|
* - deprecated (superseded by extended Message Queue functionality)
|
||||||
|
* Version 2.1.0
|
||||||
|
* Support for critical and uncritical sections (nesting safe):
|
||||||
|
* - updated: osKernelLock, osKernelUnlock
|
||||||
|
* - added: osKernelRestoreLock
|
||||||
|
* Updated Thread and Event Flags:
|
||||||
|
* - changed flags parameter and return type from int32_t to uint32_t
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef CMSIS_OS_H_
|
||||||
|
#define CMSIS_OS_H_
|
||||||
|
|
||||||
|
#define osCMSIS 0x20001U ///< API version (main[31:16].sub[15:0])
|
||||||
|
|
||||||
|
#define osCMSIS_FreeRTOS 0xA0001U ///< RTOS identification and version (main[31:16].sub[15:0])
|
||||||
|
|
||||||
|
#define osKernelSystemId "FreeRTOS V10.0.1" ///< RTOS identification string
|
||||||
|
|
||||||
|
#define osFeature_MainThread 0 ///< main thread 1=main can be thread, 0=not available
|
||||||
|
#define osFeature_Signals 24U ///< maximum number of Signal Flags available per thread
|
||||||
|
#define osFeature_Semaphore 65535U ///< maximum count for \ref osSemaphoreCreate function
|
||||||
|
#define osFeature_Wait 0 ///< osWait function: 1=available, 0=not available
|
||||||
|
#define osFeature_SysTick 1 ///< osKernelSysTick functions: 1=available, 0=not available
|
||||||
|
#define osFeature_Pool 0 ///< Memory Pools: 1=available, 0=not available
|
||||||
|
#define osFeature_MessageQ 1 ///< Message Queues: 1=available, 0=not available
|
||||||
|
#define osFeature_MailQ 0 ///< Mail Queues: 1=available, 0=not available
|
||||||
|
|
||||||
|
#if defined(__CC_ARM)
|
||||||
|
#define os_InRegs __value_in_regs
|
||||||
|
#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
|
||||||
|
#define os_InRegs __attribute__((value_in_regs))
|
||||||
|
#else
|
||||||
|
#define os_InRegs
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "cmsis_os2.h"
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Enumerations, structures, defines ====
|
||||||
|
|
||||||
|
/// Priority values.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef enum {
|
||||||
|
osPriorityIdle = -3, ///< Priority: idle (lowest)
|
||||||
|
osPriorityLow = -2, ///< Priority: low
|
||||||
|
osPriorityBelowNormal = -1, ///< Priority: below normal
|
||||||
|
osPriorityNormal = 0, ///< Priority: normal (default)
|
||||||
|
osPriorityAboveNormal = +1, ///< Priority: above normal
|
||||||
|
osPriorityHigh = +2, ///< Priority: high
|
||||||
|
osPriorityRealtime = +3, ///< Priority: realtime (highest)
|
||||||
|
osPriorityError = 0x84, ///< System cannot determine priority or illegal priority.
|
||||||
|
osPriorityReserved = 0x7FFFFFFF ///< Prevents enum down-size compiler optimization.
|
||||||
|
} osPriority;
|
||||||
|
#else
|
||||||
|
#define osPriority osPriority_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Entry point of a thread.
|
||||||
|
typedef void (*os_pthread) (void const *argument);
|
||||||
|
|
||||||
|
/// Entry point of a timer call back function.
|
||||||
|
typedef void (*os_ptimer) (void const *argument);
|
||||||
|
|
||||||
|
/// Timer type.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef enum {
|
||||||
|
osTimerOnce = 0, ///< One-shot timer.
|
||||||
|
osTimerPeriodic = 1 ///< Repeating timer.
|
||||||
|
} os_timer_type;
|
||||||
|
#else
|
||||||
|
#define os_timer_type osTimerType_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Timeout value.
|
||||||
|
#define osWaitForever 0xFFFFFFFFU ///< Wait forever timeout value.
|
||||||
|
|
||||||
|
/// Status code values returned by CMSIS-RTOS functions.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef enum {
|
||||||
|
osOK = 0, ///< Function completed; no error or event occurred.
|
||||||
|
osEventSignal = 0x08, ///< Function completed; signal event occurred.
|
||||||
|
osEventMessage = 0x10, ///< Function completed; message event occurred.
|
||||||
|
osEventMail = 0x20, ///< Function completed; mail event occurred.
|
||||||
|
osEventTimeout = 0x40, ///< Function completed; timeout occurred.
|
||||||
|
osErrorParameter = 0x80, ///< Parameter error: a mandatory parameter was missing or specified an incorrect object.
|
||||||
|
osErrorResource = 0x81, ///< Resource not available: a specified resource was not available.
|
||||||
|
osErrorTimeoutResource = 0xC1, ///< Resource not available within given time: a specified resource was not available within the timeout period.
|
||||||
|
osErrorISR = 0x82, ///< Not allowed in ISR context: the function cannot be called from interrupt service routines.
|
||||||
|
osErrorISRRecursive = 0x83, ///< Function called multiple times from ISR with same object.
|
||||||
|
osErrorPriority = 0x84, ///< System cannot determine priority or thread has illegal priority.
|
||||||
|
osErrorNoMemory = 0x85, ///< System is out of memory: it was impossible to allocate or reserve memory for the operation.
|
||||||
|
osErrorValue = 0x86, ///< Value of a parameter is out of range.
|
||||||
|
osErrorOS = 0xFF, ///< Unspecified RTOS error: run-time error but no other error message fits.
|
||||||
|
osStatusReserved = 0x7FFFFFFF ///< Prevents enum down-size compiler optimization.
|
||||||
|
} osStatus;
|
||||||
|
#else
|
||||||
|
typedef int32_t osStatus;
|
||||||
|
#define osEventSignal (0x08)
|
||||||
|
#define osEventMessage (0x10)
|
||||||
|
#define osEventMail (0x20)
|
||||||
|
#define osEventTimeout (0x40)
|
||||||
|
#define osErrorOS osError
|
||||||
|
#define osErrorTimeoutResource osErrorTimeout
|
||||||
|
#define osErrorISRRecursive (-126)
|
||||||
|
#define osErrorValue (-127)
|
||||||
|
#define osErrorPriority (-128)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// >>> the following data type definitions may be adapted towards a specific RTOS
|
||||||
|
|
||||||
|
/// Thread ID identifies the thread.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef void *osThreadId;
|
||||||
|
#else
|
||||||
|
#define osThreadId osThreadId_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Timer ID identifies the timer.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef void *osTimerId;
|
||||||
|
#else
|
||||||
|
#define osTimerId osTimerId_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Mutex ID identifies the mutex.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef void *osMutexId;
|
||||||
|
#else
|
||||||
|
#define osMutexId osMutexId_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Semaphore ID identifies the semaphore.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef void *osSemaphoreId;
|
||||||
|
#else
|
||||||
|
#define osSemaphoreId osSemaphoreId_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Pool ID identifies the memory pool.
|
||||||
|
typedef void *osPoolId;
|
||||||
|
|
||||||
|
/// Message ID identifies the message queue.
|
||||||
|
typedef void *osMessageQId;
|
||||||
|
|
||||||
|
/// Mail ID identifies the mail queue.
|
||||||
|
typedef void *osMailQId;
|
||||||
|
|
||||||
|
|
||||||
|
/// Thread Definition structure contains startup information of a thread.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef struct os_thread_def {
|
||||||
|
os_pthread pthread; ///< start address of thread function
|
||||||
|
osPriority tpriority; ///< initial thread priority
|
||||||
|
uint32_t instances; ///< maximum number of instances of that thread function
|
||||||
|
uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size
|
||||||
|
} osThreadDef_t;
|
||||||
|
#else
|
||||||
|
typedef struct os_thread_def {
|
||||||
|
os_pthread pthread; ///< start address of thread function
|
||||||
|
osThreadAttr_t attr; ///< thread attributes
|
||||||
|
} osThreadDef_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Timer Definition structure contains timer parameters.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef struct os_timer_def {
|
||||||
|
os_ptimer ptimer; ///< start address of a timer function
|
||||||
|
} osTimerDef_t;
|
||||||
|
#else
|
||||||
|
typedef struct os_timer_def {
|
||||||
|
os_ptimer ptimer; ///< start address of a timer function
|
||||||
|
osTimerAttr_t attr; ///< timer attributes
|
||||||
|
} osTimerDef_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Mutex Definition structure contains setup information for a mutex.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef struct os_mutex_def {
|
||||||
|
uint32_t dummy; ///< dummy value
|
||||||
|
} osMutexDef_t;
|
||||||
|
#else
|
||||||
|
#define osMutexDef_t osMutexAttr_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Semaphore Definition structure contains setup information for a semaphore.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef struct os_semaphore_def {
|
||||||
|
uint32_t dummy; ///< dummy value
|
||||||
|
} osSemaphoreDef_t;
|
||||||
|
#else
|
||||||
|
#define osSemaphoreDef_t osSemaphoreAttr_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Definition structure for memory block allocation.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef struct os_pool_def {
|
||||||
|
uint32_t pool_sz; ///< number of items (elements) in the pool
|
||||||
|
uint32_t item_sz; ///< size of an item
|
||||||
|
void *pool; ///< pointer to memory for pool
|
||||||
|
} osPoolDef_t;
|
||||||
|
#else
|
||||||
|
typedef struct os_pool_def {
|
||||||
|
uint32_t pool_sz; ///< number of items (elements) in the pool
|
||||||
|
uint32_t item_sz; ///< size of an item
|
||||||
|
osMemoryPoolAttr_t attr; ///< memory pool attributes
|
||||||
|
} osPoolDef_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Definition structure for message queue.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef struct os_messageQ_def {
|
||||||
|
uint32_t queue_sz; ///< number of elements in the queue
|
||||||
|
void *pool; ///< memory array for messages
|
||||||
|
} osMessageQDef_t;
|
||||||
|
#else
|
||||||
|
typedef struct os_messageQ_def {
|
||||||
|
uint32_t queue_sz; ///< number of elements in the queue
|
||||||
|
osMessageQueueAttr_t attr; ///< message queue attributes
|
||||||
|
} osMessageQDef_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Definition structure for mail queue.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
typedef struct os_mailQ_def {
|
||||||
|
uint32_t queue_sz; ///< number of elements in the queue
|
||||||
|
uint32_t item_sz; ///< size of an item
|
||||||
|
void *pool; ///< memory array for mail
|
||||||
|
} osMailQDef_t;
|
||||||
|
#else
|
||||||
|
typedef struct os_mailQ_def {
|
||||||
|
uint32_t queue_sz; ///< number of elements in the queue
|
||||||
|
uint32_t item_sz; ///< size of an item
|
||||||
|
void *mail; ///< pointer to mail
|
||||||
|
osMemoryPoolAttr_t mp_attr; ///< memory pool attributes
|
||||||
|
osMessageQueueAttr_t mq_attr; ///< message queue attributes
|
||||||
|
} osMailQDef_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/// Event structure contains detailed information about an event.
|
||||||
|
typedef struct {
|
||||||
|
osStatus status; ///< status code: event or error information
|
||||||
|
union {
|
||||||
|
uint32_t v; ///< message as 32-bit value
|
||||||
|
void *p; ///< message or mail as void pointer
|
||||||
|
int32_t signals; ///< signal flags
|
||||||
|
} value; ///< event value
|
||||||
|
union {
|
||||||
|
osMailQId mail_id; ///< mail id obtained by \ref osMailCreate
|
||||||
|
osMessageQId message_id; ///< message id obtained by \ref osMessageCreate
|
||||||
|
} def; ///< event definition
|
||||||
|
} osEvent;
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Kernel Management Functions ====
|
||||||
|
|
||||||
|
/// Initialize the RTOS Kernel for creating objects.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osKernelInitialize (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Start the RTOS Kernel scheduler.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osKernelStart (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Check if the RTOS kernel is already started.
|
||||||
|
/// \return 0 RTOS is not started, 1 RTOS is started.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
int32_t osKernelRunning(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available
|
||||||
|
|
||||||
|
/// Get the RTOS kernel system timer counter.
|
||||||
|
/// \return RTOS kernel system timer as 32-bit value
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
uint32_t osKernelSysTick (void);
|
||||||
|
#else
|
||||||
|
#define osKernelSysTick osKernelGetSysTimerCount
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// The RTOS kernel system timer frequency in Hz.
|
||||||
|
/// \note Reflects the system timer setting and is typically defined in a configuration file.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
#define osKernelSysTickFrequency 100000000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Convert a microseconds value to a RTOS kernel system timer value.
|
||||||
|
/// \param microsec time value in microseconds.
|
||||||
|
/// \return time value normalized to the \ref osKernelSysTickFrequency
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
#define osKernelSysTickMicroSec(microsec) (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000)
|
||||||
|
#else
|
||||||
|
#define osKernelSysTickMicroSec(microsec) (((uint64_t)microsec * osKernelGetSysTimerFreq()) / 1000000)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // System Timer available
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Thread Management Functions ====
|
||||||
|
|
||||||
|
/// Create a Thread Definition with function, priority, and stack requirements.
|
||||||
|
/// \param name name of the thread function.
|
||||||
|
/// \param priority initial priority of the thread function.
|
||||||
|
/// \param instances number of possible thread instances (used to statically allocate memory).
|
||||||
|
/// \param stacksz stack size (in bytes) requirements for the thread function.
|
||||||
|
#if defined (osObjectsExternal) // object is external
|
||||||
|
#define osThreadDef(name, priority, instances, stacksz) \
|
||||||
|
extern const osThreadDef_t os_thread_def_##name
|
||||||
|
#else // define the object
|
||||||
|
#define osThreadDef(name, priority, instances, stacksz) \
|
||||||
|
static uint32_t os_thread_stack##name[(stacksz)?(((stacksz+3)/4)):1]; \
|
||||||
|
static StaticTask_t os_thread_cb_##name; \
|
||||||
|
const osThreadDef_t os_thread_def_##name = \
|
||||||
|
{ (name), \
|
||||||
|
{ NULL, osThreadDetached, \
|
||||||
|
(instances == 1) ? (&os_thread_cb_##name) : NULL,\
|
||||||
|
(instances == 1) ? sizeof(StaticTask_t) : 0U, \
|
||||||
|
((stacksz) && (instances == 1)) ? (&os_thread_stack##name) : NULL, \
|
||||||
|
4*((stacksz+3)/4), \
|
||||||
|
(priority), 0U, 0U } }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Access a Thread definition.
|
||||||
|
/// \param name name of the thread definition object.
|
||||||
|
#define osThread(name) \
|
||||||
|
&os_thread_def_##name
|
||||||
|
|
||||||
|
/// Create a thread and add it to Active Threads and set it to state READY.
|
||||||
|
/// \param[in] thread_def thread definition referenced with \ref osThread.
|
||||||
|
/// \param[in] argument pointer that is passed to the thread function as start argument.
|
||||||
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
|
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument);
|
||||||
|
|
||||||
|
/// Return the thread ID of the current running thread.
|
||||||
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osThreadId osThreadGetId (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Change priority of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
|
/// \param[in] priority new priority value for the thread function.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Get current priority of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
|
/// \return current priority value of the specified thread.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osPriority osThreadGetPriority (osThreadId thread_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Pass control to next thread that is in state \b READY.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osThreadYield (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Terminate execution of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osThreadTerminate (osThreadId thread_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Signal Management ====
|
||||||
|
|
||||||
|
/// Set the specified Signal Flags of an active thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
|
/// \param[in] signals specifies the signal flags of the thread that should be set.
|
||||||
|
/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
|
||||||
|
int32_t osSignalSet (osThreadId thread_id, int32_t signals);
|
||||||
|
|
||||||
|
/// Clear the specified Signal Flags of an active thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
|
/// \param[in] signals specifies the signal flags of the thread that shall be cleared.
|
||||||
|
/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters or call from ISR.
|
||||||
|
int32_t osSignalClear (osThreadId thread_id, int32_t signals);
|
||||||
|
|
||||||
|
/// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread.
|
||||||
|
/// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return event flag information or error code.
|
||||||
|
os_InRegs osEvent osSignalWait (int32_t signals, uint32_t millisec);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Generic Wait Functions ====
|
||||||
|
|
||||||
|
/// Wait for Timeout (Time Delay).
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osDelay (uint32_t millisec);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined (osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available
|
||||||
|
|
||||||
|
/// Wait for Signal, Message, Mail, or Timeout.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out
|
||||||
|
/// \return event that contains signal, message, or mail information or error code.
|
||||||
|
os_InRegs osEvent osWait (uint32_t millisec);
|
||||||
|
|
||||||
|
#endif // Generic Wait available
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Timer Management Functions ====
|
||||||
|
|
||||||
|
/// Define a Timer object.
|
||||||
|
/// \param name name of the timer object.
|
||||||
|
/// \param function name of the timer call back function.
|
||||||
|
#if defined (osObjectsExternal) // object is external
|
||||||
|
#define osTimerDef(name, function) \
|
||||||
|
extern const osTimerDef_t os_timer_def_##name
|
||||||
|
#else // define the object
|
||||||
|
#define osTimerDef(name, function) \
|
||||||
|
static StaticTimer_t os_timer_cb_##name; \
|
||||||
|
const osTimerDef_t os_timer_def_##name = \
|
||||||
|
{ (function), { NULL, 0U, (&os_timer_cb_##name), sizeof(StaticTimer_t) } }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Access a Timer definition.
|
||||||
|
/// \param name name of the timer object.
|
||||||
|
#define osTimer(name) \
|
||||||
|
&os_timer_def_##name
|
||||||
|
|
||||||
|
/// Create and Initialize a timer.
|
||||||
|
/// \param[in] timer_def timer object referenced with \ref osTimer.
|
||||||
|
/// \param[in] type osTimerOnce for one-shot or osTimerPeriodic for periodic behavior.
|
||||||
|
/// \param[in] argument argument to the timer call back function.
|
||||||
|
/// \return timer ID for reference by other functions or NULL in case of error.
|
||||||
|
osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument);
|
||||||
|
|
||||||
|
/// Start or restart a timer.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value of the timer.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osTimerStart (osTimerId timer_id, uint32_t millisec);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Stop a timer.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osTimerStop (osTimerId timer_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Delete a timer.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osTimerDelete (osTimerId timer_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Mutex Management Functions ====
|
||||||
|
|
||||||
|
/// Define a Mutex.
|
||||||
|
/// \param name name of the mutex object.
|
||||||
|
#if defined (osObjectsExternal) // object is external
|
||||||
|
#define osMutexDef(name) \
|
||||||
|
extern const osMutexDef_t os_mutex_def_##name
|
||||||
|
#else // define the object
|
||||||
|
#define osMutexDef(name) \
|
||||||
|
static StaticSemaphore_t os_mutex_cb_##name; \
|
||||||
|
const osMutexDef_t os_mutex_def_##name = \
|
||||||
|
{ NULL, osMutexRecursive | osMutexPrioInherit, (&os_mutex_cb_##name), sizeof(StaticSemaphore_t) }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Access a Mutex definition.
|
||||||
|
/// \param name name of the mutex object.
|
||||||
|
#define osMutex(name) \
|
||||||
|
&os_mutex_def_##name
|
||||||
|
|
||||||
|
/// Create and Initialize a Mutex object.
|
||||||
|
/// \param[in] mutex_def mutex definition referenced with \ref osMutex.
|
||||||
|
/// \return mutex ID for reference by other functions or NULL in case of error.
|
||||||
|
osMutexId osMutexCreate (const osMutexDef_t *mutex_def);
|
||||||
|
|
||||||
|
/// Wait until a Mutex becomes available.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec);
|
||||||
|
#else
|
||||||
|
#define osMutexWait osMutexAcquire
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Release a Mutex that was obtained by \ref osMutexWait.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osMutexRelease (osMutexId mutex_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Delete a Mutex object.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osMutexDelete (osMutexId mutex_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Semaphore Management Functions ====
|
||||||
|
|
||||||
|
#if (defined (osFeature_Semaphore) && (osFeature_Semaphore != 0U)) // Semaphore available
|
||||||
|
|
||||||
|
/// Define a Semaphore object.
|
||||||
|
/// \param name name of the semaphore object.
|
||||||
|
#if defined (osObjectsExternal) // object is external
|
||||||
|
#define osSemaphoreDef(name) \
|
||||||
|
extern const osSemaphoreDef_t os_semaphore_def_##name
|
||||||
|
#else // define the object
|
||||||
|
#define osSemaphoreDef(name) \
|
||||||
|
static StaticSemaphore_t os_semaphore_cb_##name; \
|
||||||
|
const osSemaphoreDef_t os_semaphore_def_##name = \
|
||||||
|
{ NULL, 0U, (&os_semaphore_cb_##name), sizeof(StaticSemaphore_t) }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Access a Semaphore definition.
|
||||||
|
/// \param name name of the semaphore object.
|
||||||
|
#define osSemaphore(name) \
|
||||||
|
&os_semaphore_def_##name
|
||||||
|
|
||||||
|
/// Create and Initialize a Semaphore object.
|
||||||
|
/// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore.
|
||||||
|
/// \param[in] count maximum and initial number of available tokens.
|
||||||
|
/// \return semaphore ID for reference by other functions or NULL in case of error.
|
||||||
|
osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count);
|
||||||
|
|
||||||
|
/// Wait until a Semaphore token becomes available.
|
||||||
|
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return number of available tokens, or -1 in case of incorrect parameters.
|
||||||
|
int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec);
|
||||||
|
|
||||||
|
/// Release a Semaphore token.
|
||||||
|
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Delete a Semaphore object.
|
||||||
|
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
#if (osCMSIS < 0x20000U)
|
||||||
|
osStatus osSemaphoreDelete (osSemaphoreId semaphore_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // Semaphore available
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Memory Pool Management Functions ====
|
||||||
|
|
||||||
|
#if (defined(osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool available
|
||||||
|
|
||||||
|
/// \brief Define a Memory Pool.
|
||||||
|
/// \param name name of the memory pool.
|
||||||
|
/// \param no maximum number of blocks (objects) in the memory pool.
|
||||||
|
/// \param type data type of a single block (object).
|
||||||
|
#if defined (osObjectsExternal) // object is external
|
||||||
|
#define osPoolDef(name, no, type) \
|
||||||
|
extern const osPoolDef_t os_pool_def_##name
|
||||||
|
#else // define the object
|
||||||
|
#define osPoolDef(name, no, type) \
|
||||||
|
const osPoolDef_t os_pool_def_##name = \
|
||||||
|
{ (no), sizeof(type), NULL }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// \brief Access a Memory Pool definition.
|
||||||
|
/// \param name name of the memory pool
|
||||||
|
#define osPool(name) \
|
||||||
|
&os_pool_def_##name
|
||||||
|
|
||||||
|
/// Create and Initialize a Memory Pool object.
|
||||||
|
/// \param[in] pool_def memory pool definition referenced with \ref osPool.
|
||||||
|
/// \return memory pool ID for reference by other functions or NULL in case of error.
|
||||||
|
osPoolId osPoolCreate (const osPoolDef_t *pool_def);
|
||||||
|
|
||||||
|
/// Allocate a memory block from a Memory Pool.
|
||||||
|
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
||||||
|
/// \return address of the allocated memory block or NULL in case of no memory available.
|
||||||
|
void *osPoolAlloc (osPoolId pool_id);
|
||||||
|
|
||||||
|
/// Allocate a memory block from a Memory Pool and set memory block to zero.
|
||||||
|
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
||||||
|
/// \return address of the allocated memory block or NULL in case of no memory available.
|
||||||
|
void *osPoolCAlloc (osPoolId pool_id);
|
||||||
|
|
||||||
|
/// Return an allocated memory block back to a Memory Pool.
|
||||||
|
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
||||||
|
/// \param[in] block address of the allocated memory block to be returned to the memory pool.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus osPoolFree (osPoolId pool_id, void *block);
|
||||||
|
|
||||||
|
#endif // Memory Pool available
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Message Queue Management Functions ====
|
||||||
|
|
||||||
|
#if (defined(osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queue available
|
||||||
|
|
||||||
|
/// \brief Create a Message Queue Definition.
|
||||||
|
/// \param name name of the queue.
|
||||||
|
/// \param queue_sz maximum number of messages in the queue.
|
||||||
|
/// \param type data type of a single message element (for debugger).
|
||||||
|
#if defined (osObjectsExternal) // object is external
|
||||||
|
#define osMessageQDef(name, queue_sz, type) \
|
||||||
|
extern const osMessageQDef_t os_messageQ_def_##name
|
||||||
|
#else // define the object
|
||||||
|
#define osMessageQDef(name, queue_sz, type) \
|
||||||
|
static StaticQueue_t os_mq_cb_##name; \
|
||||||
|
static uint32_t os_mq_data_##name[(queue_sz) * sizeof(type)]; \
|
||||||
|
const osMessageQDef_t os_messageQ_def_##name = \
|
||||||
|
{ (queue_sz), \
|
||||||
|
{ NULL, 0U, (&os_mq_cb_##name), sizeof(StaticQueue_t), \
|
||||||
|
(&os_mq_data_##name), sizeof(os_mq_data_##name) } }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// \brief Access a Message Queue Definition.
|
||||||
|
/// \param name name of the queue
|
||||||
|
#define osMessageQ(name) \
|
||||||
|
&os_messageQ_def_##name
|
||||||
|
|
||||||
|
/// Create and Initialize a Message Queue object.
|
||||||
|
/// \param[in] queue_def message queue definition referenced with \ref osMessageQ.
|
||||||
|
/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
|
||||||
|
/// \return message queue ID for reference by other functions or NULL in case of error.
|
||||||
|
osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id);
|
||||||
|
|
||||||
|
/// Put a Message to a Queue.
|
||||||
|
/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
|
/// \param[in] info message information.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec);
|
||||||
|
|
||||||
|
/// Get a Message from a Queue or timeout if Queue is empty.
|
||||||
|
/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return event information that includes status code.
|
||||||
|
os_InRegs osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
|
#endif // Message Queue available
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Mail Queue Management Functions ====
|
||||||
|
|
||||||
|
#if (defined(osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queue available
|
||||||
|
|
||||||
|
/// \brief Create a Mail Queue Definition.
|
||||||
|
/// \param name name of the queue.
|
||||||
|
/// \param queue_sz maximum number of mails in the queue.
|
||||||
|
/// \param type data type of a single mail element.
|
||||||
|
#if defined (osObjectsExternal) // object is external
|
||||||
|
#define osMailQDef(name, queue_sz, type) \
|
||||||
|
extern const osMailQDef_t os_mailQ_def_##name
|
||||||
|
#else // define the object
|
||||||
|
#define osMailQDef(name, queue_sz, type) \
|
||||||
|
const osMailQDef_t os_mailQ_def_##name = \
|
||||||
|
{ (queue_sz), sizeof(type), NULL }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// \brief Access a Mail Queue Definition.
|
||||||
|
/// \param name name of the queue
|
||||||
|
#define osMailQ(name) \
|
||||||
|
&os_mailQ_def_##name
|
||||||
|
|
||||||
|
/// Create and Initialize a Mail Queue object.
|
||||||
|
/// \param[in] queue_def mail queue definition referenced with \ref osMailQ.
|
||||||
|
/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
|
||||||
|
/// \return mail queue ID for reference by other functions or NULL in case of error.
|
||||||
|
osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id);
|
||||||
|
|
||||||
|
/// Allocate a memory block for mail from a mail memory pool.
|
||||||
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out
|
||||||
|
/// \return pointer to memory block that can be filled with mail or NULL in case of error.
|
||||||
|
void *osMailAlloc (osMailQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
|
/// Allocate a memory block for mail from a mail memory pool and set memory block to zero.
|
||||||
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out
|
||||||
|
/// \return pointer to memory block that can be filled with mail or NULL in case of error.
|
||||||
|
void *osMailCAlloc (osMailQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
|
/// Put a Mail into a Queue.
|
||||||
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
|
/// \param[in] mail pointer to memory with mail to put into a queue.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus osMailPut (osMailQId queue_id, const void *mail);
|
||||||
|
|
||||||
|
/// Get a Mail from a Queue or timeout if Queue is empty.
|
||||||
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
|
/// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return event information that includes status code.
|
||||||
|
os_InRegs osEvent osMailGet (osMailQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
|
/// Free a memory block by returning it to a mail memory pool.
|
||||||
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
|
/// \param[in] mail pointer to memory block that was obtained with \ref osMailGet.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus osMailFree (osMailQId queue_id, void *mail);
|
||||||
|
|
||||||
|
#endif // Mail Queue available
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // CMSIS_OS_H_
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,734 @@
|
||||||
|
/* --------------------------------------------------------------------------
|
||||||
|
* Portions Copyright © 2017 STMicroelectronics International N.V. All rights reserved.
|
||||||
|
* Portions Copyright (c) 2013-2017 ARM Limited. All rights reserved.
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* Name: cmsis_os2.h
|
||||||
|
* Purpose: CMSIS RTOS2 wrapper for FreeRTOS
|
||||||
|
*
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef CMSIS_OS2_H_
|
||||||
|
#define CMSIS_OS2_H_
|
||||||
|
|
||||||
|
#ifndef __NO_RETURN
|
||||||
|
#if defined(__CC_ARM)
|
||||||
|
#define __NO_RETURN __declspec(noreturn)
|
||||||
|
#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
|
||||||
|
#define __NO_RETURN __attribute__((__noreturn__))
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
#define __NO_RETURN __attribute__((__noreturn__))
|
||||||
|
#elif defined(__ICCARM__)
|
||||||
|
#define __NO_RETURN __noreturn
|
||||||
|
#else
|
||||||
|
#define __NO_RETURN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Enumerations, structures, defines ====
|
||||||
|
|
||||||
|
/// Version information.
|
||||||
|
typedef struct {
|
||||||
|
uint32_t api; ///< API version (major.minor.rev: mmnnnrrrr dec).
|
||||||
|
uint32_t kernel; ///< Kernel version (major.minor.rev: mmnnnrrrr dec).
|
||||||
|
} osVersion_t;
|
||||||
|
|
||||||
|
/// Kernel state.
|
||||||
|
typedef enum {
|
||||||
|
osKernelInactive = 0, ///< Inactive.
|
||||||
|
osKernelReady = 1, ///< Ready.
|
||||||
|
osKernelRunning = 2, ///< Running.
|
||||||
|
osKernelLocked = 3, ///< Locked.
|
||||||
|
osKernelSuspended = 4, ///< Suspended.
|
||||||
|
osKernelError = -1, ///< Error.
|
||||||
|
osKernelReserved = 0x7FFFFFFFU ///< Prevents enum down-size compiler optimization.
|
||||||
|
} osKernelState_t;
|
||||||
|
|
||||||
|
/// Thread state.
|
||||||
|
typedef enum {
|
||||||
|
osThreadInactive = 0, ///< Inactive.
|
||||||
|
osThreadReady = 1, ///< Ready.
|
||||||
|
osThreadRunning = 2, ///< Running.
|
||||||
|
osThreadBlocked = 3, ///< Blocked.
|
||||||
|
osThreadTerminated = 4, ///< Terminated.
|
||||||
|
osThreadError = -1, ///< Error.
|
||||||
|
osThreadReserved = 0x7FFFFFFF ///< Prevents enum down-size compiler optimization.
|
||||||
|
} osThreadState_t;
|
||||||
|
|
||||||
|
/// Priority values.
|
||||||
|
typedef enum {
|
||||||
|
osPriorityNone = 0, ///< No priority (not initialized).
|
||||||
|
osPriorityIdle = 1, ///< Reserved for Idle thread.
|
||||||
|
osPriorityLow = 8, ///< Priority: low
|
||||||
|
osPriorityLow1 = 8+1, ///< Priority: low + 1
|
||||||
|
osPriorityLow2 = 8+2, ///< Priority: low + 2
|
||||||
|
osPriorityLow3 = 8+3, ///< Priority: low + 3
|
||||||
|
osPriorityLow4 = 8+4, ///< Priority: low + 4
|
||||||
|
osPriorityLow5 = 8+5, ///< Priority: low + 5
|
||||||
|
osPriorityLow6 = 8+6, ///< Priority: low + 6
|
||||||
|
osPriorityLow7 = 8+7, ///< Priority: low + 7
|
||||||
|
osPriorityBelowNormal = 16, ///< Priority: below normal
|
||||||
|
osPriorityBelowNormal1 = 16+1, ///< Priority: below normal + 1
|
||||||
|
osPriorityBelowNormal2 = 16+2, ///< Priority: below normal + 2
|
||||||
|
osPriorityBelowNormal3 = 16+3, ///< Priority: below normal + 3
|
||||||
|
osPriorityBelowNormal4 = 16+4, ///< Priority: below normal + 4
|
||||||
|
osPriorityBelowNormal5 = 16+5, ///< Priority: below normal + 5
|
||||||
|
osPriorityBelowNormal6 = 16+6, ///< Priority: below normal + 6
|
||||||
|
osPriorityBelowNormal7 = 16+7, ///< Priority: below normal + 7
|
||||||
|
osPriorityNormal = 24, ///< Priority: normal
|
||||||
|
osPriorityNormal1 = 24+1, ///< Priority: normal + 1
|
||||||
|
osPriorityNormal2 = 24+2, ///< Priority: normal + 2
|
||||||
|
osPriorityNormal3 = 24+3, ///< Priority: normal + 3
|
||||||
|
osPriorityNormal4 = 24+4, ///< Priority: normal + 4
|
||||||
|
osPriorityNormal5 = 24+5, ///< Priority: normal + 5
|
||||||
|
osPriorityNormal6 = 24+6, ///< Priority: normal + 6
|
||||||
|
osPriorityNormal7 = 24+7, ///< Priority: normal + 7
|
||||||
|
osPriorityAboveNormal = 32, ///< Priority: above normal
|
||||||
|
osPriorityAboveNormal1 = 32+1, ///< Priority: above normal + 1
|
||||||
|
osPriorityAboveNormal2 = 32+2, ///< Priority: above normal + 2
|
||||||
|
osPriorityAboveNormal3 = 32+3, ///< Priority: above normal + 3
|
||||||
|
osPriorityAboveNormal4 = 32+4, ///< Priority: above normal + 4
|
||||||
|
osPriorityAboveNormal5 = 32+5, ///< Priority: above normal + 5
|
||||||
|
osPriorityAboveNormal6 = 32+6, ///< Priority: above normal + 6
|
||||||
|
osPriorityAboveNormal7 = 32+7, ///< Priority: above normal + 7
|
||||||
|
osPriorityHigh = 40, ///< Priority: high
|
||||||
|
osPriorityHigh1 = 40+1, ///< Priority: high + 1
|
||||||
|
osPriorityHigh2 = 40+2, ///< Priority: high + 2
|
||||||
|
osPriorityHigh3 = 40+3, ///< Priority: high + 3
|
||||||
|
osPriorityHigh4 = 40+4, ///< Priority: high + 4
|
||||||
|
osPriorityHigh5 = 40+5, ///< Priority: high + 5
|
||||||
|
osPriorityHigh6 = 40+6, ///< Priority: high + 6
|
||||||
|
osPriorityHigh7 = 40+7, ///< Priority: high + 7
|
||||||
|
osPriorityRealtime = 48, ///< Priority: realtime
|
||||||
|
osPriorityRealtime1 = 48+1, ///< Priority: realtime + 1
|
||||||
|
osPriorityRealtime2 = 48+2, ///< Priority: realtime + 2
|
||||||
|
osPriorityRealtime3 = 48+3, ///< Priority: realtime + 3
|
||||||
|
osPriorityRealtime4 = 48+4, ///< Priority: realtime + 4
|
||||||
|
osPriorityRealtime5 = 48+5, ///< Priority: realtime + 5
|
||||||
|
osPriorityRealtime6 = 48+6, ///< Priority: realtime + 6
|
||||||
|
osPriorityRealtime7 = 48+7, ///< Priority: realtime + 7
|
||||||
|
osPriorityISR = 56, ///< Reserved for ISR deferred thread.
|
||||||
|
osPriorityError = -1, ///< System cannot determine priority or illegal priority.
|
||||||
|
osPriorityReserved = 0x7FFFFFFF ///< Prevents enum down-size compiler optimization.
|
||||||
|
} osPriority_t;
|
||||||
|
|
||||||
|
/// Entry point of a thread.
|
||||||
|
typedef void (*osThreadFunc_t) (void *argument);
|
||||||
|
|
||||||
|
/// Timer callback function.
|
||||||
|
typedef void (*osTimerFunc_t) (void *argument);
|
||||||
|
|
||||||
|
/// Timer type.
|
||||||
|
typedef enum {
|
||||||
|
osTimerOnce = 0, ///< One-shot timer.
|
||||||
|
osTimerPeriodic = 1 ///< Repeating timer.
|
||||||
|
} osTimerType_t;
|
||||||
|
|
||||||
|
// Timeout value.
|
||||||
|
#define osWaitForever 0xFFFFFFFFU ///< Wait forever timeout value.
|
||||||
|
|
||||||
|
// Flags options (\ref osThreadFlagsWait and \ref osEventFlagsWait).
|
||||||
|
#define osFlagsWaitAny 0x00000000U ///< Wait for any flag (default).
|
||||||
|
#define osFlagsWaitAll 0x00000001U ///< Wait for all flags.
|
||||||
|
#define osFlagsNoClear 0x00000002U ///< Do not clear flags which have been specified to wait for.
|
||||||
|
|
||||||
|
// Flags errors (returned by osThreadFlagsXxxx and osEventFlagsXxxx).
|
||||||
|
#define osFlagsError 0x80000000U ///< Error indicator.
|
||||||
|
#define osFlagsErrorUnknown 0xFFFFFFFFU ///< osError (-1).
|
||||||
|
#define osFlagsErrorTimeout 0xFFFFFFFEU ///< osErrorTimeout (-2).
|
||||||
|
#define osFlagsErrorResource 0xFFFFFFFDU ///< osErrorResource (-3).
|
||||||
|
#define osFlagsErrorParameter 0xFFFFFFFCU ///< osErrorParameter (-4).
|
||||||
|
#define osFlagsErrorISR 0xFFFFFFFAU ///< osErrorISR (-6).
|
||||||
|
|
||||||
|
// Thread attributes (attr_bits in \ref osThreadAttr_t).
|
||||||
|
#define osThreadDetached 0x00000000U ///< Thread created in detached mode (default)
|
||||||
|
#define osThreadJoinable 0x00000001U ///< Thread created in joinable mode
|
||||||
|
|
||||||
|
// Mutex attributes (attr_bits in \ref osMutexAttr_t).
|
||||||
|
#define osMutexRecursive 0x00000001U ///< Recursive mutex.
|
||||||
|
#define osMutexPrioInherit 0x00000002U ///< Priority inherit protocol.
|
||||||
|
#define osMutexRobust 0x00000008U ///< Robust mutex.
|
||||||
|
|
||||||
|
/// Status code values returned by CMSIS-RTOS functions.
|
||||||
|
typedef enum {
|
||||||
|
osOK = 0, ///< Operation completed successfully.
|
||||||
|
osError = -1, ///< Unspecified RTOS error: run-time error but no other error message fits.
|
||||||
|
osErrorTimeout = -2, ///< Operation not completed within the timeout period.
|
||||||
|
osErrorResource = -3, ///< Resource not available.
|
||||||
|
osErrorParameter = -4, ///< Parameter error.
|
||||||
|
osErrorNoMemory = -5, ///< System is out of memory: it was impossible to allocate or reserve memory for the operation.
|
||||||
|
osErrorISR = -6, ///< Not allowed in ISR context: the function cannot be called from interrupt service routines.
|
||||||
|
osStatusReserved = 0x7FFFFFFF ///< Prevents enum down-size compiler optimization.
|
||||||
|
} osStatus_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// \details Thread ID identifies the thread.
|
||||||
|
typedef void *osThreadId_t;
|
||||||
|
|
||||||
|
/// \details Timer ID identifies the timer.
|
||||||
|
typedef void *osTimerId_t;
|
||||||
|
|
||||||
|
/// \details Event Flags ID identifies the event flags.
|
||||||
|
typedef void *osEventFlagsId_t;
|
||||||
|
|
||||||
|
/// \details Mutex ID identifies the mutex.
|
||||||
|
typedef void *osMutexId_t;
|
||||||
|
|
||||||
|
/// \details Semaphore ID identifies the semaphore.
|
||||||
|
typedef void *osSemaphoreId_t;
|
||||||
|
|
||||||
|
/// \details Memory Pool ID identifies the memory pool.
|
||||||
|
typedef void *osMemoryPoolId_t;
|
||||||
|
|
||||||
|
/// \details Message Queue ID identifies the message queue.
|
||||||
|
typedef void *osMessageQueueId_t;
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef TZ_MODULEID_T
|
||||||
|
#define TZ_MODULEID_T
|
||||||
|
/// \details Data type that identifies secure software modules called by a process.
|
||||||
|
typedef uint32_t TZ_ModuleId_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/// Attributes structure for thread.
|
||||||
|
typedef struct {
|
||||||
|
const char *name; ///< name of the thread
|
||||||
|
uint32_t attr_bits; ///< attribute bits
|
||||||
|
void *cb_mem; ///< memory for control block
|
||||||
|
uint32_t cb_size; ///< size of provided memory for control block
|
||||||
|
void *stack_mem; ///< memory for stack
|
||||||
|
uint32_t stack_size; ///< size of stack
|
||||||
|
osPriority_t priority; ///< initial thread priority (default: osPriorityNormal)
|
||||||
|
TZ_ModuleId_t tz_module; ///< TrustZone module identifier
|
||||||
|
uint32_t reserved; ///< reserved (must be 0)
|
||||||
|
} osThreadAttr_t;
|
||||||
|
|
||||||
|
/// Attributes structure for timer.
|
||||||
|
typedef struct {
|
||||||
|
const char *name; ///< name of the timer
|
||||||
|
uint32_t attr_bits; ///< attribute bits
|
||||||
|
void *cb_mem; ///< memory for control block
|
||||||
|
uint32_t cb_size; ///< size of provided memory for control block
|
||||||
|
} osTimerAttr_t;
|
||||||
|
|
||||||
|
/// Attributes structure for event flags.
|
||||||
|
typedef struct {
|
||||||
|
const char *name; ///< name of the event flags
|
||||||
|
uint32_t attr_bits; ///< attribute bits
|
||||||
|
void *cb_mem; ///< memory for control block
|
||||||
|
uint32_t cb_size; ///< size of provided memory for control block
|
||||||
|
} osEventFlagsAttr_t;
|
||||||
|
|
||||||
|
/// Attributes structure for mutex.
|
||||||
|
typedef struct {
|
||||||
|
const char *name; ///< name of the mutex
|
||||||
|
uint32_t attr_bits; ///< attribute bits
|
||||||
|
void *cb_mem; ///< memory for control block
|
||||||
|
uint32_t cb_size; ///< size of provided memory for control block
|
||||||
|
} osMutexAttr_t;
|
||||||
|
|
||||||
|
/// Attributes structure for semaphore.
|
||||||
|
typedef struct {
|
||||||
|
const char *name; ///< name of the semaphore
|
||||||
|
uint32_t attr_bits; ///< attribute bits
|
||||||
|
void *cb_mem; ///< memory for control block
|
||||||
|
uint32_t cb_size; ///< size of provided memory for control block
|
||||||
|
} osSemaphoreAttr_t;
|
||||||
|
|
||||||
|
/// Attributes structure for memory pool.
|
||||||
|
typedef struct {
|
||||||
|
const char *name; ///< name of the memory pool
|
||||||
|
uint32_t attr_bits; ///< attribute bits
|
||||||
|
void *cb_mem; ///< memory for control block
|
||||||
|
uint32_t cb_size; ///< size of provided memory for control block
|
||||||
|
void *mp_mem; ///< memory for data storage
|
||||||
|
uint32_t mp_size; ///< size of provided memory for data storage
|
||||||
|
} osMemoryPoolAttr_t;
|
||||||
|
|
||||||
|
/// Attributes structure for message queue.
|
||||||
|
typedef struct {
|
||||||
|
const char *name; ///< name of the message queue
|
||||||
|
uint32_t attr_bits; ///< attribute bits
|
||||||
|
void *cb_mem; ///< memory for control block
|
||||||
|
uint32_t cb_size; ///< size of provided memory for control block
|
||||||
|
void *mq_mem; ///< memory for data storage
|
||||||
|
uint32_t mq_size; ///< size of provided memory for data storage
|
||||||
|
} osMessageQueueAttr_t;
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Kernel Management Functions ====
|
||||||
|
|
||||||
|
/// Initialize the RTOS Kernel.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osKernelInitialize (void);
|
||||||
|
|
||||||
|
/// Get RTOS Kernel Information.
|
||||||
|
/// \param[out] version pointer to buffer for retrieving version information.
|
||||||
|
/// \param[out] id_buf pointer to buffer for retrieving kernel identification string.
|
||||||
|
/// \param[in] id_size size of buffer for kernel identification string.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osKernelGetInfo (osVersion_t *version, char *id_buf, uint32_t id_size);
|
||||||
|
|
||||||
|
/// Get the current RTOS Kernel state.
|
||||||
|
/// \return current RTOS Kernel state.
|
||||||
|
osKernelState_t osKernelGetState (void);
|
||||||
|
|
||||||
|
/// Start the RTOS Kernel scheduler.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osKernelStart (void);
|
||||||
|
|
||||||
|
/// Lock the RTOS Kernel scheduler.
|
||||||
|
/// \return previous lock state (1 - locked, 0 - not locked, error code if negative).
|
||||||
|
int32_t osKernelLock (void);
|
||||||
|
|
||||||
|
/// Unlock the RTOS Kernel scheduler.
|
||||||
|
/// \return previous lock state (1 - locked, 0 - not locked, error code if negative).
|
||||||
|
int32_t osKernelUnlock (void);
|
||||||
|
|
||||||
|
/// Restore the RTOS Kernel scheduler lock state.
|
||||||
|
/// \param[in] lock lock state obtained by \ref osKernelLock or \ref osKernelUnlock.
|
||||||
|
/// \return new lock state (1 - locked, 0 - not locked, error code if negative).
|
||||||
|
int32_t osKernelRestoreLock (int32_t lock);
|
||||||
|
|
||||||
|
/// Suspend the RTOS Kernel scheduler.
|
||||||
|
/// \return time in ticks, for how long the system can sleep or power-down.
|
||||||
|
uint32_t osKernelSuspend (void);
|
||||||
|
|
||||||
|
/// Resume the RTOS Kernel scheduler.
|
||||||
|
/// \param[in] sleep_ticks time in ticks for how long the system was in sleep or power-down mode.
|
||||||
|
void osKernelResume (uint32_t sleep_ticks);
|
||||||
|
|
||||||
|
/// Get the RTOS kernel tick count.
|
||||||
|
/// \return RTOS kernel current tick count.
|
||||||
|
uint32_t osKernelGetTickCount (void);
|
||||||
|
|
||||||
|
/// Get the RTOS kernel tick frequency.
|
||||||
|
/// \return frequency of the kernel tick in hertz, i.e. kernel ticks per second.
|
||||||
|
uint32_t osKernelGetTickFreq (void);
|
||||||
|
|
||||||
|
/// Get the RTOS kernel system timer count.
|
||||||
|
/// \return RTOS kernel current system timer count as 32-bit value.
|
||||||
|
uint32_t osKernelGetSysTimerCount (void);
|
||||||
|
|
||||||
|
/// Get the RTOS kernel system timer frequency.
|
||||||
|
/// \return frequency of the system timer in hertz, i.e. timer ticks per second.
|
||||||
|
uint32_t osKernelGetSysTimerFreq (void);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Thread Management Functions ====
|
||||||
|
|
||||||
|
/// Create a thread and add it to Active Threads.
|
||||||
|
/// \param[in] func thread function.
|
||||||
|
/// \param[in] argument pointer that is passed to the thread function as start argument.
|
||||||
|
/// \param[in] attr thread attributes; NULL: default values.
|
||||||
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
|
osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr);
|
||||||
|
|
||||||
|
/// Get name of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return name as NULL terminated string.
|
||||||
|
const char *osThreadGetName (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Return the thread ID of the current running thread.
|
||||||
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
|
osThreadId_t osThreadGetId (void);
|
||||||
|
|
||||||
|
/// Get current thread state of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return current thread state of the specified thread.
|
||||||
|
osThreadState_t osThreadGetState (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Get stack size of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return stack size in bytes.
|
||||||
|
uint32_t osThreadGetStackSize (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Get available stack space of a thread based on stack watermark recording during execution.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return remaining stack space in bytes.
|
||||||
|
uint32_t osThreadGetStackSpace (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Change priority of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \param[in] priority new priority value for the thread function.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osThreadSetPriority (osThreadId_t thread_id, osPriority_t priority);
|
||||||
|
|
||||||
|
/// Get current priority of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return current priority value of the specified thread.
|
||||||
|
osPriority_t osThreadGetPriority (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Pass control to next thread that is in state \b READY.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osThreadYield (void);
|
||||||
|
|
||||||
|
/// Suspend execution of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osThreadSuspend (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Resume execution of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osThreadResume (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Detach a thread (thread storage can be reclaimed when thread terminates).
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osThreadDetach (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Wait for specified thread to terminate.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osThreadJoin (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Terminate execution of current running thread.
|
||||||
|
__NO_RETURN void osThreadExit (void);
|
||||||
|
|
||||||
|
/// Terminate execution of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osThreadTerminate (osThreadId_t thread_id);
|
||||||
|
|
||||||
|
/// Get number of active threads.
|
||||||
|
/// \return number of active threads.
|
||||||
|
uint32_t osThreadGetCount (void);
|
||||||
|
|
||||||
|
/// Enumerate active threads.
|
||||||
|
/// \param[out] thread_array pointer to array for retrieving thread IDs.
|
||||||
|
/// \param[in] array_items maximum number of items in array for retrieving thread IDs.
|
||||||
|
/// \return number of enumerated threads.
|
||||||
|
uint32_t osThreadEnumerate (osThreadId_t *thread_array, uint32_t array_items);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Thread Flags Functions ====
|
||||||
|
|
||||||
|
/// Set the specified Thread Flags of a thread.
|
||||||
|
/// \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId.
|
||||||
|
/// \param[in] flags specifies the flags of the thread that shall be set.
|
||||||
|
/// \return thread flags after setting or error code if highest bit set.
|
||||||
|
uint32_t osThreadFlagsSet (osThreadId_t thread_id, uint32_t flags);
|
||||||
|
|
||||||
|
/// Clear the specified Thread Flags of current running thread.
|
||||||
|
/// \param[in] flags specifies the flags of the thread that shall be cleared.
|
||||||
|
/// \return thread flags before clearing or error code if highest bit set.
|
||||||
|
uint32_t osThreadFlagsClear (uint32_t flags);
|
||||||
|
|
||||||
|
/// Get the current Thread Flags of current running thread.
|
||||||
|
/// \return current thread flags.
|
||||||
|
uint32_t osThreadFlagsGet (void);
|
||||||
|
|
||||||
|
/// Wait for one or more Thread Flags of the current running thread to become signaled.
|
||||||
|
/// \param[in] flags specifies the flags to wait for.
|
||||||
|
/// \param[in] options specifies flags options (osFlagsXxxx).
|
||||||
|
/// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return thread flags before clearing or error code if highest bit set.
|
||||||
|
uint32_t osThreadFlagsWait (uint32_t flags, uint32_t options, uint32_t timeout);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Generic Wait Functions ====
|
||||||
|
|
||||||
|
/// Wait for Timeout (Time Delay).
|
||||||
|
/// \param[in] ticks \ref CMSIS_RTOS_TimeOutValue "time ticks" value
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osDelay (uint32_t ticks);
|
||||||
|
|
||||||
|
/// Wait until specified time.
|
||||||
|
/// \param[in] ticks absolute time in ticks
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osDelayUntil (uint32_t ticks);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Timer Management Functions ====
|
||||||
|
|
||||||
|
/// Create and Initialize a timer.
|
||||||
|
/// \param[in] func function pointer to callback function.
|
||||||
|
/// \param[in] type \ref osTimerOnce for one-shot or \ref osTimerPeriodic for periodic behavior.
|
||||||
|
/// \param[in] argument argument to the timer callback function.
|
||||||
|
/// \param[in] attr timer attributes; NULL: default values.
|
||||||
|
/// \return timer ID for reference by other functions or NULL in case of error.
|
||||||
|
osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr);
|
||||||
|
|
||||||
|
/// Get name of a timer.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerNew.
|
||||||
|
/// \return name as NULL terminated string.
|
||||||
|
const char *osTimerGetName (osTimerId_t timer_id);
|
||||||
|
|
||||||
|
/// Start or restart a timer.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerNew.
|
||||||
|
/// \param[in] ticks \ref CMSIS_RTOS_TimeOutValue "time ticks" value of the timer.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks);
|
||||||
|
|
||||||
|
/// Stop a timer.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osTimerStop (osTimerId_t timer_id);
|
||||||
|
|
||||||
|
/// Check if a timer is running.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerNew.
|
||||||
|
/// \return 0 not running, 1 running.
|
||||||
|
uint32_t osTimerIsRunning (osTimerId_t timer_id);
|
||||||
|
|
||||||
|
/// Delete a timer.
|
||||||
|
/// \param[in] timer_id timer ID obtained by \ref osTimerNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osTimerDelete (osTimerId_t timer_id);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Event Flags Management Functions ====
|
||||||
|
|
||||||
|
/// Create and Initialize an Event Flags object.
|
||||||
|
/// \param[in] attr event flags attributes; NULL: default values.
|
||||||
|
/// \return event flags ID for reference by other functions or NULL in case of error.
|
||||||
|
osEventFlagsId_t osEventFlagsNew (const osEventFlagsAttr_t *attr);
|
||||||
|
|
||||||
|
/// Get name of an Event Flags object.
|
||||||
|
/// \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew.
|
||||||
|
/// \return name as NULL terminated string.
|
||||||
|
const char *osEventFlagsGetName (osEventFlagsId_t ef_id);
|
||||||
|
|
||||||
|
/// Set the specified Event Flags.
|
||||||
|
/// \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew.
|
||||||
|
/// \param[in] flags specifies the flags that shall be set.
|
||||||
|
/// \return event flags after setting or error code if highest bit set.
|
||||||
|
uint32_t osEventFlagsSet (osEventFlagsId_t ef_id, uint32_t flags);
|
||||||
|
|
||||||
|
/// Clear the specified Event Flags.
|
||||||
|
/// \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew.
|
||||||
|
/// \param[in] flags specifies the flags that shall be cleared.
|
||||||
|
/// \return event flags before clearing or error code if highest bit set.
|
||||||
|
uint32_t osEventFlagsClear (osEventFlagsId_t ef_id, uint32_t flags);
|
||||||
|
|
||||||
|
/// Get the current Event Flags.
|
||||||
|
/// \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew.
|
||||||
|
/// \return current event flags.
|
||||||
|
uint32_t osEventFlagsGet (osEventFlagsId_t ef_id);
|
||||||
|
|
||||||
|
/// Wait for one or more Event Flags to become signaled.
|
||||||
|
/// \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew.
|
||||||
|
/// \param[in] flags specifies the flags to wait for.
|
||||||
|
/// \param[in] options specifies flags options (osFlagsXxxx).
|
||||||
|
/// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return event flags before clearing or error code if highest bit set.
|
||||||
|
uint32_t osEventFlagsWait (osEventFlagsId_t ef_id, uint32_t flags, uint32_t options, uint32_t timeout);
|
||||||
|
|
||||||
|
/// Delete an Event Flags object.
|
||||||
|
/// \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osEventFlagsDelete (osEventFlagsId_t ef_id);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Mutex Management Functions ====
|
||||||
|
|
||||||
|
/// Create and Initialize a Mutex object.
|
||||||
|
/// \param[in] attr mutex attributes; NULL: default values.
|
||||||
|
/// \return mutex ID for reference by other functions or NULL in case of error.
|
||||||
|
osMutexId_t osMutexNew (const osMutexAttr_t *attr);
|
||||||
|
|
||||||
|
/// Get name of a Mutex object.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexNew.
|
||||||
|
/// \return name as NULL terminated string.
|
||||||
|
const char *osMutexGetName (osMutexId_t mutex_id);
|
||||||
|
|
||||||
|
/// Acquire a Mutex or timeout if it is locked.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexNew.
|
||||||
|
/// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout);
|
||||||
|
|
||||||
|
/// Release a Mutex that was acquired by \ref osMutexAcquire.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMutexRelease (osMutexId_t mutex_id);
|
||||||
|
|
||||||
|
/// Get Thread which owns a Mutex object.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexNew.
|
||||||
|
/// \return thread ID of owner thread or NULL when mutex was not acquired.
|
||||||
|
osThreadId_t osMutexGetOwner (osMutexId_t mutex_id);
|
||||||
|
|
||||||
|
/// Delete a Mutex object.
|
||||||
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMutexDelete (osMutexId_t mutex_id);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Semaphore Management Functions ====
|
||||||
|
|
||||||
|
/// Create and Initialize a Semaphore object.
|
||||||
|
/// \param[in] max_count maximum number of available tokens.
|
||||||
|
/// \param[in] initial_count initial number of available tokens.
|
||||||
|
/// \param[in] attr semaphore attributes; NULL: default values.
|
||||||
|
/// \return semaphore ID for reference by other functions or NULL in case of error.
|
||||||
|
osSemaphoreId_t osSemaphoreNew (uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr);
|
||||||
|
|
||||||
|
/// Get name of a Semaphore object.
|
||||||
|
/// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew.
|
||||||
|
/// \return name as NULL terminated string.
|
||||||
|
const char *osSemaphoreGetName (osSemaphoreId_t semaphore_id);
|
||||||
|
|
||||||
|
/// Acquire a Semaphore token or timeout if no tokens are available.
|
||||||
|
/// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew.
|
||||||
|
/// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t timeout);
|
||||||
|
|
||||||
|
/// Release a Semaphore token up to the initial maximum count.
|
||||||
|
/// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osSemaphoreRelease (osSemaphoreId_t semaphore_id);
|
||||||
|
|
||||||
|
/// Get current Semaphore token count.
|
||||||
|
/// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew.
|
||||||
|
/// \return number of tokens available.
|
||||||
|
uint32_t osSemaphoreGetCount (osSemaphoreId_t semaphore_id);
|
||||||
|
|
||||||
|
/// Delete a Semaphore object.
|
||||||
|
/// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osSemaphoreDelete (osSemaphoreId_t semaphore_id);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Memory Pool Management Functions ====
|
||||||
|
|
||||||
|
/// Create and Initialize a Memory Pool object.
|
||||||
|
/// \param[in] block_count maximum number of memory blocks in memory pool.
|
||||||
|
/// \param[in] block_size memory block size in bytes.
|
||||||
|
/// \param[in] attr memory pool attributes; NULL: default values.
|
||||||
|
/// \return memory pool ID for reference by other functions or NULL in case of error.
|
||||||
|
osMemoryPoolId_t osMemoryPoolNew (uint32_t block_count, uint32_t block_size, const osMemoryPoolAttr_t *attr);
|
||||||
|
|
||||||
|
/// Get name of a Memory Pool object.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \return name as NULL terminated string.
|
||||||
|
const char *osMemoryPoolGetName (osMemoryPoolId_t mp_id);
|
||||||
|
|
||||||
|
/// Allocate a memory block from a Memory Pool.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return address of the allocated memory block or NULL in case of no memory is available.
|
||||||
|
void *osMemoryPoolAlloc (osMemoryPoolId_t mp_id, uint32_t timeout);
|
||||||
|
|
||||||
|
/// Return an allocated memory block back to a Memory Pool.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \param[in] block address of the allocated memory block to be returned to the memory pool.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMemoryPoolFree (osMemoryPoolId_t mp_id, void *block);
|
||||||
|
|
||||||
|
/// Get maximum number of memory blocks in a Memory Pool.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \return maximum number of memory blocks.
|
||||||
|
uint32_t osMemoryPoolGetCapacity (osMemoryPoolId_t mp_id);
|
||||||
|
|
||||||
|
/// Get memory block size in a Memory Pool.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \return memory block size in bytes.
|
||||||
|
uint32_t osMemoryPoolGetBlockSize (osMemoryPoolId_t mp_id);
|
||||||
|
|
||||||
|
/// Get number of memory blocks used in a Memory Pool.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \return number of memory blocks used.
|
||||||
|
uint32_t osMemoryPoolGetCount (osMemoryPoolId_t mp_id);
|
||||||
|
|
||||||
|
/// Get number of memory blocks available in a Memory Pool.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \return number of memory blocks available.
|
||||||
|
uint32_t osMemoryPoolGetSpace (osMemoryPoolId_t mp_id);
|
||||||
|
|
||||||
|
/// Delete a Memory Pool object.
|
||||||
|
/// \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMemoryPoolDelete (osMemoryPoolId_t mp_id);
|
||||||
|
|
||||||
|
|
||||||
|
// ==== Message Queue Management Functions ====
|
||||||
|
|
||||||
|
/// Create and Initialize a Message Queue object.
|
||||||
|
/// \param[in] msg_count maximum number of messages in queue.
|
||||||
|
/// \param[in] msg_size maximum message size in bytes.
|
||||||
|
/// \param[in] attr message queue attributes; NULL: default values.
|
||||||
|
/// \return message queue ID for reference by other functions or NULL in case of error.
|
||||||
|
osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr);
|
||||||
|
|
||||||
|
/// Get name of a Message Queue object.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \return name as NULL terminated string.
|
||||||
|
const char *osMessageQueueGetName (osMessageQueueId_t mq_id);
|
||||||
|
|
||||||
|
/// Put a Message into a Queue or timeout if Queue is full.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \param[in] msg_ptr pointer to buffer with message to put into a queue.
|
||||||
|
/// \param[in] msg_prio message priority.
|
||||||
|
/// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout);
|
||||||
|
|
||||||
|
/// Get a Message from a Queue or timeout if Queue is empty.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \param[out] msg_ptr pointer to buffer for message to get from a queue.
|
||||||
|
/// \param[out] msg_prio pointer to buffer for message priority or NULL.
|
||||||
|
/// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout);
|
||||||
|
|
||||||
|
/// Get maximum number of messages in a Message Queue.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \return maximum number of messages.
|
||||||
|
uint32_t osMessageQueueGetCapacity (osMessageQueueId_t mq_id);
|
||||||
|
|
||||||
|
/// Get maximum message size in a Memory Pool.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \return maximum message size in bytes.
|
||||||
|
uint32_t osMessageQueueGetMsgSize (osMessageQueueId_t mq_id);
|
||||||
|
|
||||||
|
/// Get number of queued messages in a Message Queue.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \return number of queued messages.
|
||||||
|
uint32_t osMessageQueueGetCount (osMessageQueueId_t mq_id);
|
||||||
|
|
||||||
|
/// Get number of available slots for messages in a Message Queue.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \return number of available slots for messages.
|
||||||
|
uint32_t osMessageQueueGetSpace (osMessageQueueId_t mq_id);
|
||||||
|
|
||||||
|
/// Reset a Message Queue to initial empty state.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMessageQueueReset (osMessageQueueId_t mq_id);
|
||||||
|
|
||||||
|
/// Delete a Message Queue object.
|
||||||
|
/// \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew.
|
||||||
|
/// \return status code that indicates the execution status of the function.
|
||||||
|
osStatus_t osMessageQueueDelete (osMessageQueueId_t mq_id);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // CMSIS_OS2_H_
|
|
@ -1,6 +1,6 @@
|
||||||
#MicroXplorer Configuration settings - do not modify
|
#MicroXplorer Configuration settings - do not modify
|
||||||
FREERTOS.IPParameters=Tasks01
|
FREERTOS.IPParameters=Tasks01
|
||||||
FREERTOS.Tasks01=defaultTask,0,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL
|
FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL
|
||||||
File.Version=6
|
File.Version=6
|
||||||
GPIO.groupedBy=Group By Peripherals
|
GPIO.groupedBy=Group By Peripherals
|
||||||
KeepUserPlacement=false
|
KeepUserPlacement=false
|
||||||
|
@ -11,10 +11,11 @@ Mcu.IP2=IWDG
|
||||||
Mcu.IP3=NVIC
|
Mcu.IP3=NVIC
|
||||||
Mcu.IP4=RCC
|
Mcu.IP4=RCC
|
||||||
Mcu.IP5=SYS
|
Mcu.IP5=SYS
|
||||||
Mcu.IP6=USB_DEVICE
|
Mcu.IP6=UART4
|
||||||
Mcu.IP7=USB_OTG_FS
|
Mcu.IP7=USB_DEVICE
|
||||||
Mcu.IP8=WWDG
|
Mcu.IP8=USB_OTG_FS
|
||||||
Mcu.IPNb=9
|
Mcu.IP9=WWDG
|
||||||
|
Mcu.IPNb=10
|
||||||
Mcu.Name=STM32F107V(B-C)Tx
|
Mcu.Name=STM32F107V(B-C)Tx
|
||||||
Mcu.Package=LQFP100
|
Mcu.Package=LQFP100
|
||||||
Mcu.Pin0=PE2
|
Mcu.Pin0=PE2
|
||||||
|
@ -23,36 +24,39 @@ Mcu.Pin10=PA11
|
||||||
Mcu.Pin11=PA12
|
Mcu.Pin11=PA12
|
||||||
Mcu.Pin12=PA13
|
Mcu.Pin12=PA13
|
||||||
Mcu.Pin13=PA14
|
Mcu.Pin13=PA14
|
||||||
Mcu.Pin14=PD2
|
Mcu.Pin14=PC10
|
||||||
Mcu.Pin15=PD3
|
Mcu.Pin15=PC11
|
||||||
Mcu.Pin16=PD4
|
Mcu.Pin16=PD2
|
||||||
Mcu.Pin17=PD5
|
Mcu.Pin17=PD3
|
||||||
Mcu.Pin18=PD6
|
Mcu.Pin18=PD4
|
||||||
Mcu.Pin19=PD7
|
Mcu.Pin19=PD5
|
||||||
Mcu.Pin2=OSC_IN
|
Mcu.Pin2=OSC_IN
|
||||||
Mcu.Pin20=PB7
|
Mcu.Pin20=PD6
|
||||||
Mcu.Pin21=PB8
|
Mcu.Pin21=PD7
|
||||||
Mcu.Pin22=PB9
|
Mcu.Pin22=PB6
|
||||||
Mcu.Pin23=PE0
|
Mcu.Pin23=PB7
|
||||||
Mcu.Pin24=PE1
|
Mcu.Pin24=PB8
|
||||||
Mcu.Pin25=VP_FREERTOS_VS_CMSIS_V1
|
Mcu.Pin25=PB9
|
||||||
Mcu.Pin26=VP_IWDG_VS_IWDG
|
Mcu.Pin26=PE0
|
||||||
Mcu.Pin27=VP_SYS_VS_tim7
|
Mcu.Pin27=PE1
|
||||||
Mcu.Pin28=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
Mcu.Pin28=VP_FREERTOS_VS_CMSIS_V2
|
||||||
Mcu.Pin29=VP_WWDG_VS_WWDG
|
Mcu.Pin29=VP_IWDG_VS_IWDG
|
||||||
Mcu.Pin3=OSC_OUT
|
Mcu.Pin3=OSC_OUT
|
||||||
|
Mcu.Pin30=VP_SYS_VS_tim7
|
||||||
|
Mcu.Pin31=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||||
|
Mcu.Pin32=VP_WWDG_VS_WWDG
|
||||||
Mcu.Pin4=PA0-WKUP
|
Mcu.Pin4=PA0-WKUP
|
||||||
Mcu.Pin5=PE12
|
Mcu.Pin5=PE12
|
||||||
Mcu.Pin6=PE13
|
Mcu.Pin6=PE13
|
||||||
Mcu.Pin7=PE14
|
Mcu.Pin7=PE14
|
||||||
Mcu.Pin8=PE15
|
Mcu.Pin8=PE15
|
||||||
Mcu.Pin9=PA8
|
Mcu.Pin9=PA8
|
||||||
Mcu.PinsNb=30
|
Mcu.PinsNb=33
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F107VCTx
|
Mcu.UserName=STM32F107VCTx
|
||||||
MxCube.Version=5.5.0
|
MxCube.Version=5.6.0
|
||||||
MxDb.Version=DB.5.0.50
|
MxDb.Version=DB.5.0.60
|
||||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.FLASH_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
|
NVIC.FLASH_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
|
||||||
|
@ -82,14 +86,18 @@ PA0-WKUP.Mode=SYS_WakeUp0
|
||||||
PA0-WKUP.Signal=SYS_WKUP
|
PA0-WKUP.Signal=SYS_WKUP
|
||||||
PA11.GPIOParameters=GPIO_Label
|
PA11.GPIOParameters=GPIO_Label
|
||||||
PA11.GPIO_Label=USB2_DM_G7
|
PA11.GPIO_Label=USB2_DM_G7
|
||||||
|
PA11.Locked=true
|
||||||
PA11.Mode=Device_Only
|
PA11.Mode=Device_Only
|
||||||
PA11.Signal=USB_OTG_FS_DM
|
PA11.Signal=USB_OTG_FS_DM
|
||||||
PA12.GPIOParameters=GPIO_Label
|
PA12.GPIOParameters=GPIO_Label
|
||||||
PA12.GPIO_Label=USB2_DP_G7
|
PA12.GPIO_Label=USB2_DP_G7
|
||||||
|
PA12.Locked=true
|
||||||
PA12.Mode=Device_Only
|
PA12.Mode=Device_Only
|
||||||
PA12.Signal=USB_OTG_FS_DP
|
PA12.Signal=USB_OTG_FS_DP
|
||||||
|
PA13.Locked=true
|
||||||
PA13.Mode=Serial_Wire
|
PA13.Mode=Serial_Wire
|
||||||
PA13.Signal=SYS_JTMS-SWDIO
|
PA13.Signal=SYS_JTMS-SWDIO
|
||||||
|
PA14.Locked=true
|
||||||
PA14.Mode=Serial_Wire
|
PA14.Mode=Serial_Wire
|
||||||
PA14.Signal=SYS_JTCK-SWCLK
|
PA14.Signal=SYS_JTCK-SWCLK
|
||||||
PA8.GPIOParameters=PinState,GPIO_Label,GPIO_ModeDefaultOutputPP
|
PA8.GPIOParameters=PinState,GPIO_Label,GPIO_ModeDefaultOutputPP
|
||||||
|
@ -98,6 +106,10 @@ PA8.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
|
||||||
PA8.Locked=true
|
PA8.Locked=true
|
||||||
PA8.PinState=GPIO_PIN_SET
|
PA8.PinState=GPIO_PIN_SET
|
||||||
PA8.Signal=GPIO_Output
|
PA8.Signal=GPIO_Output
|
||||||
|
PB6.GPIOParameters=GPIO_Label
|
||||||
|
PB6.GPIO_Label=BUZZ_CTL
|
||||||
|
PB6.Locked=true
|
||||||
|
PB6.Signal=GPIO_Output
|
||||||
PB7.GPIOParameters=GPIO_Label
|
PB7.GPIOParameters=GPIO_Label
|
||||||
PB7.GPIO_Label=CHRG_STATUS
|
PB7.GPIO_Label=CHRG_STATUS
|
||||||
PB7.Locked=true
|
PB7.Locked=true
|
||||||
|
@ -112,14 +124,12 @@ PB9.GPIO_Label=COULOMB_SDA
|
||||||
PB9.Locked=true
|
PB9.Locked=true
|
||||||
PB9.Mode=I2C
|
PB9.Mode=I2C
|
||||||
PB9.Signal=I2C1_SDA
|
PB9.Signal=I2C1_SDA
|
||||||
PCC.Checker=false
|
PC10.Locked=true
|
||||||
PCC.Line=STM32F105/107
|
PC10.Mode=Asynchronous
|
||||||
PCC.MCU=STM32F107V(B-C)Tx
|
PC10.Signal=UART4_TX
|
||||||
PCC.PartNumber=STM32F107VCTx
|
PC11.Locked=true
|
||||||
PCC.Seq0=0
|
PC11.Mode=Asynchronous
|
||||||
PCC.Series=STM32F1
|
PC11.Signal=UART4_RX
|
||||||
PCC.Temperature=25
|
|
||||||
PCC.Vdd=3.3
|
|
||||||
PD2.GPIOParameters=GPIO_Label
|
PD2.GPIOParameters=GPIO_Label
|
||||||
PD2.GPIO_Label=USB2_VBUS_CTL_1
|
PD2.GPIO_Label=USB2_VBUS_CTL_1
|
||||||
PD2.Locked=true
|
PD2.Locked=true
|
||||||
|
@ -203,7 +213,7 @@ ProjectManager.StackSize=0x400
|
||||||
ProjectManager.TargetToolchain=STM32CubeIDE
|
ProjectManager.TargetToolchain=STM32CubeIDE
|
||||||
ProjectManager.ToolChainLocation=
|
ProjectManager.ToolChainLocation=
|
||||||
ProjectManager.UnderRoot=true
|
ProjectManager.UnderRoot=true
|
||||||
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_IWDG_Init-IWDG-false-HAL-true,6-MX_WWDG_Init-WWDG-false-HAL-true
|
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-true,3-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_IWDG_Init-IWDG-false-HAL-true,6-MX_WWDG_Init-WWDG-false-HAL-true,7-MX_UART4_Init-UART4-false-HAL-true
|
||||||
RCC.ADCFreqValue=36000000
|
RCC.ADCFreqValue=36000000
|
||||||
RCC.AHBFreq_Value=72000000
|
RCC.AHBFreq_Value=72000000
|
||||||
RCC.APB1CLKDivider=RCC_HCLK_DIV2
|
RCC.APB1CLKDivider=RCC_HCLK_DIV2
|
||||||
|
@ -232,14 +242,16 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||||
RCC.TimSysFreq_Value=72000000
|
RCC.TimSysFreq_Value=72000000
|
||||||
RCC.USBFreq_Value=48000000
|
RCC.USBFreq_Value=48000000
|
||||||
RCC.VCOOutput2Freq_Value=8000000
|
RCC.VCOOutput2Freq_Value=8000000
|
||||||
|
UART4.IPParameters=VirtualMode
|
||||||
|
UART4.VirtualMode=Asynchronous
|
||||||
USB_DEVICE.CLASS_NAME_FS=CDC
|
USB_DEVICE.CLASS_NAME_FS=CDC
|
||||||
USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS
|
USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS
|
||||||
USB_DEVICE.VirtualMode=Cdc
|
USB_DEVICE.VirtualMode=Cdc
|
||||||
USB_DEVICE.VirtualModeFS=Cdc_FS
|
USB_DEVICE.VirtualModeFS=Cdc_FS
|
||||||
USB_OTG_FS.IPParameters=VirtualMode
|
USB_OTG_FS.IPParameters=VirtualMode
|
||||||
USB_OTG_FS.VirtualMode=Device_Only
|
USB_OTG_FS.VirtualMode=Device_Only
|
||||||
VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1
|
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
|
||||||
VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1
|
VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
|
||||||
VP_IWDG_VS_IWDG.Mode=IWDG_Activate
|
VP_IWDG_VS_IWDG.Mode=IWDG_Activate
|
||||||
VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG
|
VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG
|
||||||
VP_SYS_VS_tim7.Mode=TIM7
|
VP_SYS_VS_tim7.Mode=TIM7
|
||||||
|
|
Loading…
Reference in New Issue