你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32cubef1xx 串口接收完成不了,进不了回调

[复制链接]
captainliuy 提问时间:2015-3-30 11:38 /
芯片stm32f103zet,用串口1和串口2;
串口1,DMA循环模式接收1字节,处理用户输入命令,
串口2,DMA普通模式接收512字节,解析GPS信息,

问题1:串口2启动DMA,HAL_UART_Receive_DMA(&huart2, &GPSRxBuff[0], 512); 只可以完成一次,下次启动不能完成。
附件为工程






问题说明见链接,解决办法
在启动DMA时加入清除错误标志的语句
  1. void GPS_UART_Start(void)
  2. {
  3.     /* Start the receiver */
  4.     __HAL_UART_CLEAR_OREFLAG(&hGPS);
  5.         if(hGPS.State == HAL_UART_STATE_READY || hGPS.State == HAL_UART_STATE_BUSY_TX)
  6. //                HAL_UART_Receive(&hGPS, &GPSRxBuff[0], 512,1000);
  7.                 HAL_UART_Receive_DMA(&hGPS, &GPSRxBuff[0], 511);
  8. }
复制代码


stm32_uart2.rar

下载

17.72 KB, 下载次数: 14, 下载积分: ST金币 -1

收藏 评论8 发布时间:2015-3-30 11:38

举报

8个回答
netlhx 回答时间:2015-3-30 11:57:04
内存增量设置好了么
captainliuy 回答时间:2015-3-30 12:21:21
netlhx 发表于 2015-3-30 11:57
内存增量设置好了么
  1. hdma_usart2_rx.Instance = DMA1_Channel6;
  2.     hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  3.     hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
  4.     hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
  5.     hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  6.     hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  7.     hdma_usart2_rx.Init.Mode = DMA_NORMAL;
  8.     hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
  9.     HAL_DMA_Init(&hdma_usart2_rx);
复制代码
沐紫 回答时间:2015-3-30 13:19:00
谢谢楼主~
captainliuy 回答时间:2015-3-30 13:36:23

Cube确实很好用,我是初次用STM32,对开发帮助很大,但是也有些问题,希望你们能收集这些问题,让我们少走弯路。
这是前面发的一个帖子,关于Can的一个bughttps://www.stmcu.org.cn/module/forum/thread-600734-1-1.html
wamcncn 回答时间:2015-3-30 14:16:37
谢谢分享
wyxy163@126.com 回答时间:2015-4-7 19:15:21
提示: 作者被禁止或删除 内容自动屏蔽
wyxy163@126.com 回答时间:2015-4-7 19:15:36
提示: 作者被禁止或删除 内容自动屏蔽
HenryChen 回答时间:2015-7-8 12:08:34
谢谢楼主分享

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版