完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
接收采用串口的空闲中断来判断接收完成,程序下进去启动后第一次接收正常,往后就不行了,数据维持不变,不往缓存区写数据了,看了网上许多例程都差不多。
//启动DMA时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); //DMA通道配置 while(DMA_GetCmdStatus(DMA2_Stream2) != DISABLE){} //等待DMA可配置 DMA_DeInit(DMA2_Stream2); DMA_InitStructure.DMA_Channel = DMA_Channel_4; //外设地址 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->DR); //内存地址 DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)re_buff; //dma传输方向 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; //设置DMA在传输时缓冲区的长度 DMA_InitStructure.DMA_BufferSize =64; //设置DMA的外设递增模式,一个外设 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //设置DMA的内存递增模式 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //外设数据字长 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //内存数据字长 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //设置DMA的传输模式 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //设置DMA的优先级别 DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; //指定如果FIFO模式或直接模式将用于指定的流 : 不使能FIFO模式 DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; //指定了FIFO阈值水平 DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; //指定的Burst转移配置内存传输 DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; //指定的Burst转移配置外围转移 */ DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; //配置DMA1的通道 DMA_Init(DMA2_Stream2, &DMA_InitStructure); //使能通道 DMA_Cmd(DMA2_Stream2,ENABLE); void Receive_Data_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET) { USART1->SR; USART1->DR; //清USART_IT_IDLE标志 //关闭DMA DMA_Cmd(DMA2_Stream2,DISABLE); //清除标志位 DMA_ClearFlag(DMA2_Stream2,DMA_FLAG_TCIF4); re_len = BUFF_SIZE - DMA_GetCurrDataCounter(DMA2_Stream2); //获得接收帧帧长 // memcpy(buf,re_buff,re_len); //设置传输数据长度 DMA_SetCurrDataCounter(DMA2_Stream2,BUFF_SIZE); //打开DMA DMA_Cmd(DMA2_Stream2,ENABLE); } } 后来把DMA_Mode 改成 DMA_Mode_Circular(循环接收) 则接收正常,正常模式只能接收一次,但在串口接收中断里明明已经重新设定了DMA传输数量并重新使能了。 网上的例程都用的DMA_Mode_Normal,不知道为什么我的用这个模式不行,希望知道的朋友能在下方评论留言! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1975 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1760 浏览 1 评论
1232 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
819 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1776 浏览 2 评论
2015浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
889浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
318浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
670浏览 3评论
661浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-23 15:42 , Processed in 0.728853 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191