介绍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。