Mục tiêu

  • Học cách cấu hình UART
  • Học cách sinh code và sử dụng HAL function
  • Truyền nhận data qua uart

Kết quả

  • Cấu hình UART và sinh code
  • Truyền nhận data thông qua UART không dùng interrupt
  • Xác thực lại hoạt động

Cấu hình

Tạo project

  • Cách làm tương tự như bài hướng dẫn trước File > New > STM32 Project
  • Chúng ta cần tìm một số chân không dùng để tạo ra kết nối loopback
  • Chọn USART1 là asynchronous mode
  • Chân PA9, và PA10 mặc định sẽ được lựa chọn theo với USART1

Cấu hình clock

  • Set clock với tần số tối đa, giống như bài trước

Cấu hình UART

  • Các thông số có thể cấu hình được cho UART là BaudRate,World length,Parity,Stop bits,Data direction, Oversampling

Quan sát ở GPIO thẻ UART bạn có thể thấy Maximum output được set lên là Very High

Xong phần cấu hình, giờ sinh code thôi

Workflow

HAL Library flow init

HAL Library transmit flow

HAL Library receive flow

Code

  • Viết code trong main.c giữa /* USER CODE BEGIN 3*/và /* USER CODE END 3*/ và cod trong while function

2 hàm được dùng cho truyền và nhận là

  • HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
  • HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

Truyền data

  • Tạo data structure cho data
  • Gọi transmit function từ while loop
/* USER CODE BEGIN 0 */
uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9};
/* USER CODE END 0 */
/* USER CODE BEGIN 3 */
  while (1)
  {
	  HAL_UART_Transmit(&huart1,data,10,1000);
  }
 /* USER CODE END 3 */

Nhận data

  • Tạo data structure cho data
  • Gọi transmit function từ while loop
/* USER CODE BEGIN 0 */
uint8_t data[10];
/* USER CODE END 0 */
//..
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	HAL_UART_Receive(&huart1,data,10,1000);
  }
  /* USER CODE END 3 */

Chương trình tham khảo

https://github.com/hocarm/STM32F4-Discovery-Tutorial/tree/stm32cubeide_f4