完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
利用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 ); } |
|
相关推荐
1个回答
|
|
|
这个cube 库中有现成的函数可以用的呀 HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 08:18 , Processed in 0.590619 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2002