硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4645|回复: 3
收起左侧

[有问必答] 求救 STM32CUBEMX 设置串口DMA接收不成功

[复制链接]

13

主题

45

回帖

84

积分

初级会员

积分
84
发表于 2020-3-7 17:56:32 | 显示全部楼层 |阅读模式
如图开启了DMA,然后开启了USART1全局中断,但是无法接收:
  1. uint8_t rx_buffer[20]={1,2,3,4,5,6,7};

  2. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  3. {
  4.     if(huart->Instance == USART1)
  5.                 {
  6.         HAL_UART_Transmit_DMA(&huart1, rx_buffer, 20);                       
  7.                     HAL_UART_Receive_DMA(&huart1,rx_buffer, 20);
  8.                 }
  9. }


  10. int main(void)
  11. {
  12.   
  13.   HAL_Init();

  14.   SystemClock_Config();


  15.   MX_GPIO_Init();
  16.   MX_DMA_Init();
  17.   MX_USART1_UART_Init();
  18.   /* USER CODE BEGIN 2 */
  19.         HAL_UART_Receive_DMA(&huart1,rx_buffer, 20);
  20.   /* USER CODE END 2 */


  21.   while (1)
  22.   {
  23.                 HAL_Delay(1000);
  24.   }
  25.   /* USER CODE END 3 */
  26. }
复制代码


企业微信截图_15835748807630.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2020-3-7 18:35:27 | 显示全部楼层
不要在中断里面再次开启。

试试我的应用方式。

仅看应用处理记录
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86271


回复

使用道具 举报

13

主题

45

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2020-3-9 16:01:02 | 显示全部楼层
eric2013 发表于 2020-3-7 18:35
不要在中断里面再次开启。

试试我的应用方式。

谢谢硬汉哥,我发现DMA发送数据的时候重置接收buff,会出现下一次数据不能接收的情况。

所以开了一个txcplcallback  回调函数,在发送完成回调函数里面重置接收buff,没有问题。

这是我用F1开发板调试的,换成用F4开发板就不行了,都是用的HAL库。不知道你有遇到这问题吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2020-3-9 16:07:49 | 显示全部楼层
a3748622 发表于 2020-3-9 16:01
谢谢硬汉哥,我发现DMA发送数据的时候重置接收buff,会出现下一次数据不能接收的情况。

所以开了一个t ...

F4的话,试试我这个

基于V6的CMSIS-Driver串口应用,支持8串口DMA不定长收发,比CubeMX还要省事
http://www.armbbs.cn/forum.php?m ... 3714&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-13 19:53 , Processed in 0.266736 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表