captainliuy 发表于 2015-3-30 11:38:23

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

芯片stm32f103zet,用串口1和串口2;
串口1,DMA循环模式接收1字节,处理用户输入命令,
串口2,DMA普通模式接收512字节,解析GPS信息,

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






问题说明见链接,解决办法
在启动DMA时加入清除错误标志的语句
void GPS_UART_Start(void)
{
    /* Start the receiver */
    __HAL_UART_CLEAR_OREFLAG(&hGPS);
      if(hGPS.State == HAL_UART_STATE_READY || hGPS.State == HAL_UART_STATE_BUSY_TX)
//                HAL_UART_Receive(&hGPS, &GPSRxBuff, 512,1000);
                HAL_UART_Receive_DMA(&hGPS, &GPSRxBuff, 511);
}

netlhx 发表于 2015-3-30 11:57:04

内存增量设置好了么

captainliuy 发表于 2015-3-30 12:21:21

netlhx 发表于 2015-3-30 11:57
内存增量设置好了么

hdma_usart2_rx.Instance = DMA1_Channel6;
    hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart2_rx.Init.Mode = DMA_NORMAL;
    hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
    HAL_DMA_Init(&hdma_usart2_rx);

沐紫 发表于 2015-3-30 13:19:00

谢谢楼主~

captainliuy 发表于 2015-3-30 13:36:23

沐紫 发表于 2015-3-30 13:19
谢谢楼主~

Cube确实很好用,我是初次用STM32,对开发帮助很大,但是也有些问题,希望你们能收集这些问题,让我们少走弯路。
这是前面发的一个帖子,关于Can的一个bughttps://www.stmcu.org.cn/module/forum/thread-600734-1-1.html

wambob 发表于 2015-3-30 14:16:37

谢谢分享

数码小叶 发表于 2015-4-7 19:15:21

学习学习

数码小叶 发表于 2015-4-7 19:15:36

谢谢分享

HenryChen 发表于 2015-7-8 12:08:34

谢谢楼主分享
页: [1]
查看完整版本: stm32cubef1xx 串口接收完成不了,进不了回调