
STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
测评在哪里发?
STM32N6570-DK开发板,哪里还有卖的?
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
定时器使用DMA突发传输功能时,传入指针从常量数组改为变量数组后,传输功能异常。测试官方用例一样,是何原因?
Group Study vs. Solo Study: What Works Best?
求助,使用51单片机和VL6180X传感器测距,结果一直是0是什么原因,能读到ID为0xB4
STM32U3 IIC通信后,SPI+GPDMA 进入循环发送,DMA无法使能 寄存器USEF=1
STM32H7双核调试问题:CM7能成功调试但CM4始终报"Failed to read ROM table via AP 3"错误
stm32G474的flash模式如何判定?single bank 和dual bank
网上不少类似案例分享,稍微比较下。 如果使用ST库的话,
注意你的第二次是否真的发送了,里面有些类似gState状态机
的变量,看看是否在ready状态。
HAL库,自定义空闲中断回调,在串口中断服务函数中调用。在其他位置进行发送接收数组(阻塞),这种情况下可以正常接收,包含接收个数第二次也正常。如果使用DMA发送就会导致第二次接收长度为0,接收DMA配置为一般模式,发送DMA循环模式。接收串口在自定义回调函数中重新开启了DMA串口接收。 在测试过程中仅更改了串口发送方式,DMA(非阻塞)和阻塞发送。不理解为什么串口发送影响了串口接收。
HAL_UART_Transmit(&huart3 ,USART3_Struct.rxbuf, 16 , 10);
HAL_UART_Transmit_DMA(&huart3 ,USART3_Struct.rxbuf, 16);
void USR_UART_IdleRxCpltCallback(UART_HandleTypeDef *huart) { if( huart->Instance == USART3) { if ( USART3_Struct.Busyflag == 0 ) { USART3_Struct.usart3_rxbuf_len = rxbuffsize - (__HAL_DMA_GET_COUNTER(&hdma_usart3_rx));//接收个数 if( USART3_Struct.usart3_rxbuf_len != 16 )//判断接收数据长度是否正常,如果异常就回复数据长度错误 { //长度错误 } if(USART3_Struct.usart3_rxbuf_len==16)//数据长度正常,未处于解析命令状态 { //拷贝数组 for(uint8_t i=0; i < USART3_Struct.usart3_rxbuf_len ;i++) { USART3_Struct.rxbuf[i]=USART3_Struct.usart3_rxbuf[i];//将收到的数组放到解析缓存数组里去 } //主函数轮询标志位->解析数据缓存Buf memset(USART3_Struct.usart3_rxbuf , 0x00 , USART3_Struct.usart3_rxbuf_len);//清空DMA接收缓冲区 } HAL_UART_Receive_DMA(&huart3, USART3_Struct.usart3_rxbuf , rxbuffsize);//重新开启DMA USART3_Struct.Rxflag = 1;//接收完成标志位 USART3_Struct.Busyflag = 1; //正在解析标志位 }
}
[md]应该不会有影响。idle中断可以不用自定义,建议使用新函数
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)
。看看是不是你的代码在ISR中将DMA停止了
在接收中断里,如果DMA是normal 模式,看起来是停掉了。
可以在回调函数里接着再使能。
楼主可以再调试一下,看看是不是这么回事。