当前位置: 首页 > news >正文

STM32+UART串口+DMA收发

目录

1、cubemax端配置

1.1 初始化配置

1.2 GPIO配置

 1.3 UART配置

1.3.1 串口基础配置

1.3.2 DMA配置

2、keil端代码设计

2.1 初始化配置

2.2 DMA接收初始化配置

2.3 DMA发送配置

 2.4 接收回调函数设置

2.5 回调函数内容代码编写

2.5.1 接收回调函数

2.5.2 发送回调函数

2.6 回调函数内容代码优化


1、cubemax端配置

1.1 初始化配置

首先通过STM32cubemax进行基础配置:

 cubemax基础配置

1.2 GPIO配置

通过一个LED小灯(高电平有效)来观察效果,对PB0引脚进行GPIO配置,如下图所示:

 1.3 UART配置

1.3.1 串口基础配置

1.3.2 DMA配置

首先对RX进行配置,如下图所示:

 

接着对TX进行配置(默认就行),如下图所示:

2、keil端代码设计

2.1 初始化配置

首先在主函数上方进行发送、接收数组设置,如下图所示:

uint8_t tx[] = "TX ok";
uint8_t Rx[2]; 

2.2 DMA接收初始化配置

 HAL_UART_Receive_DMA(&huart1,Rx,sizeof(Rx));

2.3 DMA发送配置

HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx));
HAL_Delay(1000);

 2.4 接收回调函数设置

首先找到HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数,如下图所示:

接着将函数按下图所示复制到主函数上方:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{/* Prevent unused argument(s) compilation warning */UNUSED(huart);/* NOTE: This function should not be modified, when the callback is needed,the HAL_UART_RxCpltCallback could be implemented in the user file*/
}

2.5 回调函数内容代码编写

2.5.1 接收回调函数

//接收到数据 LED小灯电平翻转

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart1.Instance == USART1){HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);}
}

2.5.2 发送回调函数

将接收回调函数中R改成T即可实现发送回调函数功能。如下图所示:

 当有数据发送,回调函数进行工作,如下图所示:


uint8_t tx2[] = "TX_IT ok";//发送回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{if(huart1.Instance == USART1){HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx2));}
}

2.6 回调函数内容代码优化

当在回调函数中添加延时后,会发现程序卡死,因此需要对NVIC进行配置,如下图所示:

 

 

http://www.lryc.cn/news/154144.html

相关文章:

  • 安全基础 --- js的闭包和this属性
  • 【C语言每日一题】08. 字符三角形
  • 如何打war包,并用war包更新服务器版本
  • uniApp webview 中调用底座蓝牙打印功能异常
  • Mac下安装Jmeter及其配置
  • js+html实现打字游戏v1
  • Java on VS Code 8月更新|反编译器用户体验优化、新 Maven 项目工作流、代码高亮稳定性提升
  • 划分Vlan时需要注意的问题
  • 【广州华锐互动】利用AR远程指导系统进行机械故障排查,实现远程虚拟信息互动
  • Spring工具类--CollectionUtils的使用
  • Node.js 应用的御用品: Node.js 错误处理系统
  • K210-CanMV IDE开发软件
  • 0301yarnmapredude入门-hadoop-大数据学习
  • 大数据课程K15——Spark的TF-IDF计算Term权重
  • 【C语言】字符函数,字符串函数,内存函数
  • Spring MVC:域对象共享数据
  • Vue框架--Vue中的计算属性
  • 面试题-React(八):React如何实现插槽?
  • 【前端demo】动态赋值CSS
  • BlockUI专栏目录
  • K8S获取连接token
  • CountDownLatch原理-(主线程等待子线程结束再执行)
  • mybatis源码学习-3-解析器模块
  • 解决微信小程序recycle-view使用百分比单位控制宽高时出现的内容溢出问题
  • 如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?
  • 在 Node.js 中使用 MongoDB 事务
  • IntelliJ IDEA的远程开发(Remote Development)
  • 网络安全-信息收集简介
  • 页面页脚部分CSS分享
  • 微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽