这是代码,请大神们看看,哪里出问题了?为什么收不到想要的数据呢?
#define USART1_Address (u32)0x40013800+0x04
u16 TX_Buffer[15];
const u8 TEXT_TO_SEND[]={"012345678912345 "};
u8 i=0;
while(1)
{
for(i=0;i<15;i++)
{
TX_Buffer=TEXT_TO_SEND;
}
USART1->CR3|=1<<7; //使能发送时的DMA模式
MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输
while(1)
{
if(DMA1->ISR&(1<<13)) //等待通道4传输完成
{
DMA1->IFCR|=1<<13; //清除通道4传输完成标志
break;
}
}
}
void USART1_Configuration(void)
{
USART1->BRR=0X1D4<<4;//波特率9600
USART1->CR1|=0X200C;//一个起始位 8个数据位 n个停止位 接收发送使能
USART1->CR1|=1<<5;//接收缓冲器非空中断
USART1->CR1|=1<<8; //使能PE中断
}
void DMA_Configuration(void)
{
RCC->AHBENR|=1<<0; //使能DMA1时钟
delay_ms(1); // 等待DMA时钟稳定
DMA1_Channel4->CCR=0X00000000; //复位
DMA1_Channel4->CCR&=~(1<<14); //非存储器到存储器模式
DMA1_Channel4->CCR|=1<<12; //中等优先级
DMA1_Channel4->CCR&=~(3<<10); //存储器数据宽度8位
DMA1_Channel4->CCR&=~(3<<8); //外设数据宽度8位
DMA1_Channel4->CCR|=1<<7; //执行存储器地址增量操作
DMA1_Channel4->CCR&=~(1<<6); //不执行外设地址增量操作
DMA1_Channel4->CCR|=0<<5; //普通模式
DMA1_Channel4->CCR|=1<<4; //从存储器读
DMA1_Channel4->CPAR=USART1_Address;
DMA1_Channel4->CMAR=(u32)TX_Buffer;
DMA1_Channel4->CNDTR=15; //数据传输数量
DMA1_Channel4->CNDTR&=0X0000; //传输数据寄存器清零
}
//开启一次DMA传输
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_CHx->CCR&=~(1<<0); //关闭DMA传输
DMA_CHx->CNDTR=15; //DMA1,传输数据量
DMA_CHx->CCR|=1<<0; //开启DMA传输
}
|