Skip to content

Commit

Permalink
Add usart thread
Browse files Browse the repository at this point in the history
  • Loading branch information
kaizoku-oh committed May 12, 2020
1 parent b22dd07 commit 381c6db
Show file tree
Hide file tree
Showing 5 changed files with 138 additions and 26 deletions.
24 changes: 24 additions & 0 deletions include/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,28 @@
#include "stm32f7xx_nucleo_144.h"
#include "cmsis_os.h"

/* Pins Config */
#define USARTx_TX_PIN GPIO_PIN_8
#define USARTx_RX_PIN GPIO_PIN_9

#define USARTx_TX_AF GPIO_AF7_USART3
#define USARTx_RX_AF GPIO_AF7_USART3

/* Ports Config */
#define USARTx_GPIO_PORT GPIOD

/* USART instance */
#define USARTx USART3

/* Clocks Config */
#define USARTx_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()
#define USARTx_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()

#define USARTx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define USARTx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()

/* USART Resets */
#define USARTx_FORCE_RESET() __HAL_RCC_USART3_FORCE_RESET()
#define USARTx_RELEASE_RESET() __HAL_RCC_USART3_RELEASE_RESET()

#endif /* MAIN_H */
11 changes: 11 additions & 0 deletions include/stm32f7xx_it.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#ifndef __STM32F7xx_IT_H
#define __STM32F7xx_IT_H

void USART3_IRQHandler(void);
void NMI_Handler(void);
void HardFault_Handler(void);
void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);

#endif /* __STM32F7xx_IT_H */
2 changes: 1 addition & 1 deletion platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ lib_deps = STM32FreeRTOS
; board_build.f_cpu = 216000000L

; change serial monitor baudrate
; monitor_speed = 115200
monitor_speed = 115200

; change upload protocol
; upload_protocol = stlink
90 changes: 65 additions & 25 deletions src/main.c
Original file line number Diff line number Diff line change
@@ -1,62 +1,102 @@
#include "main.h"

void thread_1_handler(void const * argument);
void thread_2_handler(void const * argument);
void thread_3_handler(void const * argument);
#define USART_BAUDRATE 115200

osThreadId stThread1Handle;
osThreadId stThread2Handle;
osThreadId stThread3Handle;
static void usart_init(void);
static void led_thread_handler(void const * argument);
static void usart_thread_handler(void const * argument);

volatile uint8_t u08RxByte;
UART_HandleTypeDef stUsartHandle;

osThreadId stLedThreadHandle;
osThreadId stUsartThreadHandle;

int main(void)
{
HAL_Init();

osThreadDef(thread1, thread_1_handler, osPriorityNormal, 0, 128);
osThreadDef(thread2, thread_2_handler, osPriorityNormal, 0, 128);
osThreadDef(thread3, thread_3_handler, osPriorityNormal, 0, 128);
osThreadDef(led, led_thread_handler, osPriorityNormal, 0, 128);
osThreadDef(usart, usart_thread_handler, osPriorityNormal, 0, 128);

stThread1Handle = osThreadCreate(osThread(thread1), NULL);
stThread2Handle = osThreadCreate(osThread(thread2), NULL);
stThread3Handle = osThreadCreate(osThread(thread3), NULL);
stLedThreadHandle = osThreadCreate(osThread(led), NULL);
stUsartThreadHandle = osThreadCreate(osThread(usart), NULL);

osKernelStart();

while (1) {}
while(1) {}
}

void thread_1_handler(void const * argument)
static void led_thread_handler(void const * argument)
{
const uint32_t u32BlinkDelayMs = 1000;

BSP_LED_Init(LED_GREEN);
BSP_LED_Init(LED_BLUE);
BSP_LED_Init(LED_RED);
for(;;)
{
BSP_LED_Toggle(LED_GREEN);
BSP_LED_Toggle(LED_BLUE);
BSP_LED_Toggle(LED_RED);
osDelay(u32BlinkDelayMs);
}
}

void thread_2_handler(void const * argument)
static void usart_thread_handler(void const * argument)
{
const uint32_t u32BlinkDelayMs = 500;
const uint32_t u32MsgDelayMs = 1000;

BSP_LED_Init(LED_BLUE);
usart_init();
HAL_UART_Receive_IT(&stUsartHandle, &u08RxByte, sizeof(u08RxByte));
for(;;)
{
BSP_LED_Toggle(LED_BLUE);
osDelay(u32BlinkDelayMs);
HAL_UART_Transmit_IT(&stUsartHandle, (uint8_t *)"Hello world\n", (sizeof("Hello world\n")-1));
osDelay(u32MsgDelayMs);
}
}

void thread_3_handler(void const * argument)
static void usart_init(void)
{
const uint32_t u32BlinkDelayMs = 250;
GPIO_InitTypeDef stUsartGpio = {0};

BSP_LED_Init(LED_RED);
for(;;)
/* Initialize usart clock */
USARTx_CLK_ENABLE();
USARTx_GPIO_CLK_ENABLE();

/* Initialize usart gpio */
stUsartGpio.Pin = USARTx_TX_PIN|USARTx_RX_PIN;
stUsartGpio.Mode = GPIO_MODE_AF_PP;
stUsartGpio.Pull = GPIO_NOPULL;
stUsartGpio.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
stUsartGpio.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(USARTx_GPIO_PORT, &stUsartGpio);

/* Initialize usart intrrupt */
HAL_NVIC_SetPriority(USART3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);

/* Initialize usart configs */
stUsartHandle.Instance = USART3;
stUsartHandle.Init.BaudRate = USART_BAUDRATE;
stUsartHandle.Init.WordLength = UART_WORDLENGTH_8B;
stUsartHandle.Init.StopBits = UART_STOPBITS_1;
stUsartHandle.Init.Parity = UART_PARITY_NONE;
stUsartHandle.Init.Mode = UART_MODE_TX_RX;
stUsartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
stUsartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
stUsartHandle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
stUsartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if(HAL_UART_Init(&stUsartHandle) != HAL_OK)
{
BSP_LED_Toggle(LED_RED);
osDelay(u32BlinkDelayMs);
while(1) {}
}
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *stHandle)
{
if(USART3 == stHandle->Instance)
{
HAL_UART_Receive_IT(&stUsartHandle, &u08RxByte, sizeof(u08RxByte));
}
}
37 changes: 37 additions & 0 deletions src/stm32f7xx_it.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include "stm32f7xx_it.h"
#include "main.h"

extern UART_HandleTypeDef stUsartHandle;

void USART3_IRQHandler(void)
{
HAL_UART_IRQHandler(&stUsartHandle);
}

void NMI_Handler(void)
{
}

void HardFault_Handler(void)
{
while (1)
{}
}

void MemManage_Handler(void)
{
while (1)
{}
}

void BusFault_Handler(void)
{
while (1)
{}
}

void UsageFault_Handler(void)
{
while (1)
{}
}

0 comments on commit 381c6db

Please sign in to comment.