stm32-USART+DMA配置

介绍stm32F103zet6各功能可以请求的DMA通道,以及对USART2+DMA进行配置。

DMA通道

各功能可以请求的DMA通道

USART+DMA配置

main函数,采用寄存器方式配置DMA:

int main(void)
{
    uint8_t tx[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10};
    SysTick_Init();
    UART_Initone();
//////////////////////////////////////////DMA
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); 
    DMA1_Channel7->CNDTR=sizeof(tx);
    DMA1_Channel7->CPAR=(uint32_t)(&USART2->DR);//目的地址
    DMA1_Channel7->CMAR=(uint32_t)tx;
    DMA1_Channel7->CCR=(uint32_t)0x1090;//对CCR寄存器配置为非存储器到存储器模式等其他
    DMA1_Channel7->CCR|=(uint32_t)0x0001;
//////////////////////////////////////////
    LED2_ON;
    LED3_ON;
while(1)
 {

 } 
}

USART2初始化函数UART_Initone:

void UART_Initone(void)
{
    GPIO_InitTypeDef GPIO_InitStructureuart;
    USART_InitTypeDef usartone;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    //TX_GPIO
    GPIO_InitStructureuart.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructureuart.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStructureuart.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructureuart);
    //RX_GPIO
    GPIO_InitStructureuart.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructureuart.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructureuart);

    usartone.USART_BaudRate=9600;
    usartone.USART_WordLength=USART_WordLength_8b;
    usartone.USART_StopBits=USART_StopBits_1;
    usartone.USART_Parity=USART_Parity_No;
    usartone.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
    usartone.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(USART2, &usartone);
    USART_DMACmd( USART2, USART_DMAReq_Tx, ENABLE);/////使能USART2的DMA请求
    USART_Cmd(USART2, ENABLE);//使能USART
}  

不开中断就不需要配置NVIC。