STM32F4寄存器初始化系列:串口DMA接收

 1 static void USART2_config(void)
 2 {
 3   float temp;
 4   u16 mantissa;
 5   u16 fraction;
 6   
 7   DMA1_Stream5->PAR=(uint32_t)&(USART2->DR);        //DMA外设地址           多重ADC->CDR
 8   DMA1_Stream5->M0AR= (uint32_t)_Compass_Value;            //DMA 存储器0地址
 9   DMA1_Stream5->NDTR=3;       //传输数据项个数
10   DMA1_Stream5->CR=0;        //先全部复位CR寄存器值 
11   DMA1_Stream5->CR|=4<<25;     //通道选择4
12   DMA1_Stream5->CR|=0<<23;     //存储器单次传输
13   DMA1_Stream5->CR|=0<<21;     //外设单次传输
14   DMA1_Stream5->CR|=1<<16;     //中等优先级        2:高  3:非常高
15   DMA1_Stream5->CR|=0<<13;     //存储器数据大小为8位     0:8位    1:16位  2:32位
16   DMA1_Stream5->CR|=0<<11;     //外设数据大小为8位       0:8位    1:16位  2:32位
17   DMA1_Stream5->CR|=1<<10;     //存储器地址递增
18   DMA1_Stream5->CR|=0<<9;      //外设地址固定
19   DMA1_Stream5->CR|=1<<8;     //循环模式
20   DMA1_Stream5->CR|=0<<6;     //0:外设到存储器   1:存储器到外设   2:存储器到存储器
21   DMA1_Stream5->CR|=1<<0;      //开启DMA传输
22   
23   
24   //波特率为
25   temp=(float)(42000000)/(19200*16);//得到USARTDIV@OVER8=0
26   mantissa=(u16)(temp);                 //得到整数部分
27   fraction=(u16)((temp-mantissa)*16); //得到小数部分@OVER8=0 
28   mantissa<<=4;
29   mantissa+=fraction; 
30   
31   //波特率设置
32   USART2->BRR=mantissa;     //波特率设置     
33   USART2->CR1&=~(1<<15);     //设置OVER8=0   
34   //使能发送
35   //USART2->CR1|=1<<3;      //串口发送使能      
36   USART2->CR1|=1<<2;      //串口接收使能
37   
38   USART2->CR3=1<<6;      //开启DMA输出
39   //使能 
40   USART2->CR1|=1<<13;      //串口使能
41   
42   
43 }

猜你喜欢

转载自www.cnblogs.com/penuel/p/11265322.html