新手上路
- 积分
- 34
- 金钱
- 34
- 注册时间
- 2020-5-19
- 在线时间
- 9 小时
|
1金钱
DMA配置DMA2通道1,外设地址设置为flash起始地址,如下
DMA_InitStructure.DMA_PeripheralBaseAddr = ((uint32_t)(0x08000000)); //flash起始地址
内存地址设为一个接收数组(顺带问下这边通过设置接收数组是不是就是存到sram中了)
地址增加都为Enable,开启内存到内存,然后想把得到的数据打印在串口上,但一直输出30 09 2C怎么回事
主要程序如下
DMA.C
void M2M_DMA_Init(uint8_t* ReceiveData,uint32_t len)
{
DMA_InitTypeDef DMA_InitStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
// 开启DMA1时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
DMA_Cmd(DMA2_Channel1, DISABLE); // 关DMA通道 DMA1_Channel5 UART1_Rx_DMA_Channel
DMA_DeInit(DMA2_Channel1);
// 设置串口接收数据寄存器
DMA_InitStructure.DMA_PeripheralBaseAddr = ((uint32_t)(0x08000000)); //flash起始地址
// 设置串口接收数据寄存器
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ReceiveData; //接收地址,定义后默认在sram中某块
//外设到内存
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
//长度
DMA_InitStructure.DMA_BufferSize = len;
//外设地址增加
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
//内存地址自增
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
//外设、内存数据宽度
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
//一次模式
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
// 开启内存到内存的DMA模式
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;
DMA_Init(DMA2_Channel1, &DMA_InitStructure); // 写入配置
DMA_ClearFlag(DMA2_FLAG_GL1); // 清除DMA所有标志
DMA_Cmd(DMA2_Channel1, ENABLE); // 开启接收DMA通道,等待接收数据
}
//main()
uint8_t receiveData[10];
int main()
{
USART1_Init(115200);
M2M_DMA_Init(receiveData,10);
while(1)
{
for(int i=0;i<10;i++)
{
printf("%d\t,",receiveData[i]);
}
M2M_DMA_Init(receiveData,10);
for(int i=0;i<100000;i++);
}
}
|
|