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