Wednesday, January 31, 2024

Enabling RTOS in STM32F407VET6

In STM32CubeIDE we can enable RTOS using following steps:

Configuration

1. In Pinout & Configuration, go to Middleware and Software Packs > FREERTOS

2. Configure Interface Mode as CMSIS_V1 or CMSIS_V2

3. Start adding OS Tasks, change Task name and Entry function.

    Example: 


 Manual Code

1. In main.c file > main() function instead of writing in while 1 loop, we need to write actual code in    Tasks generated. While 1 loop will not be reached as osKernelStart(); will take over.

2. LED Blinking code can be executed from TASK which we added

Example code:

/* USER CODE BEGIN Header_Task2_init */

/**

* @brief Function implementing the Task2 thread.

* @param argument: Not used

* @retval None

*/

/* USER CODE END Header_Task2_init */

void Task2_init(void const * argument)

{

/* USER CODE BEGIN Task2_init */

/* Infinite loop */

for(;;)

{

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_6);

HAL_Delay(200);

    //osDelay(10);

}

/* USER CODE END Task2_init */

}

Random number generation in STM32F407VET6

 For RNG generation in STM32F407VET6 board follow below steps:

Configuration:

1. In Pinout and configuration, in security > RNG Mode & Configuration, Mode should be activated.

2. With change in point 1, tool will prompt to change clock configuration. Use automatic clock configuration fix given by tool to adjust the clock values.


Manual Code: 

In main.c file, we need to call function to get random number as shown below:

/* USER CODE BEGIN WHILE */


while (1)

{

HAL_RNG_GetRandomNumber(&hrng);

HAL_Delay(200);

/* USER CODE END WHILE */


/* USER CODE BEGIN 3 */

}


Variable hrng is already declared when code was generated. 


RNG result will be as shown in below image:




Saturday, January 27, 2024

Blinky Project for STM32F407VET6 Board - Manual Code

 After Configuration and Project Setup we need to add below code in order to blink the LED.

In main.c file, in main() function we need to add

/* USER CODE BEGIN WHILE */

while (1)

{

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_6);

HAL_Delay(200);

/* USER CODE END WHILE */


/* USER CODE BEGIN 3 */

}


 Where, 


    HAL_GPIO_TogglePin - Function to Toggle Pin/LED.

HAL_Delay - Delay function, here delay of 200msec is given.


Save, It will prompt for code generation, then Project>Build All. Debug(elf/hex) file will be generated.


For flashing/Debugging, 

1. Connect USB and ST Link V2 Debugger

2. Use option Run>Debug As>1 STM32 C/C++ Application for programming/debugging.


If ST Link connection is not done then following Error will be prompted:




Blinky Project for STM32F407VET6 Board - Configuration/Setup

 Follow below steps to create a basic LED blinking project for STM32F407VET6 board:

1. Create File>New>STM32 Project

2. Select Commercial Part number as STM32F407VET6, select 1st part number in search window.

3. In Next Tab provide project name (e.g. BlinkLED), keep other parameters as it is.

4. In Next Tab keep parameters as default, and Finish the setup. 


Pinout & Configuration:

1. System Core> SYS Select Debug option as Serial Wire

2. System Core> RCC Select High Speed Clock(HSE) & Low Speed Clock(LSE) as Crystal/Ceramic Resonator

3. In Pinout view, select PA6 as GPIO_Output

4. And in  System Core>GPIO Select GPIO output level as High

5. Go to Clock Configuration and make HCLK clock as 168Mhz (Highest clock supported by board).