问题1
主函数:
1 #include "stm32f10x.h" // Device header 2 #include "Delay.h" 4 #include "DMA.h" 5 #include "Serial.h" 7 9 uint8_t arr[3]; 10 int main(void) 11 { 12 int a=0; 13 /*模块初始化*/ 14 OLED_Init(); //OLED初始化 15 Key_Init(); //按键初始化 16 Serial_Init(); //串口初始化 17 MyDMA_TX_Init(DMA1_Channel4,(uint32_t)&USART1->DR,(uint32_t) arr,3); 18 19 20 arr[0]=0x01; 21 arr[1]=0xFA; 22 arr[2]=0x02; 23 SRAM_USART1_Transfer(); 24 25 arr[0]=0x03; 26 arr[1]=0xFB; 27 arr[2]=0x04; 28 SRAM_USART1_Transfer(); 29 30 }
1 #include "DMA.h" 2 3 uint16_t _count; 4 5 void MyDMA_TX_Init(DMA_Channel_TypeDef* DMA_CHx,uint32_t PeripheralAddr,uint32_t MemoryAddr,uint16_t count) 6 { 7 _count=count; 8 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); 9 10 DMA_InitTypeDef DMA_InitStructure; 11 12 DMA_InitStructure.DMA_PeripheralBaseAddr=PeripheralAddr; 13 DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte; 14 DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; 15 16 DMA_InitStructure.DMA_MemoryBaseAddr=MemoryAddr; 17 DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte; 18 DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; 19 20 DMA_InitStructure.DMA_BufferSize=count; 21 DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST; 22 DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; 23 DMA_InitStructure.DMA_Mode=DMA_Mode_Normal; 24 DMA_InitStructure.DMA_Priority=DMA_Priority_High; 25 DMA_Init(DMA_CHx, &DMA_InitStructure); 26 27 // DMA_Cmd(DMA1_Channel4,ENABLE); 28 USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //使能串口1的DMA发送 29 } 30 31 void SRAM_USART1_Transfer(void) 32 { 33 DMA_Cmd(DMA1_Channel4,DISABLE);//失能DMA通道 34 DMA_SetCurrDataCounter(DMA1_Channel4, _count);//将传输计数器赋值 35 DMA_Cmd(DMA1_Channel4,ENABLE);//使能DMA 36 37 while(DMA_GetFlagStatus(DMA1_FLAG_TC4)==RESET);//等待DMA转运完成 38 DMA_ClearFlag(DMA1_FLAG_TC4); 39 }
黄色的地方取消注释:
初始化后根本没有程序触发DMA搬运数据,为什么会有00的出现
问题2
1 Serial_SendByte(0x01); 2 arr[0]=0xFA; 3 // Delay_ms(500); 4 SRAM_USART1_Transfer(); 5 Serial_SendByte(0x02);
当我把黄色的注释掉的时候DMA转运的数据没有显示到串口上
我查了一下DMA不会在你让它转运数据的时候立刻转运数据,也就是DMA想转运数据的时候串口数据寄存器被占了
STM32利用DMA发送无法正确发送数据的问题_stm32f hal usart dma 发送 数据 不正确-CSDN博客
标签:count,DMA,arr,问题,Init,DMA1,InitStructure From: https://www.cnblogs.com/Sandals-little/p/17963078