|
利用dma+ldle接收数据,使用STM32cubemx生成driver,使用hal库发现仅能接收一次数据,然后串口busy无法再次触发中断,然后使用标准库编写测试代码,数据接收问题解决,数据输出乱码,波特率设置无误(debug显示接收数据正常)请问是不是哪里配置不对? cube生成代码之外user config如下: void usart_transmit_buffer_f( uint8_t *p_buffer, uint32_t g_len ) { while( !LL_USART_IsActiveFlag_TXE( USART2 ) ); LL_DMA_ClearFlag_TC6( DMA1 ); LL_DMA_DisableStream( DMA1, LL_DMA_STREAM_6 ); LL_DMA_SetMemoryAddress( DMA1, LL_DMA_STREAM_6, ( uint32_t )( &p_buffer ) ); LL_DMA_SetPeriphAddress( DMA1, LL_DMA_STREAM_6, ( uint32_t )( &USART2->DR ) ); LL_DMA_SetDataLength( DMA1, LL_DMA_STREAM_6, 35 ); LL_DMA_EnableStream( DMA1, LL_DMA_STREAM_6 ); } void user_config( void ) { LL_DMA_SetPeriphAddress( DMA1, LL_DMA_STREAM_5, ( uint32_t )( &USART2->DR ) ); LL_DMA_SetDataLength( DMA1, LL_DMA_STREAM_5, DRIVER_UART_MAXNUM ); LL_DMA_SetMemoryAddress( DMA1, LL_DMA_STREAM_5, ( uint32_t )( &g_usart3_receive_buffer ) ); LL_USART_EnableIT_IDLE( USART2 ); LL_DMA_EnableStream( DMA1, LL_DMA_STREAM_5 ); LL_USART_EnableDMAReq_RX( USART2 ); LL_DMA_SetPeriphAddress( DMA1, LL_DMA_STREAM_6, ( uint32_t )( &USART2->DR ) ); LL_DMA_EnableIT_TC( DMA1, LL_DMA_STREAM_6 ); LL_USART_EnableDMAReq_TX( USART2 ); } |
在擦除flash时 同时挂起中断 是否会造成卡死以及相关的卡死机制
STM32F407VET6,使用cubeIDE下载跑不起来
FLASH擦除轮询等待时CPU真的会轮询吗
STM32F417 RTC读取亚秒寄存器
使用 HAL 库通过串口以 ASCII 形式发送整型数据
串口DMA收发出现ORE错误
STM32F103C8T6 上电后无法通过串口发出数据的问题?
HAL_UART_Transmit_DMA 异常
STM32F405ZGT6 批次22+ 问下这颗料,60度烘烤12小时后,出现鼓包,是怎么回事? 原厂有标准的烘烤温度范围 跟时长范围吗?
STM32 增加 WiFi + 以太网的低成本方案
微信公众号
手机版
楼主可以参考下面的博客说明,写得挺好的。 两行代码就搞定了~~
STM32使用串口空闲中断(IDLE)和 DMA接收一串数据流_stm32串口空闲中断_ONE_Day|的博客-CSDN博客
HAL库踩坑记录-CSDN博客