完善资料让更多小伙伴认识你,还能领取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)
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 07:49 , Processed in 0.713346 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号