2017-04-06 36 views
0

是否有人使用Nucleo上的VCP進行雙工通信,或是發現帶TX 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。配置波特率,字長,停止位和奇偶校驗位,流量控制等。

    c。在NVIC中啓用UART IRQ並設置優先級。

  3. 在UART ISR(USART2_IRQHandler)中調用HAL_UART_IRQHandler(UART_HandleTypeDef* huart);

  4. 當接收程序完成時,HAL_UART_IRQHandler將調用HAL_UART_RxCpltCallback。在此回調中,您可以傳輸接收的字節。

  5. 使用單個HAL_UART_Receive_IT(&huart2, &byte, 1);調用啓動回波循環。