Mục tiêu

  • Học cách setup UART với interrupt trong CubeIDE
  • Sinh code và sử dụng HAL function
  • Tạo loopback với interrupt

Kết quả

  • Cấu hình UART và sinh code
  • Truyền nhận data qua UART với interrupt
  • Kiểm tra lại kết quả của từng function

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ân PA9, và PA10 mặc định sẽ được lựa chọn theo với USART1 tương tự như bài UART trước

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 tương tự như bài trước luôn

Cấu hình NVIC

  • Chọn NVIC > NVIC > enable USART1 global interrupt

Sau đó generate code bằng cách save lại

Workflow

HAL Library UART với IT receive flow

HAL Library UART với IT transmit flow

Code

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

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

  • HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  • HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

Các bước thực hiện

  • Định nghĩa buffer
  • Gửi và nhận data
  • Kiểm tra callback hoàn thành
/* USER CODE BEGIN 0 */
uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9};
uint8_t rx_buff[10];
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart1, rx_buff, 10);
  HAL_UART_Transmit_IT(&huart1, tx_buff, 10);
/* USER CODE END 2 */

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  __NOP();//test if we reach this position
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
  __NOP();//test if we reach this position
}
/* USER CODE END 4 */

Chương trình tham khảo

GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4
Các ví dụ lập trình STM32F4 Discovery dùng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.