2017-04-06 10 views
0

NucleoでVCPを介した二重通信を使用していたか、RX TX割り込みを伴うシングルUSARTディスカバリーを行ったことがありますか?Nucleo STM32f103RB/F4ディスカバリー

受け取ったものをエコーバック(送信)するサンプルコードがありがたいです。

答えて

1

STM32CubeF4STM32CubeF1パッケージの間に確かにいくつかの例があります。

またマイクロコントローラエコーはUART RX割り込みを使用して送信者に受信したバイトをバックアップする、この例を参照してください。

#include "stm32f4xx.h" 

UART_HandleTypeDef huart2; 

/* Single byte to store input */ 
uint8_t byte; 

void SystemClock_Config(void); 

/* UART2 Interrupt Service Routine */ 
void USART2_IRQHandler(void) 
{ 
    HAL_UART_IRQHandler(&huart2); 
} 

/* This callback is called by the HAL_UART_IRQHandler when the given number of bytes are received */ 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
{ 
    if (huart->Instance == USART2) 
    { 
    /* Transmit one byte with 100 ms timeout */ 
    HAL_UART_Transmit(&huart2, &byte, 1, 100); 

    /* Receive one byte in interrupt mode */ 
    HAL_UART_Receive_IT(&huart2, &byte, 1); 
    } 
} 

void uart_gpio_init() 
{ 
    GPIO_InitTypeDef GPIO_InitStruct; 

    __GPIOA_CLK_ENABLE(); 

    /**USART2 GPIO Configuration 
    PA2  ------> USART2_TX 
    PA3  ------> USART2_RX 
    */ 
    GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3; 
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 
    GPIO_InitStruct.Pull = GPIO_PULLUP; 
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW; 
    GPIO_InitStruct.Alternate = GPIO_AF7_USART2; 
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 
} 

void uart_init() 
{ 
    __USART2_CLK_ENABLE(); 

    huart2.Instance = USART2; 
    huart2.Init.BaudRate = 115200; 
    huart2.Init.WordLength = UART_WORDLENGTH_8B; 
    huart2.Init.StopBits = UART_STOPBITS_1; 
    huart2.Init.Parity = UART_PARITY_NONE; 
    huart2.Init.Mode = UART_MODE_TX_RX; 
    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; 
    huart2.Init.OverSampling = UART_OVERSAMPLING_16; 
    HAL_UART_Init(&huart2); 

    /* Peripheral interrupt init*/ 
    HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); 
    HAL_NVIC_EnableIRQ(USART2_IRQn); 
} 

int main(void) 
{ 
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 
    HAL_Init(); 

    uart_gpio_init(); 
    uart_init(); 

    HAL_UART_Receive_IT(&huart2, &byte, 1); 

    while(1) 
    { 

    } 
} 
  1. はUARTのGPIOピンを初期化します。

    a。適切なGPIOポートのクロックを有効にします。

    b。兼用機能モードでUARTピンを設定します。

  2. UARTペリフェラルを初期化します。

    a。適切なUARTペリフェラルのクロックをイネーブルにします。

    b。 BAUDレート、ワード長、ストップ・パリティ・ビット、フロー制御などを設定します。

    c。 NVICのUART IRQを有効にし、優先順位を設定します。

  3. UART ISR(USART2_IRQHandler)のHAL_UART_IRQHandler(UART_HandleTypeDef* huart);に電話してください。

  4. は、受信手順が完了したときにHAL_UART_RxCpltCallbackを呼び出します。このコールバックでは、受信したバイトを送信できます。

  5. HAL_UART_Receive_IT(&huart2, &byte, 1);コールでエコーループを開始します。

関連する問題