HAL——串口
2024-01-03 00:25:26
学习目标
- 熟悉STM32CubeMX配置流程
- 掌握串口发送和接收
- 掌握串口DMA发送和DMA接收
- 掌握printf配置
学习内容
开发流程
- 配置芯片串口功能
- 编写串口代码
- 调试
串口功能配置
串口功能开启
- 在
Connectivity
下选择合适的串口,这里选择USART1
- 配置模式为异步,
Asynchronous
串口中断配置
- 在
NVIC Settings
下,打开串口中断。
串口参数配置
Parameter Settings
中,根据情况配置串口的参数。
查询配置结果
在GPIO Setting
中可以显示默认的IO引脚
右侧芯片引脚部分会显示配置的结果。
发送功能测试
main
/* USER CODE BEGIN WHILE */
uint8_t cnt = 0;
while (1)
{
HAL_UART_Transmit(&huart1, &cnt, 1, HAL_MAX_DELAY);
cnt++;
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
通过
HAL_UART_Transmit
函数发送数据。
中断接收功能测试
/* USER CODE BEGIN WHILE */
HAL_UART_Receive_IT(&huart1, usart1_buffer, USART1_BUFFER_LEN);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
/* USER CODE BEGIN 0 */
#define USART1_BUFFER_LEN 1
uint8_t usart1_buffer[USART1_BUFFER_LEN];
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
HAL_UART_Transmit(&huart1, (const uint8_t *)usart1_buffer, USART1_BUFFER_LEN, HAL_MAX_DELAY);
// 开启中断接收
HAL_UART_Receive_IT(&huart1, usart1_buffer, USART1_BUFFER_LEN);
}
/* USER CODE END 0 */
?printf配置
#include <stdio.h>
int fputc(int ch, FILE* f) {
HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
return ch;
}
DMA收发
配置
DMA发送
/* USER CODE BEGIN WHILE */
uint8_t cnt = 0;
while (1)
{
HAL_UART_Transmit_DMA(&huart1, &cnt, 1);
cnt++;
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
DMA接收
#define USART1_BUFFER_LEN 8
uint8_t usart1_buffer[USART1_BUFFER_LEN];
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
HAL_UART_Transmit_DMA(&huart1, (const uint8_t *)usart1_buffer, USART1_BUFFER_LEN);
// 开启中断接收
HAL_UART_Receive_DMA(&huart1, usart1_buffer, USART1_BUFFER_LEN);
}
练习
- 使用CubeMX配置串口的收发
文章来源:https://blog.csdn.net/bug_love/article/details/135350371
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!