Menginstal FreeRTOS untuk Stm32vlDiscovery

Hari yang baik
Memahami pemrograman mikrokontroler Stm32, saya memutuskan untuk mencoba menginstal (sistem operasi real-time) RTOS - FreeRTOS dan mengalami sejumlah kesulitan. Ada banyak artikel di Internet, tetapi saya tidak menemukan instruksi yang jelas, jadi saya meminta semua orang tertarik pada kucing.

Jadi, sebagai permulaan, mari kita putuskan apa yang perlu Anda miliki:
  • Stm32VLDetiap Debug Papan
  • Menginstal IDE Keil ARM 5 dan lebih tinggi
  • Keinginan untuk memilah yang baru

Jika Anda telah mengembangkan apa pun untuk keluarga STM32F1x di Keil, Anda dapat melewati paragraf ini. Pertama, Anda perlu menginstal paket pengembangan untuk keluarga STM32F1x, ini dilakukan sebagai berikut:
  1. Kami meluncurkan Keil.
  2. Klik tombol Pack Installer di panel
  3. Di jendela yang terbuka, klik tombol Periksa Pembaruan (kami sedang menunggu daftar paket diperbarui)
  4. Di pohon, pilih STMicroelectronics-> STM32F1 Series-> STM32F100 dan instal semua paket

Ini melengkapi persiapan lingkungan pengembangan.
Kami melanjutkan langsung ke pembuatan proyek menggunakan FreeRTOS.
Hal pertama yang harus dilakukan adalah mengunduh distribusi RTOS terbaru dari situs resmi www.freertos.org , pada saat penulisan, versi terbaru adalah FreeRTOSv9.0.0. Jadi kami mendapat arsip yang mengesankan, buka kemasannya ke tempat mana pun (saya akan mengatakan segera bahwa kami tidak membutuhkan 99% dari itu, jadi jangan takut dengan ukuran folder yang dihasilkan, saya memiliki lebih dari 200 MB).

Sekarang kita perlu membuat proyek baru di Keil.



Saya menamakannya FreeRTOSDemo, Anda dapat memilih nama yang cocok, yang utama adalah bahwa tidak boleh ada spasi dan huruf Rusia di jalur proyek.
Sekarang kita perlu memilih chip kita, saya menguji pada papan debug STM32VLDiscovery dengan chip STM32F100RB, jadi saya memilihnya.





Setelah memilih sebuah chip, Anda perlu memilih perpustakaan yang akan kami gunakan. Kita akan membutuhkan perpustakaan CMSIS dan StdPeriph. Angka-angka di bawah ini menunjukkan pemilihan minimum komponen untuk memeriksa operasi RTOS dan untuk berkedip dengan dioda (ini berlaku untuk perpustakaan StdPeriph, diperlukan CMSIS).







Jadi kami membuat proyek, kelihatannya seperti ini:



Selanjutnya, untuk kenyamanan, kami membuat beberapa grup di proyek sehingga nantinya akan ada banyak kesalahan dalam file.



Semuanya siap untuk menyalin file RTOS ke proyek. Buat folder FreeRTOS di folder proyek.
Dari folder FreeRTOSv9.0.0 \ FreeRTOS \ Source \, salin semua file * .s ke folder FreeRTOS yang dibuat. Di sana kami menyalin folder include.
Dari folder FreeRTOSv9.0.0 \ FreeRTOS \ Source \ portable \ RVDS \ ARM_CM3 \, salin file * .s dan * .h ke tempat yang sesuai di folder FreeRTOS proyek kami.
Dari folder FreeRTOSv9.0.0 \ FreeRTOS \ Source \ portable \ MemMang \, salin file heap_2.c.
Dari folder FreeRTOSv9.0.0 \ FreeRTOS \ Demo \ CORTEX_STM32F103_Keil \ salin file FreeRTOSConfig.h.
Setelah semua manipulasi, berikut ini akan terjadi:





Selanjutnya, kita perlu menambahkan file ke grup yang sesuai dalam proyek, dan juga membuat file main.cc dengan teks utama program.
Akibatnya, struktur proyek berikut harus diperoleh.



Agar proyek dapat dikompilasi dalam pengaturannya, Anda harus menentukan semua jalur ke file * .h, serta mendaftarkan arahan USE_STDPERIPH_DRIVER.



Sekarang tetap mengubah beberapa baris dalam file FreeRTOSConfig.h, untuk operasi yang benar:
#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 ) )

Dan tambahkan baris berikut setelah #define FREERTOS_CONFIG_H
#define xPortSysTickHandler SysTick_Handler
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler

Setelah itu, dalam file main.c, kami menulis program paling sederhana untuk menginstalasi LED.
#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();
}


Sekarang Anda dapat merakit proyek dan mengisi firmware ke dalam mikrokontroler, setelah reboot, amati LED yang berkedip.

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


All Articles