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
![](https://hocarm.org/content/images/2021/09/image-45.png)
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
![](https://hocarm.org/content/images/2021/09/image-46.png)
Quan sát ở GPIO thẻ UART bạn có thể thấy Maximum output được set lên là Very High
![](https://hocarm.org/content/images/2021/09/image-47.png)
Xong phần cấu hình, giờ sinh code thôi
Workflow
HAL Library flow init
![](https://hocarm.org/content/images/2021/09/image-48.png)
![](https://hocarm.org/content/images/2021/09/image-49.png)
![](https://hocarm.org/content/images/2021/09/image-51.png)
![](https://hocarm.org/content/images/2021/09/image-52.png)
![](https://hocarm.org/content/images/2021/09/image-53.png)
![](https://hocarm.org/content/images/2021/09/image-54.png)
![](https://hocarm.org/content/images/2021/09/image-55.png)
HAL Library transmit flow
![](https://hocarm.org/content/images/2021/09/image-56.png)
HAL Library receive flow
![](https://hocarm.org/content/images/2021/09/image-57.png)
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