Stm32vlDiscovery рдХреЗ рд▓рд┐рдП FreeRTOS рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рд╢реБрдн рджрд┐рдиред
Stm32 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд╕рдордЭрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЖрд░рдЯреАрдУрдПрд╕ - рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ (рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдХрдИ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред

рддреЛ, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рддрдп рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:
  • Stm32VLDiscovery рдбрд┐рдмрдЧ рдмреЛрд░реНрдб
  • рд╕реНрдерд╛рдкрд┐рдд IDE Keil ARM 5 рдФрд░ рдЙрдЪреНрдЪрддрд░
  • рдирдП рдХреЛ рдЫрд╛рдВрдЯрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛

рдпрджрд┐ рдЖрдкрдиреЗ Keil рдореЗрдВ STM32F1x рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ STM32F1x рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  1. рд╣рдордиреЗ рдХреЗрдЗрд▓ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред
  2. рдкреИрдирд▓ рдореЗрдВ рдкреИрдХ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  3. рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (рд╣рдо рдЕрджреНрдпрддрди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
  4. рдЯреНрд░реА рдореЗрдВ, STMicroelectronics-> STM32F1 Series-> STM32F100 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рддреИрдпрд╛рд░реА рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рд╣рдо FreeRTOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ www.freertos.org рд╕реЗ рдирд╡реАрдирддрдо RTOS рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реИ , рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг FreeRTOSv9.0.0 рдерд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╕рдВрдЧреНрд░рд╣ рдорд┐рд▓рд╛, рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдЕрдирдкреИрдХ рдХрд░реЗрдВ (рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА 99% рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдбрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ 200 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ)ред

рдЕрдм рд╣рдореЗрдВ рдХреЗрдЗрд▓ рдореЗрдВ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдореИрдВрдиреЗ рдЗрд╕реЗ FreeRTOSDemo рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ, рдЖрдк рдХрд┐рд╕реА рднреА рдЙрдкрдпреБрдХреНрдд рдирд╛рдо рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдорд╛рд░реНрдЧ рдореЗрдВ рдХреЛрдИ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рд░реВрд╕реА рдкрддреНрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреА рдЪрд┐рдк рдЪреБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдореИрдВрдиреЗ STM32F100RB рдЪрд┐рдк рдХреЗ рд╕рд╛рде STM32VLDiscovery рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЪреБрдирд╛ред





рдПрдХ рдЪрд┐рдк рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ CMSIS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ StdPeriph рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдЖрд░рдЯреАрдУрдПрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдбрд╛рдпреЛрдб рдХреЗ рд╕рд╛рде рдмреНрд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рдЪрдпрди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ (рдпрд╣ StdPeriph рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, CMSIS рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред







рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЕрдЧрд▓реА, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рдорд┐рд╢реНрдорд╢ рд╣реЛрдЧреАред



RTOS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ FreeRTOS рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБред
FreeRTOSv9.0.0 \ FreeRTOS \ Source \ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ, рд╕рднреА * .s рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдП рдЧрдП FreeRTOS рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рд╡рд╣рд╛рдВ рд╣рдо рд╢рд╛рдорд┐рд▓ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВред
FreeRTOSv9.0.0 \ FreeRTOS \ Source \ рдкреЛрд░реНрдЯреЗрдмрд▓ \ RVDS \ ARM_CM3 \ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ, * .s рдФрд░ * .h рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ FreeRTOS рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВред
FreeRTOSv9.0.0 \ FreeRTOS \ Source \ рдкреЛрд░реНрдЯреЗрдмрд▓ \ MemMang \ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ, heap_2 рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред
рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ FreeRTOSv9.0.0 \ FreeRTOS \ Demo \ CORTEX_STM32F103_Keil рдлрд╝рд╛рдЗрд▓ FreeRTOSConfig.h рдХреЙрдкреА рдХрд░реЗрдВред
рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:





рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдореБрдЦреНрдп рдкрд╛рда рдХреЗ рд╕рд╛рде main.cc рдлрд╝рд╛рдЗрд▓ рднреА рдмрдирд╛рдПрдВред
рдирддреАрдЬрддрди, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ * .h рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ USE_STDPERIPH_DRIVER рдХреЛ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдЕрдм рдпрд╣ рд╕рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП FreeRTOSConfig.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
#define configCPU_CLOCK_HZ			( ( unsigned long ) 72000000 )	/**/
#define configCPU_CLOCK_HZ			( ( unsigned long ) 24000000 )

#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 17 * 1024 ) )   /**/	
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 5 * 1024 ) )

рдФрд░ #define FREERTOS_CONFIG_H рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ
#define xPortSysTickHandler SysTick_Handler
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler

рдЙрд╕рдХреЗ рдмрд╛рдж, main.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рдПрд▓рдИрдбреА рдХреЛ рдЪрдордХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВред
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

GPIO_InitTypeDef port;
uint8_t state;

void vFreeRTOSInitAll()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_StructInit(&port);
    port.GPIO_Mode = GPIO_Mode_Out_PP;
    port.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8;
    port.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &port);
}

void vLedTask (void *pvParameters)
{
    while(1)
    {
	if (state == 0)
	{
      GPIO_SetBits(GPIOC,GPIO_Pin_9);
		GPIO_ResetBits(GPIOC,GPIO_Pin_8);
	    state = 1;
			vTaskDelay(500);
	}
	else
	{
	    GPIO_ResetBits(GPIOC,GPIO_Pin_9);
		GPIO_SetBits(GPIOC,GPIO_Pin_8);
	    state = 0;
			vTaskDelay(500);
	}
    }
    vTaskDelete(NULL);	
}

int main(void)
{
		vFreeRTOSInitAll();
    xTaskCreate(vLedTask,(signed char*)"LedTask", configMINIMAL_STACK_SIZE,
					NULL, tskIDLE_PRIORITY + 1, NULL);
    vTaskStartScheduler();
}


рдЕрдм рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж, рдирд┐рдорд┐рд╖ рдПрд▓ рдИ рдбреА рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi399907/


All Articles