利用STM32CubeMx的串口DMA收发数据

0aa5f9a2c8bd4272d6b199c358671e44.png

一,代码生成

  1. 按以前的方法设置好时钟和调试方式,这里就不多说了。

cb0a6ee7dd4b3f3995fef6dbc15b81da.png8e36415692203aadea2016a530a5b47f.png

2.设置串口1。

dca4e2ea04805e059444b0800cee4333.png

3.在DMA Setting里点击Add添加USART1_TX,Mode有两种模式,一种是普通模式,使用一次发送语句就发一次,另一种是循环模式,使用一次发送会一直发送。这里发送我选择普通模式,接收选择循环模式。

34f7aabc9a249843e89a9e632b998e72.png

4.在中断设置里打开串口1的中断。

cea841403c52f6134bd7092b72550b8a.png

 5.时钟和文件路径等设置好,然后点生成代码。

b9c1c925e2f4d659b36aa7eed02bc8de.png


二,代码编写

1.先定义发送和接收的数组。

 
 
/* USER CODE BEGIN 0 */
uint8_t aRxBuffer[1];
uint8_t aTxBuffer[]="ok";
/* USER CODE END 0 */

2.打开串口DMA的发送使能,while循环可以放一些LED的闪烁。

 
 
/* USER CODE BEGIN 2 */
  HAL_UART_Receive_DMA(&huart1,aRxBuffer,1);
  HAL_UART_Transmit_DMA(&huart1,aTxBuffer,sizeof(aTxBuffer));
  /* USER CODE END 2 */

3.最后加上一个串口接收函数的回调函数,把接收到的数据再发出去。

 
 
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
    HAL_UART_Transmit(&huart1,aRxBuffer,1,0);
}
/* USER CODE END 4 */


三,现象:

电脑的串口会收到“OK”,然后从电脑发送给芯片任意字符,芯片再发回来。

151d9392e467b177a0761549f6f5653d.png

==========

往期回顾:

STM32的DMA的五大问题

单片机的各个通信协议的波特率

C语言有哪些预处理操作?

函数指针的五大作用

卡尔曼滤波的原理和C代码

==========

原文链接:点击阅读原文

作者:来来就来

平台:博客园

ddec51d20508c4124fc5a82717cef801.png

7f37205bced3d68e3187447dac410429.png

81da97c9f0274dd53cb2b38c6a2e6727.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值